Qt 5.2 Включение внешнего файла в пакет Android?

Как включить внешний файл в 'apk'?

Пример:

В основной директории, где существует файл .pro, есть "123.txt". Что я должен добавить в файл pro, чтобы поставить "123.txt" в apk.

Я попробовал РАЗРЕШЕНИЕ, ДЕПЛОГИРОВАНИЕ. Но они работают только с Symbian и Windows CE.

Ответ 1

Есть два способа сделать это, оба упомянутые в разделе "Перенос существующего приложения Qt" на Qt 5.1 Документация для Android.

  • Объедините их в файл qrc (работает кросс-платформа)
  • Добавьте их в каталог "assets:" (для Android)

Для # 2:

Каталог "assets" будет создан при создании проекта. Мне было проще использовать переменную qmake "INSTALLS", чтобы скопировать файлы в каталог, прежде чем он будет упакован в apk. Ниже приведен файл qmake для проекта, который я сделал. Обратите внимание, что для INSTALLS путь к активам читает "/assets", а не "активы", как вы ожидали. (Фактически это заканчивается в подкаталоге рабочего пространства Android.)

Чтобы получить доступ к каталогу из кода в android, вы используете "assets:". (В примере /assets/Samples == > assets:/Samples.)

# - setup the correct location to install to and load from
android {
    # android platform
    # From: http://community.kde.org/Necessitas/Assets
    SAMPLES_INSTALL_PATH=/assets/Samples
} else {
    # other platforms
    SAMPLES_INSTALL_PATH=$$OUT_PWD/Samples
}

# - setup the 'make install' step
samples.path = $$SAMPLES_INSTALL_PATH
samples.files += $$SAMPLE_FILES
samples.depends += FORCE

INSTALLS += samples

Ответ 2

Вы можете использовать систему ресурсов Qt. По умолчанию все приложения Qt могут получить доступ к содержимому файла qrc с помощью префикса ":/" или префикса схемы URL, "qrc:".

Другой подход заключается в развертывании ресурсов в каталоге пакетов. Это лучший вариант, если вы хотите добиться лучшей совместимости с API Android. Вы можете получить доступ ко всем ресурсам в каталоге, используя префикс "assets:". В отличие от qrc, этот подход не является кросс-платформенным решением.

При создании проекта создается папка с именем "активы", созданная в Build-Directory/android-build/. После копирования файлов в каталог ресурсов вы можете добавить их в свой pro:

deployment.files += MyFile1
deployment.files += MyFile2
...
deployment.path = /assets
INSTALLS += deployment

Файлы в активах только для чтения. Поэтому сначала вы должны скопировать его в другое место, если хотите изменить его:

QFile dfile("assets:/MyFile1");
if (dfile.exists())
{
     dfile.copy("./MyFile1");
     QFile::setPermissions("./MyFile1",QFile::WriteOwner | QFile::ReadOwner);
}

Ответ 3

Конкретно для User2400925

В QT 5.1 я использовал для копирования базы данных из папки "Активы" в домашнюю папку пользователя, если файл не существует. Что может быть использовано приложением.

Вы можете пройти эту ссылку

Ответ 4

Еще один простой способ сделать это:

1) Добавьте эту строку в свой .pro

ANDROID_PACKAGE_SOURCE_DIR = $$ PWD/android-sources

2) Создайте папку с файлами android в папке proj. Поместите все, что вам нужно, в android-sources/assets/. Вы также можете поместить туда любые другие файлы, такие как AndroidManifest.xml или orroid-sources/res/drawable/icon.png, которые вы хотите скопировать и обновить в целевом комплекте.

Ответ 5

Еще один простой способ сделать это:

  • Добавьте эту строку в свой .pro

ANDROID_PACKAGE_SOURCE_DIR = $$ PWD/android-sources

  1. Создайте папку с файлами android в папке proj. Поместите все, что вам нужно, в android-sources/assets/. Вы также можете поместить туда любые другие файлы, такие как AndroidManifest.xml или orroid-sources/res/drawable/icon.png, которые вы хотите скопировать и обновить в целевом комплекте.