Qt 6.2 for Android

本文翻译自Qt 6.2 for Android(原文发布于9月30日)
原文作者:Assam Boudjelthia,Qt公司高级软件开发工程师

校审:Richard Lin

Qt始终致力于在每一个新版本中为Android提供更好的支持。Qt 6.2为Android带来了许多改进,包括新的API、功能更新和错误修复。这篇博文将带您了解Qt 6.2中针对Android的主要变化。

QtAndroid 命名空间

Qt 6的Qt Extras Modules中针对Qt Extras模块的更新后,Qt 5中的QtAndroid命名空间所提供的功能现在放到QNativeInterface::QAndroidApplication中。 例如,下面的代码片段可以在Android的UI主线程中修改系统菜单栏的可见性:

#include <QCoreApplication>

QNativeInterface::QAndroidApplication::runOnAndroidMainThread([]() {
   QJniObject activity = QNativeInterface::QAndroidApplication::context();
   // Hide system ui elements or go full screen
   activity.callObjectMethod("getWindow", "()Landroid/view/Window;")
           .callObjectMethod("getDecorView", "()Landroid/view/View;")
           .callMethod<void>("setSystemUiVisibility", "(I)V", 0xffffffff);
});

之前版本中的应用程序权限请求API在QtCore下经过了重构。但该API将在后续的Qt版本对除Android以外的其他平台提供支持后公开。

仍然依赖于缺失的功能或权限API的用户可加入私有头文件<QtCore/private/qandroidextras_p.h>作为临时解决方案。

Android Manifest(安卓应用配置表)

Android Manifest是所有Android应用的重要组成部分,应用中的许多细节功能都需要使用它,比如设置应用名称、图标到自定义组件和服务。在Qt 5中,manifest被用来处理Qt库和资源的部分构建和打包管理。这意味着之前的manifest文件相对较长,内容包含了众多元数据,并且可能无法区分这些元数据是仅用于系统构建还是可以被客户修改。现在,为了保持manifest文件的轻量化,文件中所有用于部署管理的属性都被隐藏,且文件将只包含用户专属的元数据。更多关于manifest的信息,请参阅Qt Android Manifest文档。


与此更改相关的是,Qt 5中的Ministro现已被移除,因为最近的Android版本已经不再支持该功能。因此,基于Qt 5的应用中的manifest文件可能需要进行修改。更多信息,请参阅6.2版之前的Qt Manifest


非Android SDK API

Android一直在限制对各种非SDK API的访问, Qt会利用其中一些API来提取本地样式信息,如字体大小、颜色和格式等。在Android 9以上的版本中使用这些API,会导致样式提取失败或弹出警告信息。这些样式信息提取功能没有使用正确的API。使用QML的应用可以正常运行,也不会弹出之前的警告信息。但是目前而言还存在一项限制,使用Widgets和Android原生样式的应用程序可能没有包含所有正确的drawables。因此,建议在移动应用程序中使用QML。更多信息,请参阅QTBUG-71590


Android SDK更新

谷歌应用商店频繁更新应用发布的API Level要求。Qt也要与这些要求保持同步,因此目前默认的目标SDK级别是30(Android 11)。用于构建Qt的构建工具和平台版本也被设置为30。

此外,Android的Gradle插件已更新至4.1.3版本,为Android 11中的<queries>提供了支持。同时,在本次更新中,使用更新版本的Gradle插件为程序包签名时出现的错误得到修复,程序包将与Gradle保持一致。

其他更改

Qt Android的一些其他改进和错误修复,包括且不限于:

  • 添加了导入QML模块的功能,且可以添加多个QML根路径。androiddeployqt可以使用以下路径来搜索QML模块:
set_property(TARGET name APPEND PROPERTY QT_QML_ROOT_PATH ${qml_path_1})
...
set_property(TARGET name APPEND PROPERTY QT_QML_ROOT_PATH ${qml_path_2})
  • 对与发布具有单一ABI的Android应用包有关的文档进行改进,详情请参阅发布至Google应用商店
  • Qt应用程序现在通过getReferrer()获取关于应用程序启动来源的信息。
  • 在Android上支持QDesktopService 事件处理器,可以与Android App Links(安卓应用链接)等协同工作。
  • 修复了Vulkan功能检测以及使用CMake构建Android项目。
  • QCDebug()及其变体现在可以正确地把类别作为一个tag对接Android logcat,而此前的tag总是会被设置为应用程序名称。

建议与反馈

我们一如既往地欢迎用户的建议与反馈! 如果有任何建议、需求或错误报告,您可以在博文下方留言或前往https://bugreports.qt.io

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值