一.遇到问题
用QT做android开发,生成的apk文件默认不包含程序配置文件和png文件,导致程序在android上无法读取必要的参数和logo,本文主要解决这个问题,并详细讲述QT android 的apk程序打包流程。
二.APK打包流程
1.如何生成APK
当我们的工程的构建套件选择Android编译器的时候,编译之后Qt会自动为我们生成APK文件。如果是编译并运行,Qt会要求你选择一个匹配的安卓虚拟设备或者真机设备,
它会自动把编译生成的APK安装到你选择的设备中,然后运行。你也可以通过这个来调试程序。
2.APK的生成路径
默认生成的apk的路径在build下:
android-build/build/outputs/apk/debug/
android-build/build/outputs/apk/release/
3.打包文件
这是本文的重点,如何将资源文件打包进APK中,以及如何通过代码访问。
(1)打包
要想把一些文件打包进APK,需要在pro文件里面这样写:
dataFiles.files+=src/readme.txt
dataFiles.files+=src/pic.png
dataFiles.path = /assets/data
INSTALLS += dataFiles
--dataFiles使我们需要添加的资源文件(可能是一个或多个) 的名字,代表所有我们想打包进APK的文件,它只在pro文件
中使用,所以可以随意命名,只要前后保持一致即可
--src是一个和pro文件同级的目录,可以将想要打包进APK的文件都放在这个目录下面
--dataFiles.files可以将想要打包的资源文件都包含进来
--dataFiles.path可以指定这些文件打包进APK之后的路径
--最后添加代码 INSTALLS += dataFiles 即可打包
--上述的例子中,我将src文件夹下的readme.txt和pic.png两个文件打包到了APK中,放在了assets/data目录下
--assets是安卓的一个目录,是专门可以用来放APK对应的资源文件的
(2)在代码中访问打包进APK的资源文件
如果要访问上面添加的两个文件,使用如下的路径即可:
assets:/data/readme.txt
(3)需要注意:
在安卓平台下,std和C标准库的文件操作函数似乎不能识别这个路径,所以要使用Qt提供的类,比如
QImage、QFile、QDir等。(这也是Qt跨平台的便利之处)
(4)ios平台设置(Qt官方文档里面找到的方法)
4.代码实现
QFile file1("assets:/data/readme1.txt");
if (file1.open(QIODevice::ReadOnly | QIODevice::Text)) {
qDebug() << "file open ok" ;
QTextStream in(&file1);
QString line;
while (!in.atEnd()) {
line = in.readLine();
qDebug() << "读取文件内容:" << line;
}
}
注意:
file1.open(QIODevice::ReadOnly)只能以只读方式打开,如果以读写方式打开是会打开失败的,因为这个android的专用资源文件路径不允许写。