在 Android 上部署应用程序

本文介绍将 Qt 应用程序部署到 Android 设备所需的技术步骤。

安卓打包选项

您可以通过三种方式在 Android 上打包代码:应用程序包 (APK)、Android 应用程序捆绑包 (AAB) 或 Android 档案 (AAR)。每种都是一种特定类型的 ZIP 格式,遵循预定义的目录结构。这些格式之间的区别如下

  • APK 文件可以在设备上部署和执行。
  • AAB 用于由 Google Play 商店解释,并用于为不同的设备架构和外形生成 APK 文件。
  • AAR 从根本上不同于 APK 和 AAB 格式,因为它是一个 Android 库。您可以将其作为 Android 应用程序模块的依赖项,但不能单独运行。

安卓应用程序捆绑包

要在本地测试应用程序,APK 格式是合适的,因为它可以直接在设备上安装和运行。如果要发布到 Google Play 商店,建议使用 AAB,其布局与之类似。AAB 的额外便利之处在于,您可以在同一捆绑包中包含所有目标 ABI,而不会增加用户下载的实际软件包大小。使用 AAB 时,Google Play 商店会为发出下载请求的设备生成优化的 APK 包,并自动使用您的发布者密钥对其进行签名。有关更多信息,请参阅发布到 Google Play

有关 AAB 格式的更多信息,请参阅Android 应用程序包

无论在哪种情况下,应用程序捆绑包都是从特定的目录结构中生成的,其中包含您的项目的shared 库和您的应用程序所需的 Qt XML 依赖项。此外,还会编译并包含任何资产、资源、jar 文件或项目 Java 代码。

生成应用程序捆绑包

建议使用Qt Creator 部署 Qt for Android 应用程序。否则,也可借助 CMake 或 qmake 通过命令行进行部署。更多信息,请参阅从命令行构建 Qt for Android 项目

打包和部署过程由 CMake 或 qmake 处理,它们在引擎盖下使用androiddeployqt工具来管理构建和部署 Android 应用程序的具体细节。Qt Creator 也使用相同的工具。

使用 Android 设施扩展 Qt

默认情况下,Android 版 Qt 为 Android 应用程序的启动和运行做了大部分繁重的工作,直接从 Qt 中获取最有用的 API,或使用QJniObject 来调用不容易获取的 API。CMake 也是如此,它负责处理各种构建和部署情况。不过,在其他一些情况下,可能需要使用原生 Android 设施的全部功能,如编写 Java/kotlin 代码或使用 Android 资源管理。Qt 允许用户扩展模板集,从而实现了这一点。

Qt 使用的默认模板可在 Qt for Android 安装路径下找到,例如在~/Qt/<version>/android_<abi>/src/android/templates for Unix 下。要使用这些模板,可以让Qt Creator 将其复制到您的项目中,参见Qt Creator: Android Deploy Configuration。或者你也可以手动将它们复制到项目源的android 子目录下。然后确保在CMakeLists.txt 中定义以下属性:

set_property(TARGET target_name PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
          "${CMAKE_CURRENT_SOURCE_DIR}/android")

或在pro 文件中为 qmake 定义以下属性:

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 将从该目录创建应用程序捆绑包。

现在,让我们来看看用户在扩展默认模板后可以使用的不同部分。

AndroidManifest.xml

AndroidManifest.xml 文件提供了有关应用程序的详细元信息。这些信息可用于定制应用程序捆绑包,设备也可使用这些信息来决定启用哪些功能,例如应用程序的默认方向。此外,Google Play 商店也会用到这些信息,包括版本代码、设备支持、软件包名称等。Android Manifest 还用于定义Android 服务和自定义Android 活动

有关AndroidManifest.xml 的更多信息,请参阅Android Manifest 文件文档,以及 {Qt Creator :Android 部署配置}{编辑 Manifest 文件}。

Gradle 文件

Gradle用于构建 Android 软件包。Qt 包含两套 Gradle 相关文件:

  • Gradle wrapper(用于下载特定版本的 Gradle 本身)和构建脚本(用于调用 Gralde 构建)。这些文件随 Qt 一起附带,例如~/Qt/<version>/android_<abi>/src/3rdparty/gradle

    注意: 通常建议使用与 Qt 附带的 Gradle 版本相同的 Gradle。不过,如果你想使用不同的 Gradle 版本,可以修改 Gradle wrappergradle-wrapper.properties 并将其设置为你想使用的 Gradle 版本。

  • Gradle 配置文件build.gradle ,位于Android Templates 下。该文件是 Gradle 的必备文件,可用于自定义构建。它可以用来设置构建目标、最小 API 或添加库依赖关系。它还可以用来设置 AndroidGradle 插件,这是构建 Android 应用时 Gradle 的必备依赖项。例如
    buildscript {
        ...
        dependencies {
            classpath 'com.android.tools.build:gradle:8.6.0'
        }
    }

    更多信息,请参阅Android:构建配置文件

Java/Kotlin 代码

要包含任何 Java/Kotlin 代码,以便使用 Qt XML 未涵盖的 API 或出于其他原因,请将任何代码放在<QT_ANDROID_PACKAGE_SOURCE_DIR>/src/ 路径下。例如,您可以在 Qt 代码中调用 Java 方法。有关示例,请参阅Qt for Android Notifier 示例

资源

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.

字符串.xml

该文件可在res/values/strings.xml 下找到。该文件包含 Qt 库用于引用各种语言信息翻译的字符串。

libs.xml

该文件可在res/values/libs.xml 上找到。该文件纯粹用于管理 Qt 库的部署信息,不建议手动修改。

安卓资产

有关管理 Android 资产的更多信息,请参阅添加资源

安卓库

有关在 Qt 项目中使用第三方库的更多信息,请参阅将库包含到 Android 项目

© 2025 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.