Qt配置安卓开发环境

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

经常开发Qt的人都知道Qt除了支持PC环境还支持Webassemble环境和Android环境。PC环境基本上不需要配置,安装好之后就可以直接用了,Android环境稍微麻烦一些,今天我就给需要Andriod环境的同学们写一个配置指南。

我的环境是6.8.3,建议使用Qt6的版本,我这里遇到的Qt5版本是有些问题的。


一、准备工作

Android Studio ,我觉得这个是必须的,你既然决定使用安卓了,这个IDE肯定必不可少了,而且后面需要它来安装SDK。这里我用的是2024.1,一定要用带java-17的。

二、开始配置

这里肯定是默认你已经安装好Qt环境了,包括用到的Android Kit,如果你没有安装Android Kit就按照下面的流程先安装,否则没法进行下一步。安装过的跳过第一步直接进入第二步。

1.安装对应的Android Kit

打开Qt MaintenanceTool这个是在线安装工具,是最方便的一种办法。

注:Qt5.14以后都不提供离线安装包了,后面的版本要么通过在线工具安装,要么源代码编译。

Android勾选上,点下一步等待完成。

2.配置Creator

目前安卓开发只能在Creator上操作,比入Clion是不能操作开发Android的,或者说需要很复杂的配置。

编辑->设置->SDKs

下面是我的配置环境,是配置好的Android环境,可以直接开发了。


JDK 位置:一定要选java-17,Android Studio 2024.1默认自带java-17环境的,在Android Studio安装目录下的jbr目录。

注:不同的Android Studio带的JDK版本是不一样的,我的2024.1带的是17。

Android SDK的路径:这个就是你Android Studio默认使用的SDK路径即可,Creator和Studio可以共用SDK路径,除非你不想这么做,你一定要使用独立的SDK路径就另外指定一个目录即可。这里我觉得它俩应该没有什么冲突,维持一致即可。

安卓 NDK 列表:这个先不要管,等你配置好会自动检测的,前提是你已经安装NDK了。NDK是必须安装的,因为Qt要把你写的代码编译成Android系统支持的.so

题外话:NDK是安卓专有的交叉编译工具链,它可以允许你在Windows或Linux系统上交叉编译出可以运行在手机上的程序(so),虽然都是Linux内核,但是它编译出来的so和Linux系统编译出来的so不通用!


注意:还是前面说的JDK版本必须和SDK版本匹配,否则检测不到Platform version。

三、创建Demo

如果上面全打绿勾了,说明可以开发Android程序了。像创建PC程序一样创建一个程序,最后构建套件勾选Android,这里用x86_64演示(我的虚拟机是x86_64的)。现在很多手机都是Arm64的,那就勾选Arm64的构建套件即可。

编译等待成功,这个时候你其实已经得到.apk了,这不过没有配置测试设备,还不能直接运行。

三、运行

我是虚拟机上运行的,你也可以插上真机。这个时候有两种方法调试Android程序,1、就是直接在Creator上调试,2、在Android Studio上调试,下面分别说明方法。

1、Creator

编辑->设置->设备


添加Android 设备

选择架构和版本

你需要先去SDK下载虚拟机镜像才能操作。如果你是开发Android的程序员,你肯定知道怎么操作,或者网上搜一下。

成功后你的构建套件就会出现可选项,这个时候你就能直接在Creator上运行程序了。

最后,点击左下角的运行,就会构建->编译->打开虚拟机->安装->运行一气呵成。

2、Android Studio运行

很简单,用过Studio的人都会。打开项目选择Qt项目目录即可。

build->架构文件夹->andoird开头的文件夹,别打开错了。

下面的Android程序员都知道了:

gradle构建->编译->run

四、存在的问题

1、有些操作画面撕裂,比如下面的

这里真的要说两句,首先暂时不知道产生的原因,真机也有问题。堂堂大公司,居然做成这个样子,很多组件我都试过,各式各样的渲染问题,我感觉这不是一个普通程序员能解决的。

2、https证书问题

这个真该好好吐槽下,反正你直接把http改成https大概率是行不通的,需要切换backend。

3、等等

这个需要大家一起去探索了,无论如何至少看到东西了。


总结

1、我感觉Android的问题可能比Webassemble还大,主要是渲染撕裂一类的,其它https有办法解决。

相关推荐
yaoxin5211233 小时前
434. Java 日期时间 API - Period 基于日期的时间段
java·开发语言·python
凡人叶枫3 小时前
Effective C++ 条款30:透彻了解 inlining 的里里外外
linux·开发语言·c++·嵌入式开发·effective c++
学逆向的4 小时前
C++纯虚函数
开发语言·c++·网络安全
程序员二叉4 小时前
【JUC】ThreadLocal底层原理|内存泄漏|弱引用|跨线程传递方案
java·开发语言·面试·职场和发展·juc
程序员二叉4 小时前
【JUC】线程池全套深度详解|参数|流程|拒绝策略|调优|异常处理
java·开发语言·jvm·算法·面试·juc
凡人叶枫5 小时前
Effective C++ 条款22:将成员变量声明为 private
linux·开发语言·c++
Qt程序员5 小时前
掌握 Linux 内核调度:从原理到实现(进程篇)
java·开发语言
code bean5 小时前
【LangChain】检索器完全指南:从向量检索到生产级 RAG 架构
java·开发语言·微服务
LabVIEW开发5 小时前
LabVIEW + MATLAB 混合编程:爆炸场测试数据精准采集方案
开发语言·matlab·labview
嵌入式协会20240725 小时前
(已解决)MinIO python 获取预签名出现forbidden、errornetwork等错误
java·开发语言·python