安卓部署配置

Android 应用程序打包为 ZIP 文件,称为应用程序包 (APK)、Android 应用程序捆绑包 (AAB) 或 Android 档案 (AAR)。您可以在设备上安装和运行 APK 文件。您可以将 AAB 文件上传到 Google Play 商店。

Qt for Android有适用于 armv7a、arm64-v8a、x86 和 x86-64 的二进制文件。要在应用程序中支持多个不同的 ABI,请构建一个 AAB,其中包含每个 ABI 的二进制文件。Google Play 商店会使用 AAB 为请求下载的设备生成优化的 APK 包,并自动使用您的发布者密钥对其进行签名。

Qt Creator Android 应用程序支持以下部署方法:

  • 作为独立的、可分发的应用程序包 (APK)。
  • 作为应用程序捆绑包 (AAB) 在 Google Play 商店发布。
  • AAR 从根本上不同于 APK 和 AAB 格式,它是一个 Android 库。您可以将其作为 Android 应用程序模块的依赖项,但不能单独运行。

    所有 Qt 版本都不支持 AAB。当使用 CMake 构建应用程序时,Qt 6.3.0 及更高版本支持多abi 构建。从 Qt 6.8.0 开始支持 AAR。有关详细信息,请参阅在 Android 上部署应用程序

注: Qt Creator 4.12 起,不支持 Ministro。

指定应用程序软件包的设置,请选择Projects >Build >Build Android APK >Details

有关运行应用程序选项的更多信息,请参阅Android 运行设置

打包应用程序

将应用程序捆绑为 APK 包并非易事,因此 Qt 提供了androiddeployqt工具。当您使用Qt for Android 套件部署应用程序时,Qt Creator 运行该工具来创建必要的文件并将它们捆绑成 APK。更多信息,请参阅Android 包模板

要查看androiddeployqt 工具创建的包,请选择Open package location after build 复选框。

指定部署设置

Method 字段列出了部署设置。要为项目添加部署方法,请选择Add

部署设置

要重命名当前部署方法,请选择Rename

要删除当前部署方法,请选择Remove

Qt Creator套件选择器中选择的 Android 设备上部署软件包。要添加设备,请选择 。Manage

有关为应用程序指定其他启动选项的更多信息,请参阅Android 运行设置

要从设备上删除先前安装的文件,请选择Uninstall the existing app before deployment

要将预置 APK(如第三方应用程序)安装到设备,请选择Install an APK File

为软件包指定设置

要指定androiddeployqt 工具的设置,请选择Projects >Build & Run >Build >Build Android APK >Details

构建 Android APK 步骤

androiddeployqt 工具会根据设置创建 APK。有关可用选项的更多信息,请参阅androiddeployqt

您可以在"编译输出"(Compile Output)中查看有关androiddeployqt 工具正在执行的操作的信息。要查看更多信息,请选择Verbose output 复选框。

选择Add debug server ,将调试服务器二进制文件包含到软件包中。

选择 API 级别

Android build platform SDK 字段中,选择用于构建应用程序的API 级别。通常,应选择可用的最高 API 级别。

通常情况下,应使用最高版本的 Android SDK 构建工具进行构建。如有必要,请在Android build-tools version 字段中选择其他版本。

构建 AAB

要在本地测试应用程序,请使用 APK 格式,因为Qt Creator 可以在设备上安装和运行软件包。如果要发布到 Google Play 商店,请选择Build Android App Bundle (*.aab) 复选框创建 AAB。

使用 CMake 构建时,可在Initial Configuration 中的CMake 部分查看所选的 ABI。您可以将其他 ABI 设置为ANDROID_ABI 关键字的值:

用于构建 AAB 的 CMake 设置

使用 Qbs 或 qmake 构建时,可在Build Steps 中的ABIs 字段选择 ABI:

用于构建 AAB 的 qmake 设置

构建 AAR

Build Steps 部分选择 AAR 目标。

选择 AAR 目标

签署 Android 软件包

要发布应用程序,必须使用由证书和相应私钥组成并以别名标识的公私 密钥 对对应用程序进行签名。密钥对用于验证应用程序的未来版本确实是由您创建的。

警告 请将密钥对保存在安全的地方,并备份副本,因为如果丢失了密钥对,就无法更新应用程序。

您可以使用Qt Creator 生成密钥存储和自签名证书。生成的证书具有 X.509 v3 数字证书的结构。它包含证书的版本、序列号和有效期、用于加密数据的算法 ID、颁发证书的机构以及证书的主体(所有者)等信息。如果是自签证书,证书的签发者和所有者是相同的。此外,证书还包含用于签署证书的算法以及证书签名的信息。

密码保护密钥存储。此外,你还可以用密码保护每个别名。

签署 Android 应用程序时,必须选择有证书的密钥库,并从密钥库中选择证书别名。签名过程会将别名的公钥(证书)嵌入 APK。

创建密钥库和自签名证书:

  1. Keystore 字段中,选择Create ,以创建一个新的密钥库,该密钥库在Create a Keystore and a Certificate 对话框中有一个密钥对:

    创建密钥库和证书对话框

  2. Keystore 组中,输入密码以保护密钥存储。
  3. Certificate 组中,指定证书的密钥大小和有效期。可以指定单独的密码来保护密钥对,也可以使用密钥存储密码。
  4. Certificate Distinguished Names 组中,输入有关你本人和你的公司或组织的信息,以确定密钥对的签发人和所有者。
  5. 选择Save
  6. Keystore File Name 对话框中,输入密钥存储的名称并选择位置。
  7. Keystore 对话框中,输入密钥库密码,以便在密钥库中创建配对密钥。

要使用配对密钥签署 Android 软件包,请设置Sign package 组设置,详情请参阅为软件包指定设置

  1. Keystore 字段中,选择Choose 以选择现有密钥库。
  2. Certificate alias 字段中,从密钥库的密钥对列表中选择一个别名。
  3. 选择Sign package 复选框,使用别名签署 Android 软件包。

添加外部库

Qt Creator 自动检测应用程序使用的 Qt 库,并将它们添加为依赖库。如果应用程序需要外部库,请在 > > > 字段中指定它们。这些库会复制到应用程序的库文件夹中,并在启动时加载。Projects Build Build Android APK Additional Libraries

要添加 OpenSSL 库,请在Additional Libraries 组中选择Include prebuilt OpenSSL libraries 。这将在Android OpenSSL 组中添加设备设置中定义的 OpenSSL include 项目。这可用于 qmake 和 CMake 项目。

否则,可在Additional Libraries 字段中手动添加所需libssl.solibcrypto.so 库的路径。

编辑清单文件

你可以使用配置选项来指定androiddeployqt 工具所需的所有设置。您只需要一个 Android 清单文件来指定特定于 Android 的设置,如应用程序图标。不过,您需要清单文件才能在 Play Store 发布软件包。有关清单文件的更多信息,请参阅Qt for Android 清单文件配置

如果使用 CMake 作为构建系统,则必须按照移动设备教程中的说明,在 CMakeList.txt 文件中指定 Android 软件包源代码目录QT_ANDROID_PACKAGE_SOURCE_DIR

要使用Qt Creator 创建 Android 清单文件并在 Android 清单编辑器中打开该文件,请执行以下操作

  1. 选择Projects >Build >Build Android APK >Create Templates
  2. 检查Android package source directory 中的路径。

    创建模板对话框

  3. 如果计划扩展 Qt XML 应用程序的 Java 部分,请选择Copy the Gradle files to Android directory
  4. 选择Finish 可将模板文件复制到android 目录,并打开清单文件进行编辑。

    Android Manifest Editor 中的软件包信息

下表总结了您可以设置的选项。

选项
Package name应用程序的有效软件包名称。例如,org.example.myapplication 。与应用程序打包成 APK 的自动生成的 Java 启动器可启动应用程序。
Version code软件包的内部版本号,用于确定应用程序的一个版本是否比另一个版本更新。
Version name用户可见的版本号。
Minimum required SDK运行应用程序所需的最低 API 级别(如果在清单文件中手动设置)。
Target SDK应用程序的目标 API 级别(如果在清单文件中手动设置)。
Application name应用程序名称。
Activity name活动名称。
Style extractionQt 用于确定使用哪种UI 风格的方法。
Screen orientation如何确定屏幕方向
Application icon根据屏幕分辨率用作应用程序图标的图像。
Splash screen根据屏幕方向和分辨率作为闪屏显示的图片。
Permissions应用程序所需的权限

在顶部标题中,选择XML Source 选项卡,以 XML 格式编辑文件。

软件包名称

Android 应用程序包通常使用分层模式命名,层级之间用句号(.)分隔。一般来说,软件包名称以组织的顶级域名开头,然后是组织的域名和以相反顺序列出的任何子域名。然后,组织可为其软件包选择一个特定名称。软件包名称应尽可能使用小写字母。例如,org.qtproject.example

Java 语言规范》第 7.7 节介绍了消除包名称歧义的完整约定,以及当 Internet 域名不能直接用作包名称时的包命名规则。

有关包名称的更多信息,请参阅《Android 应用程序基础》

样式

Qt XML 使用不同的方法来确定Qt WidgetsQt Quick Controls 的样式:

  • 在项目中使用Qt WidgetsQt Quick 控件 1 时,选择DefaultFull

    注意: 该方法使用了一些 Android 非 SDK 接口,这些接口从 Android 9.0(API 28)开始受到 Google 的限制。

  • 当使用Qt Quick Controls 2 但没有Qt WidgetsQt Quick Controls 1 时,请选择Minimal 。这比使用默认或完整选项更快。
  • 当既不使用Qt Widgets 也不使用Qt Quick Controls 1 或 2 时,请选择None

屏幕方向

您可以根据传感器读数或用户偏好指定不同的选项来确定屏幕方向。下表列出了可用选项。

方向说明
未指定由系统选择方向。系统使用的策略以及在特定情况下做出的选择可能因设备而异。
后面使用与活动堆栈中紧随其后的活动相同的方向。
横向横向,即显示宽度大于高度。
纵向纵向,即显示高度大于宽度。
反向横向与正常横屏方向相反的横屏方向。
反向纵向与正常纵向方向相反的纵向方向。
传感器横向横向方向,但可根据设备传感器选择正常横向或反向横向。即使用户锁定了基于传感器的旋转,也会使用传感器。
传感器纵向纵向,但根据设备传感器,可以是正常纵向或反向纵向。即使用户锁定了基于传感器的旋转,也会使用传感器。
用户横向横向,但根据设备传感器和用户的偏好,可以是正常横向或反向横向。
用户纵向纵向,但根据设备传感器和用户的偏好,可以是正常纵向或反向纵向。
传感器方向由设备方向传感器决定。显示屏的方向取决于用户握持设备的方式。当用户旋转设备时,显示方向会发生变化。但有些设备默认情况下不会旋转到所有四个可能的方向。要允许所有四个方向,请选择全传感器选项。即使用户锁定了基于传感器的旋转,也会使用传感器。
全传感器方向由设备方向传感器确定四个方向中的任何一个。这与传感器选项类似,只是它允许四个可能的屏幕方向中的任何一个,而不管设备通常会做什么。例如,有些设备通常不会使用反向纵向或反向横向,但该选项却允许使用。
无传感器确定方向时不参考物理方向传感器。传感器会被忽略,因此显示屏不会根据用户移动设备的方式进行旋转。
用户用户当前首选的方向。
完全用户如果用户锁定了基于传感器的旋转,则该选项的行为与用户选项相同。否则,其行为与全传感器选项相同,并允许四种可能的屏幕方向中的任何一种。
锁定将方向锁定为当前旋转,无论旋转方向如何。

图标

在低、中、高和超高 DPI 显示器上,您可以设置不同的图像作为应用程序图标和闪屏显示。以下列表总结了与每个类别相关的 DPI 值:

  • 低密度 (LDPI):~120dpi
  • 中密度 (MDPI):~160dpi
  • 高密度 (HDPI):~240dpi
  • 超高密度 (XHDPI):~320dpi
  • 超高密度 (XXHDPI):~480dpi
  • 超高密度 (XXXHDPI): ~640dpi~640dpi

Application icon 选项卡中指定图标设置。选择分辨率最高的图像作为Master iconQt Creator 根据需要调整图标大小并设置在低、中、高和超高 DPI 显示器上显示的版本。或者,为每种分辨率分别设置图标。

Android Manifest 编辑器中的应用程序图标

闪屏

Splash screen 选项卡中指定闪屏的设置。根据设备方向和屏幕分辨率选择要显示为闪屏的图像。

Android Manifest 编辑器中的闪屏

默认情况下,绘制活动会隐藏闪屏。要在调用QNativeInterface::QAndroidApplication::hideSplashScreen()之前保持闪屏可见,请选择Sticky splash screen 复选框。

Image show mode 中,选择是将闪屏居中显示在设备显示屏上,还是将其缩放以填满显示屏。

Background color 中设置背景颜色。

选择分辨率最高的图像作为Master imagePortrait master imageLandscape master image

选择Clear All 重置所有设置或删除所有图像。

设置权限

从 Android 6.0(API 23)开始,应用程序必须在运行时请求权限(请参阅QtAndroidPrivate::requestPermission() )。对于较低级别的 Android API,用户必须在安装应用程序时授予权限。然后,Android 操作系统会授予应用程序访问相应数据和功能的权限。

Android Manifest 编辑器中的权限

选择Include default permissions for Qt modulesInclude default features for Qt modules 复选框可添加 Qt XML 库所需的权限,如android.permission.ACCESS_BACKGROUND_LOCATION 用于 Qt Positioning.

要添加权限,请从列表中选择该权限,然后选择Add

另请参阅 "如何:构建和运行"、"如何:为 Android 开发"、"Android 运行设置 "和 "工具包"。

Copyright © The Qt Company Ltd. and other contributors. 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.