当前位置: 首页 > news >正文

【Qt】最详细教程,如何从零配置Qt Android安卓环境

这里写自定义目录标题

  • 安装Qt Creator & Qt
  • 安装下载&安装JDK
  • 设置Android SDK
  • Android模拟器下载
    • 创建android设备(模拟器)
  • Gradle安装
  • 问题解决
    • 无法打开安卓模拟器
    • Build失败
      • 方案一:不适用Qt自带SDK管理器(失败)
      • 方案二:利用Android Studio完善开发环境
    • Debug模式成功,Relase失败

本文写于2024年1月21日,此时笔者查到的教程,都多少有些不够顺畅,有些是不够详细,有些是已经太久远,笔者折腾了小半天才配置完成。

为了给有同样需求的小伙伴节省时间,决定把相关教程更新一下

文章内容主要包括:

  • 如何在Qt中配置安卓开发环境
  • 在墙内环境下,遇到过哪些问题,最终如何解决的
  • 无法成功打包的问题

开发环境:
在这里插入图片描述

安装Qt Creator & Qt

这一步笔者就不详细介绍了,只是强调笔者安装版本如下:
在这里插入图片描述
另外,笔者在Qt Creator 12 + Qt 6.6.0环境下也完成过配置,不过Qt版本又额外下载并使用了Qt 6.2.4
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

安装下载&安装JDK

下载并安装JDK17(笔者尝试过JDK21,印象中会出问题)
https://www.oracle.com/java/technologies/downloads/#java17

在这里插入图片描述
打开installer开始安装,记得记住安装路径:
在这里插入图片描述
现在可以在Qt Creator中配置JDK了,打开“工具”->“外部”->“配置…”
在这里插入图片描述
选择“设备”->“Android”->JDK位置,通过“浏览”按钮,将JDK位置设置为刚刚安装的JDK路径

在这里插入图片描述

设置Android SDK

Qt本身带了配置Android SDK的工具的,配置JDK位置的图中,下面一行就是Android SDK,这里的路径可以不做修改,直接点击“设置SDK”按钮,会提示“是否下载并安装安卓SDK到xxx路径”,点击是即可开始下载安卓SDK
在这里插入图片描述

之后会提示:“确实安卓SDK所必要的包,是否安装缺失包”,点击“确认”
在这里插入图片描述
跳出安卓SDK管理器后,所有的都点“是”,就开始安装了(到这里都不需要梯子)
在这里插入图片描述
安装完成后,会自动开始设置安卓OpenSSL,这里基本都会失败,而且是可选项,可以直接取消掉。
在这里插入图片描述
当然也可以去这个Github项目把代码拉下来,然后把OpenSSL二进制位置设置为项目根目录。

Android模拟器下载

安装Android后,还缺少Android模拟器。这个也可以直接在SDK管理器中安装:
在这里插入图片描述
在“工具”一栏往下拉就能找到“Android Emulator”点击安装即可:
在这里插入图片描述在这里插入图片描述
之后重启Qt Creator,应该就在“构建套件”中看到安卓套件了

在这里插入图片描述

创建android设备(模拟器)

在“设备”->“设备”中,点击“添加”按钮来添加新的设备

在这里插入图片描述
设备类型当然选择Android设备:

在这里插入图片描述
这个时候可能会提示“无法为xxx创建AVD,请先从SDK管理器标签中安装系统镜像”

这个警告的原因是模拟器的Android版本比较低,我们只安装了Android 12.0,可能与模拟器不匹配。

我们可以回到Android SDK管理器(参考模拟器安装),安装Android 10.0(Q):
在这里插入图片描述
之后再去创建设备,即可创建成功

在这里插入图片描述
在这里插入图片描述

Gradle安装

到这一步,我们可以去尝试在Qt Creator中创建Android项目了:

创建项目,选择“Application(Qt)” -> “Qt Widgets Application” -> “选择”
在这里插入图片描述
随便起一个喜欢的项目名称,然后一直点击“下一步”到构建套件(Kit)

在这里插入图片描述
选择“安卓 Qt 6.4.3 Clang x86_64”套件,然后完成创建

在这里插入图片描述
在这里插入图片描述
此时如果点击左下角“运行”,会出现如下错误:

在这里插入图片描述
这个错误是下载gradle失败造成的,相信国内安卓开发同学不是第一次遇到了。

我们直接去这个地址:https://services.gradle.org/distributions/

下载需要的gradle,从错误信息中可以看到,是"gradle-7.4.2-bin.zip"

如果像上图所示,点击过“运行”按钮,那你应该可以在“C:\Users\xxx.gradle\wrapper\dists”中找到“gradle-7.4.2-bin”目录,其中有一个一长串字符组成的文件夹。
在这里插入图片描述

我们把下载好的gradle-7.4.2-bin.zip”直接移动到这个文件夹中(不用解压)

复制完成后,再次点击运行,理论上可以正常运行

问题解决

无法打开安卓模拟器

这里如果出现无法打开模拟器的情况,可以去“启动或关闭Windows功能”
查看Windows的Hyper-V服务是否已经打开

在这里插入图片描述

Build失败

到这一步,Qt开发Android的配置已经完成了,可以成功运行起来了吗?
答案是不能:

在这里插入图片描述

各种查找解决方案,找到如下可能的解决方案:

  • 方案一:不要使用Qt自带的SDK管理器,来源
  • 方案二:问题出在墙上,需要通过android studio协助

我们分别尝试:

方案一:不适用Qt自带SDK管理器(失败)

只有一个地方似乎提到似乎是Qt自带安卓SDK管理器的问题……

本以为直接使用Qt自带的SDK管理器能方便些,结果还是有坑

那么我们尝试使用其他教程中提到的SDK Manager重新安装Android SDK吧…,下载地址:https://www.androiddevtools.cn/

利用这个SDK Manager下载Android SDK和NDK等组件,但结果还是不行,报错也还是一样

方案二:利用Android Studio完善开发环境

配置过Android Studio的朋友,看上面的报错信息估计会有些眼熟,看上去像是墙造成的连接失败。

于是笔者按照之前配置Android Studio的经验,完成Android开发环境的配置。(主要是解决gradle-8.2-bin.zip下载失败的问题,以及梯子的问题)

在这里插入图片描述

配置完成后,重启计算机,再次打开Qt,就可以顺利运行起来了。

在这里插入图片描述

Debug模式成功,Relase失败

在Debug模式下,成功 运行起来之后,改成Release模式却失败了,报错如下图:
在这里插入图片描述
看报错信息Failed to collect certificates from xxx应该是和签名有关

又去查了Qt中如何配置签名,找到了如下解决方案:

  1. 选择“项目”,找到对应套件的“构建”部分,往下拉到“构建APK”部分,展开详情,里面有证书相关
    在这里插入图片描述
  2. 点击“创建”,开始创建签名
    在这里插入图片描述
  3. 填写红框中必要信息,然后点击创建即可
    在这里插入图片描述
  4. 有了签名后再运行就可以成功了
    在这里插入图片描述

相关文章:

【Qt】最详细教程,如何从零配置Qt Android安卓环境

这里写自定义目录标题 安装Qt Creator & Qt安装下载&安装JDK设置Android SDKAndroid模拟器下载创建android设备(模拟器) Gradle安装问题解决无法打开安卓模拟器Build失败方案一:不适用Qt自带SDK管理器(失败)方…...

spring与spring boot的区别

spring与spring boot的区别 项目配置&#xff1a; Spring&#xff1a; 在Spring中&#xff0c;项目的配置通常需要在XML文件中进行&#xff0c;包括配置数据源、事务管理、AOP等。这需要开发人员手动配置很多细节。 <!-- 在Spring中使用XML配置数据源 --> <bean id…...

http网络编程——在ue5中实现文件传输功能

http网络编程在ue5中实现 需求&#xff1a;在unreal中实现下载功能&#xff0c;输入相关url网址&#xff0c;本地文件夹存入相应文件。 一、代码示例 1.Build.cs需要新增Http模块&#xff0c;样例如下。 PublicDependencyModuleNames.AddRange(new string[] { "Core&q…...

JVM之java内存区域[2](堆、方法区、直接内存)

文章目录 版权声明一 堆1.1 java堆1.2 模拟堆区的溢出1.3 arthas中堆内存相关的功能1.4 设置大小 二 方法区2.1 方法区简介2.2 补充&#xff1a;字符串常量池和运行时常量池2.3 方法区的大小设计2.4 arthas中查看方法区2.5 模拟方法区的溢出2.7 StringTable的练习题 三 神奇的i…...

k8s-kubectl常用命令

一、基础命令 1.1 get 查询集群所有资源的详细信息&#xff0c;resource包括集群节点、运行的Pod、Deployment、Service等。 1.1.1 查询Pod kubectl get po -o wid 1.1.2 查询所有NameSpace kubectl get namespace 1.1.3 查询NameSpace下Pod kubectl get po --all-namespaces…...

如何在Docker上运行Redis

环境: 1.windows系统下的Docker deckstop 1.Pull Redis镜像 2.运行Redis镜像 此时,Redis已经启动&#xff0c;我们登录IDEA查看下是否连接上了 显示连接成功&#xff0c;证明已经连接上Docker上的Redis了...

【深度学习:集中偏差】减少计算机视觉数据集中偏差的 5 种方法

【深度学习&#xff1a;集中偏差】减少计算机视觉数据集中偏差的 5 种方法 有偏差的计算机视觉数据集会导致哪些问题&#xff1f;如何减少计算机视觉数据集中偏差的示例观察并监控带注释样本的类别分布确保数据集代表模型适用的人群明确定义对象分类、标记和注释的流程为标签质…...

java数据结构与算法刷题-----LeetCode667. 优美的排列 II

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 解题思路 题目要求我们返回一个数组长度为n的数组&#xff0c;必须含有1~n…...

win10 20h2 defender添加排除项失败怎么回事 Window Defender添加不了排除项如何处理

我们都知道win10系统中是内置有Windows Defender安全防护软件的&#xff0c;会自动对电脑中的所有文件进行扫描&#xff0c;但是有用户可能某些文件不希望被扫描&#xff0c;那么我们可以添加排除项&#xff0c;可是有不少win10 20h2用户在defender添加排除项的时候却失败了&am…...

mysql生成最近24小时整点时间临时表

文章目录 生成最近24小时整点生成最近30天生成最近12个月 生成最近24小时整点 SELECT-- 每向下推1行, i比上次减去1b.*, i.*,DATE_FORMAT( DATE_SUB( NOW(), INTERVAL ( -( i : i - 1 ) ) HOUR ), %Y-%m-%d %H:00 ) AS time FROM-- 目的是生成12行数据( SELECTa FROM( SELECT…...

基于PHP反序列化练习

PHP创建一个以自己姓名命名的类&#xff0c;要求存在两个属性&#xff0c;name&#xff0c;age&#xff0c;进行序列化&#xff0c;输出序列化以后的数据。 <!-- PHP创建一个以自己姓名命名的类&#xff0c;要求存在两个属性&#xff0c;name&#xff0c;age --> <?…...

ITSS、ITIL、ISO20000:哪个更适合你?

在IT服务管理领域&#xff0c;ITSS、ITIL和ISO20000是备受关注的三大标准。它们在性质、设立组织、目的和适用对象等方面各有千秋。那么&#xff0c;如何在这三大标准中选择最适合自己的呢&#xff1f;下面&#xff0c;让我们一起揭开它们的神秘面纱&#xff01; 1️⃣ 性质&am…...

Linux配置yum源以及基本yum指令

文章目录 一、yum介绍二、什么是软件包三、配置yum源四、一键配置yum源【三步走】五、yum指令搜索软件安装软件卸载软件 六、其他yum指令更新内核更新软件更新指定软件显示所有可更新的软件清单卸载指定包并自动移除依赖包删除软件包&#xff0c;以及软件包数据和配置文件 一、…...

【AI视野·今日Robot 机器人论文速览 第七十五期】Thu, 11 Jan 2024

AI视野今日CS.Robotics 机器人学论文速览 Thu, 11 Jan 2024 Totally 16 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Analytical Model and Experimental Testing of the SoftFoot: an Adaptive Robot Foot for Walking over Obstacles and Irre…...

阿里云ECS(CentOS镜像)安装docker

目录 1.前置条件 2.连接至ECS 3.yum软件包更新 4.安装docker前置所需软件包 5.添加docker 官方的 yum 软件源 6.安装docker 7.检测是否成功 8.配置阿里云镜像加速器 1.前置条件 在看本文前保证未安装过docker,或者安装过但是清理干净 如果多次安装失败过&#xff0c;…...

服务器工作环境要求

在开展网站服务之前&#xff0c;合适的服务器工作环境是必不可少的。服务器工作环境指需要一定的软硬件条件来保障服务器可以正常地运转和提供高效率的服务。在这篇文章中&#xff0c;我们将会详细讲解服务器工作环境所需的要素。 一、硬件要求 服务器硬件方面包括了基本的电…...

大数据开发之Spark(入门)

第 1 章&#xff1a;Spark概述 1.1 什么是spark 回顾&#xff1a;hadoop主要解决&#xff0c;海量数据的存储和海量数据的分析计算。 spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。 1.2 hadoop与spark历史 hadoop的yarn框架比spark框架诞生的晚&#xff…...

【GoLang入门教程】Go语言工程结构详述

程序员裁员潮&#xff1a;技术变革下的职业危机 文章目录 程序员裁员潮&#xff1a;技术变革下的职业危机前言总结:专栏集锦强烈推荐写在最后 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网…...

FPGA之分布式RAM(2)

1) 128 X1 Single Port Distributed RAM 下图中可以看出来,通过2个LUT的组合使用可以串联实现更大深度的分布式RAM.下图中出现了F7BMUX的加入, F7BMUX可以用于LUT输出的选通. 原语调用&#xff1a; RAM128XIS#(INIT(128h00000000000000000000000000000000) // Initial conten…...

纯c实现栈和队列 数据结构大全

栈 栈是一种后进先出的数据结构&#xff0c;可以用数组来模拟实现&#xff0c;掌握必要的数据结构是非常的有必要的 一样是先打出头文件 #pragma once#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #include &…...

【行为检测】基于matlab和交互多模型IMM过滤进行自动驾驶异常行为检测【含Matlab源码 15448期】含报告

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…...

DDR的硬件拓扑与ODT匹配技术

前言 本文覆盖DDR信号时延偏差成因、DDR1~DDR5历代核心差异、全代ODT阻值/挂载总线/控制逻辑、多颗粒组网ODT启闭规则、主控有无片内ODT、末端反射影响、反射波回流泄放逻辑、DDR2地址控制线无ODT原因、DQ与CA拓扑严格区分、T型/Fly-by拓扑终端匹配方案、读写匹配不对称底层硬件…...

NotebookLM笔记导出全链路实操指南:从Chrome插件绕过限制到API直连导出(含Python脚本)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM笔记导出全链路概览 NotebookLM 是 Google 推出的基于用户上传文档构建个性化知识代理的 AI 工具&#xff0c;其核心价值在于语义理解与上下文生成&#xff0c;但原生不提供直接导出原始笔记…...

离散时间傅里叶变换(DTFT)核心原理、MATLAB/Python实现与工程应用全解析

1. 项目概述&#xff1a;从连续到离散的信号分析桥梁信号处理领域里&#xff0c;我们常常需要分析一个信号的频率成分。对于连续时间信号&#xff0c;我们有强大的工具——连续时间傅里叶变换。但现实世界中的计算机和数字系统处理的都是离散的、一串串的数字序列&#xff0c;比…...

通过curl命令直接调用Taotoken大模型API的排错指南

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过curl命令直接调用Taotoken大模型API的排错指南 对于需要在无SDK环境下进行快速测试、调试或集成的开发者而言&#xff0c;直接…...

Real-ESRGAN-GUI 终极指南:免费AI图像增强工具如何让模糊照片重获高清新生

Real-ESRGAN-GUI 终极指南&#xff1a;免费AI图像增强工具如何让模糊照片重获高清新生 【免费下载链接】Real-ESRGAN-GUI Lovely Real-ESRGAN / Real-CUGAN GUI Wrapper 项目地址: https://gitcode.com/gh_mirrors/re/Real-ESRGAN-GUI 你是否曾为模糊的老照片感到无奈&a…...

3个步骤让Windows任务栏图标居中,打造macOS般的桌面体验

3个步骤让Windows任务栏图标居中&#xff0c;打造macOS般的桌面体验 【免费下载链接】TaskbarX Center Windows taskbar icons with a variety of animations and options. 项目地址: https://gitcode.com/gh_mirrors/ta/TaskbarX 你是否厌倦了Windows任务栏图标总是靠左…...

开源虚拟世界引擎Vircadia核心架构与部署实战指南

1. 项目概述&#xff1a;一个开源虚拟世界的核心引擎如果你对构建一个属于自己的、去中心化的虚拟世界感兴趣&#xff0c;那么你很可能已经听说过或者正在寻找一个合适的底层引擎。今天要聊的这个项目&#xff0c;就是这样一个领域的重量级选手&#xff1a;vircadia/vircadia-n…...

终极指南:如何用BabelDOC彻底解决PDF翻译格式错乱问题

终极指南&#xff1a;如何用BabelDOC彻底解决PDF翻译格式错乱问题 【免费下载链接】BabelDOC Yet Another Document Translator 项目地址: https://gitcode.com/GitHub_Trending/ba/BabelDOC 还在为学术论文翻译后排版全乱而烦恼吗&#xff1f;&#x1f62b; 技术文档翻…...

从零构建团队技能仓库:结构化知识管理与VuePress实践

1. 项目概述&#xff1a;一个技能仓库的诞生与价值 最近在整理团队内部的技术资产时&#xff0c;我一直在思考一个问题&#xff1a;如何让那些散落在个人笔记、项目代码片段、会议纪要里的“隐性知识”和“最佳实践”沉淀下来&#xff0c;变成团队可复用、可传承的“显性资产”…...