Qt 5.15.1 Android开发环境搭建
Qt Android开发(一)环境搭建
开发环境:
Qt 版本:Qt 5.15.1
环境:Windows 10
参考文献:
1. Android 构建工具环境安装
JDK:首先自行安装jdk1.8并配置JAVA_HOME
环境变量
Android SDK:在 "工具 -> 选项 -> 设备 -> Android" 页面 "SDK Manager"中安装Android SDK
NDK:同上,安装NDK
注意:在 5.15.1中默认SDK和NDK版本为
{
"common": {
"sdk_tools_url": {
"linux": "https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip",
"linux_sha256": "89f308315e041c93a37a79e0627c47f21d5c5edbe5e80ea8dc0aac8a649e0e92",
"windows": "https://dl.google.com/android/repository/commandlinetools-win-6609375_latest.zip",
"windows_sha256": "40bba20275180194bebf89bb58c74d712bb93cc401f36bd2f8f32383acf9826c",
"mac": "https://dl.google.com/android/repository/commandlinetools-mac-6609375_latest.zip",
"mac_sha256": "2c3822db1c916655223e5ee8ce0fbf6b73d0b99012045c9dc8eaa6a5736c0c55"
},
"sdk_essential_packages": {
"default": ["platform-tools", "platforms;android-30", "cmdline-tools;latest"],
"linux": [],
"mac": [],
"windows": ["extras;google;usb_driver"]
}
},
"specific_qt_versions": [
{
"versions": ["default"],
"sdk_essential_packages": ["build-tools;30.0.2", "ndk;21.3.6528147"],
"ndk_path": "ndk/21.3.6528147"
},
{
"versions": ["5.12.[0-5]", "5.13.[0-1]"],
"sdk_essential_packages": ["build-tools;28.0.2", "ndk;19.2.5345600"],
"ndk_path": "ndk/19.2.5345600"
}
]
}
不知道安装那个版本时最好按照这个选择,这个配置文件在 C:\用户\AppData\Roaming\QtProject\qtcreator\android\sdk_definitions.json
OpenSSL:Android版的OpenSSL从GitHub上找一个预编译好的即可
虚拟机:简单点可以直接使用自带虚拟机,创建一个AVD,不知道选哪个就多试几个,看看有什么区别,懒得弄插上USB线,打开USB调试,直接上真机。
注意:安装Android SDK时最好选上对应的System Image,创建AVD的时候会用到。
2. 应用程序打包过程
Qt 5提供了 androiddeployqt
工具用于打包apk,当使用 Qt for Android 工具包部署应用程序时,Qt Creator 使用 androiddeployqt 工具创建必要的文件并将它们捆绑到 APK 中:
- Java 文件,作为应用程序的入口点,自动加载 Qt 并在应用程序中执行本机代码。
- AndroidManifest.xml,它提供有关应用程序的元信息。
- 其他 XML 文件,它们指定应用程序的依赖项。
- 资源文件。
- 库和 QML 文件,可以根据您选择的部署方法包含在项目中。
- 下载和使用 Gradle 所需的 Gradle 包装器。
- 下载和使用 Gradle 所需的 Gradle wrappers 。
- Java IDE 所需的 Gradle 脚本,例如 Android Studio。
仅当您使用 Gradle 构建应用程序包时,才会捆绑 Gradle wrappers 和脚本。
要查看 androiddeployqt
工具创建的包,请选中 Open package location after build
复选框(实测并不能打开包所在目录)。
3. 打包设置
3.1 ABI版本选择
这里可以选择apk包中包含的API库,默认armeabi-v7a,要支持全平台,可以选择全部打进去,但体积会比较大。
注意:在上面 sdk_definitions.json配置文件中指定的,对于 Qt 5.12.0 - 5.12.5 和 Qt 5.13.0 - 5.13.1,应使用 Android SDK 28。对于比 Qt 5.13.1 更新的版本,应使用Android SDK 29 或最新版本。
参考:
- Android开发之——包含ABI的APK打包注意事项,
- Android ABI与应用打包,
- Android apk打包那些事,
- Android Studio gardle 配置 ndk 指定 ABI: abiFilters 详解
3.2 Android SDK版本
如图,可以选择生成自己的签名证书,SDK版本。通常应该选择可用的最高 API 级别。
androiddeployqt
工具使用配置信息来创建 APK。有关可用选项的更多信息,请参阅 androiddeployqt。
您可以在 "编译输出" 窗格中查看有关 androiddeployqt
工具正在执行的操作的信息。要查看其他信息,请选中 Verbose output 复选框。
选择 Add debug server 以将调试服务器二进制文件包含到包中(不可选)。
此字段未指定支持的最低 API 级别或目标 API 级别,您可以在 Android Manifest 中指定。见 Editing Manifest Files 。
3.3 构建 AAB 包
本地测试应用,使用APK格式,因为包可以直接上传到设备上运行。要分发到 Google Play 商店,请通过选中 Build Android App Bundle (*.aab) 复选框来创建 AAB。
使用 CMake 构建时,您可以在 CMake 部分的 Initial Configuration 中查看选定的 ABI。您可以将其他 ABI 设置为 ANDROID_ABI 键的值:
如上图,使用 Qbs 或 qmake 构建时,您可以在 Build Steps 的 ABIs 字段中选择 ABI。
3.4 包签名密钥
注意:没有密钥签名只能打出debug的包,签名后才能发布release包。,参考:Qt Android: Why is a QtApp-debug.apk created for a Release build?
警告:将密钥对保存在安全的地方并备份副本,因为如果丢失密钥对,您将无法更新应用程序。
创建密钥库和自签名证书:
注意:国家代码是必填的,中国是 ZH
3.5 添加外部库
使用C++开发中免不了要用到外部库,例如openssl,ffmpeg,opencv等, 就像 windeployqt
,linuxdeployqt
一样,androiddeployqt
也不能自动打包外部库,需要手动配置,在 Projects > Build > Build Android APK > Additional Libraries 字段中指定它们。这些库被复制到应用程序的库文件夹中并在启动时加载。
要添加 OpenSSL 库,请在 Additional Libraries 组中选择 Include prebuilt OpenSSL libraries 。这将添加在 Android OpenSS
L 组的设备设置中定义的 OpenSSL 包含项目。这可用于 QMake 和 CMake 项目。
否则,您可以手动将所需 libssl.so
和 libcrypto.so
库的路径添加到 Additional Libraries
字段。