前言
多年前刚学qt的时候,曾经配置过它的安卓开发,实现了一个简易的计算器。印象中安卓配置还蛮复杂的,当时好像还运行了个虚拟机的玩意儿,对电脑的配置要求蛮高的。
最近想重拾一下qt安卓,算补充一下技术栈吧。现在已经转到qt6进行开发了,版本是6.10,应该算是最新的最高版本之一了。
配置环境的时候,主要参考的是这篇博文,写得挺好的。
Qt6.8安卓Android开发环境配置
配置的时候建议参考这篇文章。以下我所说的,更多是针对我当前版本,还有自己的一个记录而已。
一、Qt Mantenance Tool安装Android模块
现在的Qt都是用安装工具直接安装所需模块了。我们事后可以打开相应的维护管理工具,检查是否安装了对应版本的安卓模块。

二、安装JDK17.exe
按照教程,我也按照了JDK17的版本。但这玩意儿需要登录Oracle账号,我不知为啥账号密码错误,搞了大半天才给我下下来,气死我了。
Java Downloads | Oracle
我直接选了默认安装路径,应该没问题。
三、配置安卓组件
我这个qt版本下,安卓配置归类到了SDKs页中,这一点和参考博文里不一样,我当时还找了半天,傻傻以为是qt的安卓组件没有安装完全。
找到安卓配置页后,点击设置SDK,等待自动下载,完成后观察是否出现"安卓配置完成"。
还没完,需要点击下载OpenSSL。但很不幸,我是下载失败的,不过它提示给我手动下载的方式了。
我把文件拉取下来之后,把zip丢到了对应的目录(看图),然后再重新点击下载,它就给我自动解压安装,最后也是顺利配置好OpenSSL了。

四、添加真实环境,手机运行程序
原本我是以为可以在仿真虚拟设备上跑的,按照我的理解想要新建一个虚拟的安卓设备,但把程序编译好后,又没办法把AVD跑起来。于是还是聚焦在手机上跑好了。

首先,我们先准备好安卓手机。我现在的手机是小米17pro max。
先开启开发者模式,然后打开usb调试。我其实也不是很懂,建议在设置页输入"usb",然后将一些疑似有关联的选项都开启一下。
然后,我们用usb线连接电脑。我这边的正常反应是需要在手机确定授权电脑,然后在电脑文件管理器中可以找到手机的存储入口,可以点击进去直接增删手机文件。这一点我记得多年前就已经是这样的了。
最后,我们重新打开qt,在设备页中成功找到了真实设备。

可以看到cp架构是arm64-v8a,记住这个东西,选择工程构建方式的时候记得选这个,不然可能会有问题。
*遇到的坑:
我一开始没有连接真实环境,心想着就算虚拟环境跑不起来,我的apk文件不是生成了吗?
于是我想当然地打开了微信电脑端,把apk文件发送到手机端,然后进行安装。
最后的结果就是,要不安装不成功,要不程序打开直接闪退了。估计是对应的安卓架构不对。
五、最简单的安卓程序
新建一个测试工程,简单在qml中添加了几个组件,实现一个点击计数器。
cpp
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
Window {
property int num: 0
width: 640
height: 480
visible: true
title: qsTr("Hello World")
ColumnLayout{
anchors.centerIn: parent
Text {
color: "blue"
font.pixelSize: 36
text: qsTr("点击计数器")
Layout.preferredWidth: 200
horizontalAlignment: Text.AlignHCenter
}
Item {
Layout.preferredHeight: 50
}
Text {
id: name
color: "red"
font.pixelSize: 36
text: num.toString()
Layout.preferredWidth: 200
horizontalAlignment: Text.AlignHCenter
}
Item {
Layout.preferredHeight: 50
}
Button{
text: "点它!"
font.pixelSize: 20
Layout.preferredWidth: 200
Layout.preferredHeight: 80
onClicked: {
num++;
cameraId.start()
}
}
}
}
然后,选择对应的构建工具,选择"部署到安卓设备"。

直接点击运行。

qt端也会有打印调试信息:

六、总结
Qt的安卓环境配置就是这样,比我想象中的简单不少。
接下来就可以实现一些自己想要的功能了。
然而这似乎还远远不够,因为当我想要简单实现一下像Windows端的摄像头打开时,发现似乎没那么顺利。在我用ai辅助多次修改代码后,才终于成功实现了手机的摄像头画面打开。
以此也暴露了一个问题,在安卓设备中,想要调用外设需要动态申请权限,这部分内容还需要了解和学习才行。由于对安卓的文件管理系统不熟悉,感觉对于图片保存、数据库文件等的操作也会不一样,打算后续尝试一下。
当然,对于纯界面的东西,接着继续开发就好了。