Android部署配置
Android应用程序被打包成名为应用程序包(APK)或Android应用包(AAB)的ZIP文件。您可以在设备上安装并运行APK文件。您可以将AAB文件上传到Google Play商店。
Qt for Android支持armv7a、arm64-v8a、x86和x86-64的二进制文件。为了支持您的应用程序中的多个不同的ABI,构建一个包含每个ABI的二进制文件的AAB。Google Play商店使用AAB为请求下载的设备生成优化的APK包,并使用您的发布者密钥自动签名。
Qt Creator支持以下Android应用程序的部署方法
- 作为一个独立的、可分发的不良应用程序包(APK)。
- 作为一个App Bundle(AAB)用于在Google Play商店中分发。
并非所有Qt版本都支持AAB。Qt 6.3.0及以后的版本支持使用CMake构建的跨多个ABI的应用程序的多ABI构建。有关更多信息,请参阅在Android上部署应用程序。
注意:自Qt Creator 4.12以来,Ministro不再支持。
要指定应用程序包的设置,请选择 项目 > 构建 > 构建Android APK > 详细信息。
有关运行应用程序的选项的更多信息,请参阅Android运行设置。
应用程序打包
由于将应用程序作为APK包捆绑并不简单,因此Qt有androiddeployqt工具。当您使用Qt for Android工具套件部署应用程序时,Qt Creator会运行此工具来创建必要的文件,并将它们捆绑到APK中。有关更多信息,请参阅Android打包模板。
要查看androiddeployqt
工具创建的包,请选择在构建后打开包位置复选框。
指定部署设置
方法字段列出部署设置。要为项目添加部署方法,请选择添加。
要将当前部署方法更名,请选择重命名。
要从设备中移除当前部署方法,请选择移除。
Qt Creator在工具选择器中选择的Android设备上部署包。要添加设备,请选择管理。
有关指定应用程序的附加启动选项的更多信息,请参阅Android运行设置。
要从设备中移除之前安装的文件,请选择在部署前卸载现有应用。
要将预构建的APK(如第三方应用)安装到设备上,请选择安装APK文件。
指定软件包的设置
要指定androiddeployqt
工具的设置,请选择项目 > 构建与运行 > 构建 > 构建Android APK > 详细信息。
androiddeployqt
工具根据设置创建APK。有关可用选项的更多信息,请参阅androiddeployqt。
您可以在编译输出中查看androiddeployqt
工具的执行信息。要查看更多信息,请选择详细的输出复选框。
选择添加调试服务器以将调试服务器二进制文件添加到包中。
选择API级别
在Android构建平台SDK字段中,选择用于构建应用程序的API级别。通常,您应该选择可用的最高API级别。
通常,您应该使用Android SDK构建工具的最高版本构建。如果需要,请在Android构建工具版本字段中选择另一个版本。
构建AABs
要本地测试应用程序,请使用APK格式,因为Qt Creator可以在设备上安装和运行该包。若要将应用发布到Google Play商店,请选择构建Android应用包 (*.aab)复选框。
当使用CMake构建时,您可以在CMake部分中的初始配置中查看选择的ABIs。您可以设置其他ABIs作为ANDROID_ABI
键的值。
当使用Qbs或qmake构建时,您可以在构建步骤中的ABIs字段中选择ABIs。
签名Android软件包
要发布您的应用程序,必须使用由证书和相应的私钥组成的公私钥对以及由别称标识的来签名它。该键对用于验证您创建的应用程序的未来版本确实由您创建。
注意:请将密钥对保存在安全的地方,并备份数据,因为在丢失密钥对的情况下无法更新应用程序。
您可以使用Qt Creator生成密钥库和自签名证书。生成的证书具有X.509 v3数字证书的结构。它包含有关证书的版本、序列号和有效期信息,用于加密数据算法的ID,颁发证书的组织以及证书的主题(所有者)。在自签名证书的情况下,证书的颁发者和所有者是相同的。此外,证书还包括用于签署证书的算法以及证书的签名。
密码保护密钥库。此外,您还可以为每个别名指定单独的密码。
当您为Android应用程序签名时,必须从密钥库中选择具有证书和证书别名的密钥库。签名过程将别名的公钥(证书)嵌入到APK中。
创建密钥库和自签名证书
- 在密钥库字段中,选择创建以在创建密钥库和证书对话框中创建一个新的密钥库,该密钥库包含一个密钥对。
- 在密钥库分组中,输入一个密码以保护密钥库。
- 在证书分组中,指定证书的密钥大小和有效期。您可以指定用于保护密钥对的单独密码或使用密钥库密码。
- 在证书唯一识别名分组中,输入关于您自己和您的公司或组织的有关信息,以标识密钥对的颁发者和所有者。
- 选择保存。
- 在密钥库文件名对话框中,输入密钥库名称并选择一个位置。
- 在密钥库对话框中,输入密钥库密码以在密钥库中创建密钥对。
要使用密钥对签名Android包,请设置签名包分组设置的描述,请参阅指定设置。
- 在密钥库字段中,选择选择以选择现有的密钥库。
- 在证书别名字段中,从密钥库中的密钥对列表中选择一个别名。
- 选择签名包复选框以使用别名签名Android包。
添加外部库
Qt Creator可以自动检测应用程序使用的Qt库并将其添加为依赖项。如果应用程序需要外部库,请在项目 > 构建 > 构建Android APK > 附加库字段中指定它们。库将复制到应用程序的库文件夹中并在启动时加载。
要添加OpenSSL库,请在附加库组中选中包含预构建的OpenSSL库。这将向在Android OpenSSL组中的设备设置中定义的OpenSSL包含项目添加。这可以用于qmake和CMake项目。
否则,您可以手动将所需的libssl.so
和libcrypto.so
库的路径添加到附加库字段。
编辑清单文件
您可以使用配置选项来指定Android工具所需的androiddeployqt
工具的所有设置。您只需要Android清单文件来指定Android特定设置,例如应用程序图标。但是,您需要清单文件才能在Play Store中发布包。关于清单文件的信息,请参阅Qt Android清单文件配置。
如果您使用CMake作为构建系统,必须在CMakeList.txt文件中指定Android包源目录,即QT_ANDROID_PACKAGE_SOURCE_DIR
,请参考移动设备教程中的说明。
要使用Qt Creator创建AndroidManifest.xml文件并在AndroidManifest编辑器中打开它
- 选择项目 > 构建 > 构建Android APK > 创建模板。
- 检查Android包源目录中的路径。
- 如果您打算扩展Qt应用程序的Java部分,请选择将Gradle文件复制到Android目录。
- 选择完成将模板文件复制到
android
目录并打开manifest文件进行编辑。
下表总结了您可以设置选项。
选项 | 值 |
---|---|
包名 | 应用程序的有效包名。例如,org.example.myapplication 。自动生成的Java加载器与应用程序一起包装到APK中并启动应用程序。 |
版本码 | 包的内部版本号,该版本号确定一个应用程序的版本是否比另一个更新。 |
版本名称 | 用户可见的版本号。 |
最低要求的SDK | 如果您在manifest文件中手动设置,运行应用程序所需的最低API级别。 |
目标SDK | 如果您在manifest文件中手动设置,应用程序的目标API级别。 |
应用程序名称 | 应用程序的名称。 |
活动名称 | 活动名称。 |
样式提取 | Qt使用的方法来确定使用哪种UI样式。 |
屏幕方向 | 如何确定屏幕方向。 |
应用程序图标 | 根据屏幕分辨率使用的应用程序图标图片。 |
启动画面 | 根据屏幕方向和分辨率显示的启动画面图片。 |
权限 | 应用程序需要权限。 |
在选择顶部标题栏时,选择XML源选项卡以在XML格式编辑文件。
包名称
Android应用程序包通常使用层次结构模式命名,层次结构中的级别用句点(.)分隔。通常,包名以组织的顶级域名开头,后面跟组织的域名和以逆序排列的任何子域名。然后组织可以选择其包的特定名称。只要有条件,包名称应全部小写。例如,org.qtproject.example
。
关于区分包名称和无法直接用作包名称时的命名包规则,在Java语言规范的第7.7节中描述了完整约定。
有关包名称的更多信息,请参阅Android应用程序基础。
样式
Qt使用不同的方法来确定如何对Qt Widgets和Qt Quick Controls进行样式设计
- 当在项目中使用Qt Widgets或Qt Quick Controls 1时,请选择默认或完整。
注意:
此方法使用一些Android非SDK接口,自Android 9.0(API 28)起,这些接口被谷歌限制。 - 当使用Qt Quick Controls 2,但没有使用Qt Widgets或Qt Quick Controls 1时,选择最小。这比使用默认或完整选项要快。
- 当既不使用Qt Widgets,也不使用Qt Quick Controls 1或2时,选择无。
屏幕方向
您可以根据传感器读取或用户偏好指定不同的屏幕方向确定选项。下表列出了可用选项。
方向 | 描述 |
---|---|
未指定 | 系统选择方向。它使用的策略,以及因此在不同环境中做出的选择,可能因设备而异。 |
背后 | 使用位于活动堆栈中紧接其下的活动相同的方向。 |
横屏 | 横屏方向,显示宽度大于其高度。 |
竖屏 | 竖屏方向,显示高度大于其宽度。 |
反转横屏 | 与正常横屏方向相反的横屏方向。 |
反转竖屏 | 与正常竖屏方向相反的竖屏方向。 |
传感器横屏 | 横屏方向,根据设备传感器,可以是正常横屏或反转横屏。即使用户已锁定基于传感器的旋转,也会使用传感器。 |
传感器竖屏 | 竖屏方向,根据设备传感器,可以是正常竖屏或反转竖屏。即使用户已锁定基于传感器的旋转,也会使用传感器。 |
用户横屏 | 横屏方向,根据设备传感器和用户的偏好,可以是正常横屏或反转横屏。 |
用户竖屏 | 竖屏方向,根据设备传感器和用户的偏好,可以是正常竖屏或反转竖屏。 |
传感器 | 方向由设备方向传感器确定。显示的方向取决于用户如何握持设备。当用户旋转设备时,方向会改变。但是,某些设备默认情况下不会旋转到所有四个可能的方向。要允许所有四个方向,请选择完整的传感器选项。即使用户锁定了基于传感器的旋转,也会使用传感器。 |
完整传感器 | 在四个方向中的任何一个方向上,方向由设备方向传感器确定。这与传感器选项类似,但它允许任何四种可能的屏幕方向。例如,有些设备默认情况下不会使用反转竖屏或反转横屏,但此选项可以启用它们。 |
无传感器 | 不参考物理方向传感器确定方向。忽略传感器,因此显示不会根据用户如何移动设备而旋转。 |
用户 | 用户的当前首选方向。 |
完整用户 | 如果用户已锁定基于传感器的旋转,则此选项的行为与用户选项相同。否则,其行为与完整传感器选项相同,允许任何四种可能的屏幕方向。 |
锁定 | 将方向锁定在其当前旋转上,无论是什么。 |
图标
您可以为低、中、高和超高DPI显示上的应用图标和启动画面设置不同的图像。以下列表总结了通常与每个类别相关联的DPI值。
- 低密度(LDPI):~120dpi
- 中等密度(MDPI):~160dpi
- 高密度(HDPI):~240dpi
- 超高清密度(XHDPI):~320dpi
- 超超高清密度(XXHDPI):~480dpi
- 超超超高清密度(XXXHDPI):~640dpi
在应用程序图标选项卡中指定图标设置。选择分辨率的图像作为主图标。Qt Creator将调整图标大小并设置适合低、中、高和超高DPI显示的版本。或者,可以为每个分辨率分别设置图标。
启动画面
在启动画面选项卡中指定启动画面设置。根据设备方向和屏幕分辨率选择要显示的图像。
默认情况下,绘制活动会隐藏启动画面。如果要保持直到QNativeInterface::QAndroidApplication::hideSplashScreen()被调用才隐藏,请选中粘性启动画面复选框。
在图像显示模式中,选择是否将启动画面居中显示在设备屏幕上或将其缩放以填充屏幕。
在背景颜色中设置一个背景颜色。
选择最高分辨率的图像作为主图像、纵向主图像和横向主图像。
选择清除全部以重置所有设置或移除所有图像。
设置权限
从Android 6.0(API 23)开始,应用程序需要在运行时请求权限(请参阅QtAndroidPrivate::requestPermission()).对于较低的Android API级别,用户在安装应用程序时必须授予权限。然后,Android操作系统授予以应用程序访问数据和功能。
选中包含Qt模块默认权限和包含Qt模块默认功能复选框以添加Qt库所需的权限。这可以是Qt Core的android.permission.WRITE_EXTERNAL_STORAGE
或Qt Positioning的android.permission.ACCESS_BACKGROUND_LOCATION
。
要添加权限,从列表中选择它,然后单击添加。
©2024 Qt公司有限公司。本文件中的文档贡献者是各自所有者的版权所有者。本文件提供的文档是根据自由软件基金会发布的GNU自由文档许可版1.3许可的。Qt及其相关标志是芬兰和/或世界其他地区的Qt公司商标。所有其他商标都是各自所有者的财产。