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

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

пример:

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

Я попробовал развертывание, DEPLOYMENTFOLDERS. Но они работают только с Symbian и Windows CE.

5 ответов


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

  1. Bundle их в файл qrc (работает кросс-платформенный)
  2. добавьте их в каталог" assets: "(Android specific)

для #2:

каталог "активы" будет создан при построении проекта. Я нашел, что проще всего использовать переменную "INSTALLS" qmake чтобы скопировать файлы в каталог, прежде чем он будет упакован в apk. Ниже приведен файл qmake для проекта, который я сделал. Обратите внимание, что для установок путь к активам читает "/assets", а не "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

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

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

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

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

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

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

специфический к User2400925

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

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


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

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

ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android-sources

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


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

  1. добавьте эту строку в свой .про

ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android-sources

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