在Android上部署应用程序

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

Android应用程序包

Android上的应用程序可以通过两种方式打包;要么作为应用程序包(APK),要么作为Android应用程序包(AAB)。它们都是遵循预定义目录结构的ZIP文件。两者的区别在于,APK文件可以在设备上部署和执行,而AAB旨在由Google Play商店解释,并用于为不同设备和形式生成APK文件。

对于本地测试应用程序,APK格式是合适的,因为这可以在设备上直接安装和运行。对于分发到Google Play商店,建议使用AAB,其布局类似。AAB带来的便利性在于,您可以在同一个包中包含所有目标ABIs,而不会增加用户实际下载的包的大小。使用AAB时,Google Play商店为请求下载的设备生成优化后的APK包,并自动使用您的发行者密钥签署它们。更多信息,请参阅在Google Play上发布

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

在任一情况下,应用程序包都是由包含项目共享库和应用程序所需的Qt依赖项的特定目录结构生成的。此外,任何资产、资源、jar文件或项目Java代码都会被编译并包含在内。

生成应用程序包

建议使用Qt Creator来部署Qt Android应用程序。否则,可以通过命令行使用CMake或qmake完成相同的工作。更多信息,请参阅从命令行构建Qt Android项目

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

通过Android功能扩展Qt

默认情况下,Qt for Android负责大多数繁重的工作,以使Android应用能够快速启动运行,它提供了最实用的API,可以直接从Qt中获取,或者使用QJniObject来调用不太容易得到的API。CMake也是如此,它处理各种构建和部署情况。然而,在某些其他情况下,可能需要发挥原生Android设施的强大功能,如编写Java/kotlin代码或使用Android资源管理。Qt允许用户通过允许扩展模板集合来实现这一点。

Qt使用的默认模板可以在Qt for Android的安装路径下找到,例如,对于Unix,在~/Qt/<version>/android_<abi>/src/android/templates下。要使用这些模板,Qt Creator可以将它们复制到您的项目中,参见Qt Creator:Editing Manifest Files。或者,您可以手动将它们复制到项目的源代码下的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 Services和自定义Android Activities

有关AndroidManifest.xml的更多信息,请参阅Android Manifest文件文档,以及Qt Creator的Qt Creator:Editing Manifest Files页面。

Gradle文件

Gradle用于构建Android包。Qt包含了两组与Gradle相关的文件:

  • Gradle封装器,用于下载Gradle的特定版本,以及用于调用Gradle构建的构建脚本。这些文件包含在Qt中,例如在~/Qt/<version>/android_<abi>/src/3rdparty/gradle下。

    注意:通常建议使用Qt附带相同的Gradle版本。但是,如果您想要使用不同的Gradle版本,可以修改Gradle封装器gradle-wrapper.properties并将其设置为要使用的Gradle版本。

  • Gradle配置文件build.gradle位于Android Templates下。该文件由Gradle要求,并可用于自定义构建。它可以用来设置构建目标或最低API,或添加库依赖项。它还可以用来设置Android Gradle插件,这是构建Android应用所需的Gradle依赖项。下面是一个例子:
    buildscript {
        ...
        dependencies {
            classpath 'com.android.tools.build:gradle:7.4.1'
        }
    }

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

Java/Kotlin 代码

为了包括任何 Java/Kotlin 代码,以针对 Qt 不支持的某些 API 或其他原因,请将任何代码放在路径 <QT_ANDROID_PACKAGE_SOURCE_DIR>/src/ 之下。例如,您可以在 Qt 代码中调用 Java 方法。例如,请参阅 Qt Android 通知器示例

资源

Android 允许添加资源文件,如图标、图像、字符串、颜色等。这些资源可以直接从 Java/Kotlin 代码或清单文件中引用。可以将此类文件添加到项目中 <QT_ANDROID_PACKAGE_SOURCE_DIR>/res/ 之下。例如,应用程序图标可以添加到 res/drawable/icon.png

获取更多信息,请参阅 Android: 应用资源概述

Qt 内部资源

默认情况下,Qt 会打包一些应用程序正常运行所需的资源。例如,在 Unix 上,这些资源位于 ~/Qt/<版本>/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 项目中添加库

© 2024 Qt 公司有限公司。本文件中包含的说明贡献是各自所有者的版权。本文件中的说明是根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款授予的。Qt 及相关标志是芬兰的 Qt 公司以及全球其他地区的商标。所有其他商标均为其各自所有者所有。