在 Android 上部署应用程序
本文介绍了将 Qt 应用程序部署到 Android 设备所需的技术步骤。
Android 打包选项
在 Android 上,您可以通过三种方式打包代码:应用包(APK)、Android 应用组合包(AAB)或 Android 归档文件(AAR)。每种格式都是遵循预定义目录结构的特定 ZIP 格式。这些格式之间的区别如下:
- APK 文件可在设备上部署和执行。
- AAB 旨在由 Google Play 商店进行解析,并用于为不同的设备架构和外形尺寸生成 APK 文件。
- AAR 与 APK 和 AAB 格式的根本区别在于,它是一种 Android 库。您可以将其用作 Android 应用模块的依赖项,但无法单独运行它。有关更多信息,请参阅《Android:Android 归档 (AAR)》。
Android 应用包
若要在本地测试应用,APK 格式更为合适,因为它可以直接安装并运行在设备上。若要分发至 Google Play 商店,则建议使用 AAB,其布局与 APK 类似。 AAB 的额外优势在于,您可以在同一个软件包中包含所有目标 ABI,而不会增加用户实际下载的包的大小。使用 AAB 时,Google Play 商店会为发出下载请求的设备生成优化的 APK 包,并使用您的发布者密钥自动对其进行签名。有关更多信息,请参阅《发布到 Google Play》。
有关 AAB 格式的更多信息,请参阅《Android 应用包》。
无论采用哪种方式,应用程序包都是基于特定的目录结构生成的,该结构包含您项目中的shared 库以及应用程序所需的Qt依赖项。此外,所有资产、资源、jar 文件或项目Java代码都会被编译并包含在内。
生成应用程序包
建议使用Qt Creator 来部署 Qt for Android 应用程序。否则,也可以借助 CMake 或 qmake 通过命令行完成相同操作。有关更多信息,请参阅《从命令行构建 Qt for Android 项目》。
打包和部署过程由 CMake 或 qmake 负责,它们在后台使用androiddeployqt工具来管理 Android 应用构建和部署的具体细节。Qt Creator 同样使用该工具。
使用 Android 功能扩展 Qt
默认情况下,Qt for Android 承担了让 Android 应用正常运行的大部分繁重工作:既可直接从 Qt 获取最实用的 API,也可通过QJniObject 调用那些无法直接获取的 API。CMake 也是如此,它负责处理各种构建和部署场景。 然而,在某些其他情况下,可能需要充分利用原生 Android 功能的全部能力,例如编写 Java/Kotlin 代码或使用 Android 资源管理。Qt 通过允许用户扩展模板集来实现这一点。
Qt XML 使用的默认模板位于 Qt for Android 的安装路径下,例如在 Unix 系统中位于~/Qt/<version>/android_<abi>/src/android/templates 目录下。要使用这些模板,可以让Qt Creator 将其复制到您的项目中,详见Qt Creator :Android Deploy Qt。 或者,您可以手动将它们复制到项目源代码中的android 子目录下。然后请确保在CMakeLists.txt 中定义以下属性:
set_property(TARGET target_name PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
"${CMAKE_CURRENT_SOURCE_DIR}/android")如果是使用 qmake,请在pro 文件中:
android: ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android注意: 使用Qt Creator时, 如果使用 CMake,该路径下的文件默认会在项目文件中显示。若要在 qmake 中实现相同的行为,请使用DISTFILES 手动将这些文件路径添加到项目中。
构建过程会将模板从您的项目中复制到构建目录<build_path>/android-build ;如果项目未设置QT_ANDROID_PACKAGE_SOURCE_DIR ,则会使用默认模板。之后,目录<build_path>/android-build 将作为打包目录。应用程序包将通过 Gradle 从该目录生成。
启用QT_ANDROID_GRADLE_MULTI_MODULE后,打包目录中将包含一个由多个模块组成的 Gradle 项目。随后,应用程序将从<build_path>/android-build/app 进行打包,而每个动态功能都会在其旁边拥有一个独立的模块。
现在,让我们来了解用户在扩展默认模板后可以操作的各个部分。
AndroidManifest.xml
AndroidManifest.xml 文件提供了有关您应用程序的详细元数据。这些信息用于自定义您的应用程序包,设备会根据这些信息决定启用哪些功能,例如应用程序的默认屏幕方向。此外,Google Play 商店还会利用这些信息来获取版本代码、设备支持、包名等诸多信息。 Android 清单文件还用于定义Android 服务和自定义Android 活动。
有关AndroidManifest.xml 的更多信息,请参阅Android Manifest 文件文档,以及 {Qt Creator: Android 部署配置}{编辑 Manifest 文件}。
Gradle 文件
Gradle用于构建 Android 软件包。Qt 包含两组与 Gradle 相关的文件:
- Gradle 封装程序(用于下载特定版本的 Gradle 本身)以及用于调用 Gradle 构建的构建脚本。这些文件随 Qt 一起提供,例如位于
~/Qt/<version>/android_<abi>/src/3rdparty/gradle。注意:通常 建议使用 Qt 随附的 Gradle 版本。但如果您希望使用其他版本的 Gradle,可以修改 Gradle 包装器
gradle-wrapper.properties,并将其设置为您想要使用的 Gradle 版本。 - 位于Android 模板下的 Gradle 配置文件
build.gradle。该文件是 Gradle 所必需的,可用于自定义构建。它可用于设置构建目标或最低 API 级别,或添加库依赖项。此外,还可用于配置Android Gradle 插件,这是构建 Android 应用所需的 Gradle 依赖项。 示例如下:buildscript { ... dependencies { classpath 'com.android.tools.build:gradle:9.2.1' } }有关更多信息,请参阅《Android:构建配置文件》。
Java/Kotlin 代码
若需包含任何 Java/Kotlin 代码以调用 Qt 未涵盖的某些 API,或出于其他原因,请将相关代码放置在路径<QT_ANDROID_PACKAGE_SOURCE_DIR>/src/ 下。例如,您可以在 Qt 代码中调用 Java 方法。具体示例请参阅《Qt for Android 通知器示例》。
资源
Android 允许添加资源文件,例如图标、图像、字符串、颜色等。这些资源可以直接从 Java/Kotlin 代码或清单文件中引用。此类文件均可添加到项目中的<QT_ANDROID_PACKAGE_SOURCE_DIR>/res/ 目录下。例如,应用图标可添加到res/drawable/icon.png 目录下。
有关更多信息,请参阅《Android:应用资源概述》。
Qt 内部资源
默认情况下,Qt 会打包一些应用正常运行所需的资源。例如,在 Unix 系统上,这些资源位于~/Qt/<version>/android_<abi>/src/android/templates/res 目录下。
strings.xml
该文件位于res/values/strings.xml 。该文件包含 Qt 库用于引用各种语言消息翻译的字符串。
libs.xml
该文件位于res/values/libs.xml 。它仅用于管理 Qt 库的部署信息,不建议手动修改。
Android 资源
有关管理 Android 资源的更多信息,请参阅“添加资源”。
Android 库
有关在 Qt 项目中使用第三方库的更多信息,请参阅《将库添加到 Android 项目》。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.