Qt 5.2将外部文件包含在Android软件包中?

use*_*925 14 qt qmake apk qt5 qt5.1

如何将外部文件包含到"apk"中?

例:

在.pro文件存在的主目录中有"123.txt".我应该添加到pro文件中以将"123.txt"放入apk中.

我试过DEPLOYMENT,DEPLOYMENTFOLDERS.但它们只适用于Symbian和Windows CE.

jwe*_*rny 12

有两种方法可以实现,两者都在Qt 5.1 Documentation For Android上的"移植现有Qt应用程序"中提到.

  1. 将它们捆绑成一个qrc文件(跨平台工作)
  2. 将它们添加到"assets:"目录(特定于Android)

对于#2:

构建项目时将创建"assets"目录.我发现最简单的方法是使用"INSTALLS"qmake变量将文件复制到目录中,然后再将其打包到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
Run Code Online (Sandbox Code Playgroud)


Nej*_*jat 7

您可以使用Qt资源系统.默认情况下,所有Qt应用程序都可以使用":/"前缀或URL方案前缀"qrc:"访问qrc文件的内容.

另一种方法是将资源部署到包的资产目录中.如果您想要与Android API实现更好的互操作性,这是最佳选择.您可以使用"assets:"前缀访问目录中的所有资源.与qrc不同,此方法不是跨平台解决方案.

在构建项目时,在Build-Directory/android-build/.中创建名为"assets"的文件夹.在资产目录中复制文件后,您可以将这些文件添加到您的专业版:

deployment.files += MyFile1
deployment.files += MyFile2
...
deployment.path = /assets
INSTALLS += deployment
Run Code Online (Sandbox Code Playgroud)

资产中的文件是只读的.因此,如果要更改它们,应首先将其复制到其他位置:

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