如何将外部文件包含到“apk”中?
例子:
.pro 文件所在的主目录中有“123.txt”。我应该在 pro 文件中添加什么以将“123.txt”放入 apk。
我尝试了部署,部署文件夹。但它们只适用于 Symbian 和 Windows CE。
有两种方法可以做到这一点,都在Qt 5.1 Documentation For Android的“移植现有的 Qt 应用程序”中提到。
对于#2:
构建项目时将创建“assets”目录。我发现在将文件打包到 apk 之前,使用“INSTALLS”qmake 变量将文件复制到目录中是最简单的。以下来自我制作的项目的 qmake 文件。请注意,对于 INSTALLS,资产的路径读取“/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 应用程序都可以使用“:/”前缀或 URL 方案前缀“qrc:”访问 qrc 文件的内容。
另一种方法是将资源部署到包的资产目录中。如果您想与 Android API 实现更好的互操作性,这是最佳选择。您可以使用“assets:”前缀访问目录中的所有资源。与 qrc 不同,这种方法不是跨平台的解决方案。
构建项目时,会在Build-Directory/android-build/
. 在资产目录中复制文件后,您可以将这些添加到您的专业版:
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);
}
一种更简单的方法:
1) 将此字符串添加到您的 .pro 中
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android-sources
2)在您的 proj 文件夹中创建 android-sources 文件夹。将你需要的任何东西放入 android-sources/assets/. 您还可以将要复制和更新到目标包中的任何其他文件(例如 AndroidManifest.xml 或 android-sources/res/drawable/icon.png)放在那里。
一种更简单的方法:
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android-sources