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

ubuntu下QT搭建Android开发环境

一、前言

用QT开发android和直接使用android开发的区别

    使用Qt开发Android应用和直接使用Android开发工具(例如Android Studio)有一些区别,主要体现在开发工具、语言、界面设计和性能等方面:

开发工具:
    Qt Creator vs Android Studio: 使用Qt Creator作为集成开发环境(IDE)可以让你在一个环境中开发多个平台的应用,包括Android。而直接使用Android Studio是Google提供的专门为Android开发设计的IDE。

编程语言:
    Qt使用C++: Qt框架主要使用C++编程语言。如果你已经熟悉C++,使用Qt可能更加直观。
    Android开发使用Java或Kotlin: Android应用通常使用Java或Kotlin编写。在Android Studio中,你会使用这两种语言来编写应用逻辑。

界面设计:
    Qt使用Qt Widgets或Qt Quick: Qt提供了两种主要的界面设计方式,即Qt Widgets和Qt Quick。Qt Widgets是基于传统的窗口和控件的,而Qt Quick使用QML(Qt Meta-Object Language)语言来创建现代化的用户界面。
    Android使用XML布局: 在Android开发中,你通常使用XML文件来定义应用的布局和界面。
性能和原生特性:
    Qt提供跨平台性: Qt的设计目标之一是实现跨平台性,因此你可以在不同的平台上运行相同的代码。这可能导致在一些情况下性能上的一些折衷,因为Qt需要在不同平台上提供一致的体验。
    Android开发可以更加直接使用原生API: 直接使用Android开发工具可以更直接地访问Android的原生API,这可能在某些情况下提供更好的性能和更深层次的集成。

生态系统:
    Qt是一个跨平台框架: Qt可以让你更容易地在不同平台上共享代码,但有时可能需要处理特定平台的差异。
    Android Studio是Android生态系统的一部分: 直接使用Android Studio使你更深度地融入了Android生态系统,可以更轻松地利用Android的特定功能和服务。

二、Ubuntu 下 搭建QT开发Android 环境

2.1 下载

2.1.1 下载QT:

所有QT版本下载的路径:https://download.qt.io/archive/qt/
我下载的是5.12.3版本:https://download.qt.io/archive/qt/5.12/5.12.3/

在这里插入图片描述

2.1.2 JDK、SDK、NDK的下载

Android开发必备的工具链包括:Java JDK 、Android SDK 、Android NDK

1) JDK下载:

https://www.oracle.com/java/technologies/downloads/#java8
在这里插入图片描述

2) SDK下载:

https://www.androiddevtools.cn/

在这里插入图片描述

3) NDK下载:

https://dl.google.com/android/repository/android-ndk-r19c-linux-x86_64.zip

2.2 安装

2.2.1 QT安装

执行:./qt-opensource-linux-x64-5.12.3.run
根据提示一步步安装即可。

2.2.2 JDK
  1. 在第一步下载后,在ubuntu终端使用命令解压:tar -xzvf jdk-8u391-linux-x64.tar.gz

  2. 配置环境变量:
    可以配置临时环境变量或者永久环境变量
    临时环境变量配置方法:
    cd ~
    vim ~/.bashrc

添加:
export JAVA_HOME=/home/yibin/Android/jdk1.8.0_391
export JRE_HOME= J A V A H O M E / j r e e x p o r t C L A S S P A T H = . : {JAVA_HOME}/jre export CLASSPATH=.: JAVAHOME/jreexportCLASSPATH=.:{JAVA_HOME}/lib: J R E H O M E / l i b e x p o r t P A T H = {JRE_HOME}/lib export PATH= JREHOME/libexportPATH={JAVA_HOME}/bin:$PATH

在这里插入图片描述

永久环境变量配置方法:
在.bashrc文件中配置的环境变量只在当前终端窗口中生效,如果想让其永久保存,需要将其添加到/etc/profile或/etc/environment文件中。

2.2.2 NDK

在第一步下载后,在ubuntu终端使用命令解压:unzip android-ndk-r19c-linux-x86_64.zip

2.2.3 SDK

注意 SDK的安装需要比较大的内存,如果虚拟机ubuntu设置的内存不够大,需要进行扩容,同事使用gparted重新分配内存。

  1. 在第一步下载后,在ubuntu终端使用命令解压:tar -xzvf android-sdk_r24.4.1-linux.tgz

  2. 解压后cd到tools目录,执行./android

在这里插入图片描述

  1. 选择库安装
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

这里,有个Google USB Driver 不兼容linux,这个USB驱动是用于USB连接安卓真机调试用,可以采用以下方法解决:

解决 Google USB 驱动不兼容 Linux 的问题:
安装 adb 和 fastboot 工具
确保已经安装了 adb 和 fastboot 工具。这些工具允许你与 Android 设备进行通信和调试。
bash
sudo apt-get update
sudo apt-get install adb fastboot

配置 udev 规则
打开终端并输入以下命令来创建一个新的 udev 规则文件。
bash
sudo nano /etc/udev/rules.d/51-android.rules

在打开的文件中添加规则,规则内容类似如下:
SUBSYSTEM==“usb”, ATTR{idVendor}==“YOUR_DEVICE_VENDOR_ID”, MODE=“0666”

在这里,将 YOUR_DEVICE_VENDOR_ID 替换为你 Android 设备的厂商 ID。你可以在设备连接后运行 lsusb 命令来查找此 ID。
保存文件并关闭编辑器。
重新加载 udev 规则。
bash
sudo udevadm control --reload-rules

重新插拔 Android 设备,并尝试使用 adb devices 命令查看是否识别到设备。
使用 adb 进行调试
现在,你应该能够使用 adb 命令在 Linux 上调试 Android 设备了。
bash
adb devices

这将显示已连接的 Android 设备列表。如果你的设备被正确识别并显示在列表中,那么 Google USB 驱动的问题应该已经解决了。

2.2.4 AVD(虚拟设备)的创建

1) 列出当前支持的Android API版本 命令:./android list targets
在这里插入图片描述
2)创建AVD
命令:./android create avd -n myavd -t 1 -b default/arm64-v8a

-n 后是avd的名称
-t 后是选择target ID ,这个target ID就是./android listtargets列出后的ID,选择合适的一个
-b 后是配置具体的ABI

3)查看创建后的结果
在这里插入图片描述

2.3 QT创建项目

2.3.1 启动qtcreator

切换到root用户,用root用户启动qtcreator,这个是为了解决非管理员用户检测不到avd问题

2.3.2 配置QT

在Tools-》Device-》Android 配置JDK、SDK、NDK 的安装路径,AVD Manager中添加AVD,如下图:
在这里插入图片描述
2.3.3 创建QT工程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一步步next后创建好工程:
在这里插入图片描述
界面简单写了个“Hello Android”:
在这里插入图片描述
点击Projects-》Build 选择 Android build SDK:
在这里插入图片描述
这里我选择android-24

回到工程,qmake后进行构建工程:

问题1:cannot find -lGL
collect2: error: ld returned 1 exit status

解决办法:
打开命令行终端,切换到超级用户,输入以下命令,安装libgl1软件包:
sudo apt-get install libgl1-mesa-dev

问题2:
一直卡在Downloading https://services.gradle.org/distributions/gradle-4.6-bin.zip

解决办法:
通过浏览器下载后放到/root/.gradle/wrapper/dists/gradle-4.6-bin/4jp4stjndanmxuerzfseyb6wo/gradle-4.6-bin.zip ,如果没有该目录,通过命令手动创建
或者多构建几次也能偶尔能成功

构建成功后,点击执行程序,在弹出框中选择AVD(虚拟设备)后,等待AVD执行过程(等待时间有点长):
在这里插入图片描述
最终执行成功:
在这里插入图片描述
参考:https://download.csdn.net/blog/column/11400392/117256660

另外windows下QT搭建Android环境可以参考以下:
https://zhuanlan.zhihu.com/p/512077909?utm_id=0
https://blog.csdn.net/future_ai/article/details/85616180

相关文章:

ubuntu下QT搭建Android开发环境

一、前言 用QT开发android和直接使用android开发的区别 使用Qt开发Android应用和直接使用Android开发工具(例如Android Studio)有一些区别,主要体现在开发工具、语言、界面设计和性能等方面: 开发工具: Qt Creat…...

QT 做一个登录,注册的跳转页面

思路: 1.登录需要判断账号与密码是否想等,相等才可跳转新页面,匹配失败输入框提示”账号密码不匹配”。 2.注册不需要判断,直接跳转新页面即可。 widget.cpp文件 #include "widget.h" #include "ui_widget.h&qu…...

数据库第十第十一章 恢复和并发简答题

数据库第一章 概论简答题 数据库第二章 关系数据库简答题 数据库第三章 SQL简答题 数据库第四第五章 安全性和完整性简答题 数据库第七章 数据库设计简答题 数据库第九章 查询处理和优化简答题 1.什么是数据库中的事务?它有哪些特性?这些特性的含义是什么…...

Vue3:利用vueusejs键盘绑定

VueUse 键盘事件名 onKeyDown - 别名 onKeyStroke(key, handler, {eventName: ‘keydown’})onKeyPressed - 别名onKeyStroke(key, handler, {eventName: ‘keypress’})onKeyUp - 别名 onKeyStroke(key, handler, {eventName: ‘keyup’}) // 绑定回车事件// https://develo…...

Python与设计模式--设计原则

23种计模式之 前言 (5)单例模式、工厂模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式、(7)代理模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式、(11)策略模式、责任链模式、命令模式、中介者模…...

Spire.Office 8.11.2 for NET fix Crack

内容摘自来自互联网------或者SDK官方本身手册 Spire.Doc for .NET A professional Word .NET library designed to create, read, write, convert and print Word document files in any .NET ( C#, VB.NET, ASP.NET, .NET Core, Xamarin ) application with fast and high qu…...

ubuntu终端代理配置

ubuntu浏览器的无需手动设置,主要解决在终端中的配置问题,按照下面配置后可能会ping不通一些ip,但wget/git都是可以的,具体原因以后再分析 查找端口 首先要找到自己代理对应的HTTP端口,以QV2ray软件作为示例,我为8889 手动配置 # 配置系统proxy export http_proxy=1…...

postgresql从入门到精通 - 第35讲:中间件PgBouncer部署|PostgreSQL教程

PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。 第35讲&#…...

因为jsp for循环的一个空格引起的错误

<c:forEach items"${user.role} " var"role"> <c:forEach items"${user.role}" var"role"> 去掉空格正确显示 &#xff0c;为此排查了2个小时代码逻辑...

文件中找TopK问题

目录 1.解题思路2.创建一个文件并在文件中写入数据3.为什么要建立小堆而不建立大堆&#xff1f;4.如何在现有的数据中建立适合的大堆&#xff1f;5.代码实现 1.解题思路 TopK问题即是在众多数据中找出前K大的值&#xff0c;则可以根据堆的性质来实现&#xff0c;但在使用堆之前…...

React 入门使用 (官方文档向 Part2)

文章目录 用 State 响应输入声明式地考虑 UI步骤 1&#xff1a;定位组件中不同的视图状态步骤 2&#xff1a;确定是什么触发了这些状态的改变步骤 3&#xff1a;通过 useState 表示内存中的 state步骤 4&#xff1a;删除任何不必要的 state 变量步骤 5&#xff1a;连接事件处理…...

vue运用之el-cascader组件

前言 el-cascader 是 Element UI 的级联选择器组件。以下是一些常见的 el-cascader 问题以及对应的案例代码。 1. 如何使用 el-cascader 创建一个级联选择器 以下是一个简单的 el-cascader 示例: <template> <el-cascader v-model="selected" :option…...

layui提示框没有渲染bug解决

bug&#xff1a;使用layui时或许是依赖导入又或是ideal和浏览器缓存问题导致前面明明正常的页面显示&#xff0c;后面出现提示框没有css样式&#xff0c;弹出框没有背景css 效果如下 解决后 解决方法 在你的代码中引入layer.js 我这是jsp页面 <script type"text/jav…...

MATLAB和S7-1200PLC水箱液位高度PID控制联合仿真(MODBUSTCP通信)

MATLAB和SMART 200PLC的联合仿真请查看下面文章链接 MATLAB Simulink和SMART PLC水箱液位高度PID控制(联合仿真)-CSDN博客文章浏览阅读606次。SMART PLC 向导PID的详细介绍请查看下面文章链接:S7-200 SMART PLC PID向导详细介绍(如何实现P、PD、PID控制器)-CSDN博客文章浏览阅…...

QT 项目中添加文件夹(分类文件)

为了更方便的整理项目的文件&#xff0c;添加文件夹把文件进行分类。 1.首先在项目文件中创建新的文件夹 2.把需要归类的文件放入新建的文件中 3.右键然后选择add..... 4.运行此程序&#xff0c;会报错因为文件路径改变了&#xff0c;需要在.pro中修改路径 注意事项 文件夹内部…...

vue3 语音播报流程

npm 安装 "speak-tts": "^2.0.8", npm install speak-tts 在vue文件中引用 import Speech from "speak-tts"; const speech ref(null);onMounted(() > {speechInit(); });//语音播报初始化 const speechInit () > {speech.value ne…...

Linux MTR(My TraceRoute)command

Internet上有许多小型网络测试工具:Ping、Traceroute、Dig、Host等。 但是&#xff0c;这些工具的功能都比较单一。今天会给大家分享一个包含ping和traceroute功能的工具&#xff1a;MTR 文章目录 什么是MTR&#xff1f;MTR可以提供哪些功能Linux MTR可用选项Linux MTR用法推荐…...

第十一章 python基础之api

Python基础、函数、模块、面向对象、网络和并发编程、数据库和缓存、 前端、django、Flask、tornado、api、git、爬虫、算法和数据结构、Linux、设计题、客观题、其他 第十一章 api 1. 什么是webservice&#xff1f; Web服务&#xff08;Web Services&#xff09;是一种通过网…...

redis运维(十六) 有序集合

一 有序集合 把握一点&#xff1a; 各种redis 命令都提供各种语言对应的API 接口,后续API是关键 ① 概念 1、sorted set --> 有序集合2、redis有序集合也是集合类型的一部分&#xff0c;所以它保留了集合中元素不能重复的特性3、但是不同的是,有序集合给每个元素多设置…...

深入理解RC4加密算法

RC4&#xff08;Rivest Cipher 4&#xff09;是一种广泛应用的加密算法&#xff0c;由Ronald L. Rivest于1987年发明。它是一种流密码&#xff08;stream cipher&#xff09;算法&#xff0c;适用于对网络通信中的数据进行加密保护。 RC4加密解密 -- 一个覆盖广泛主题工具的高…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址&#xff1a;LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂&#xff0c;正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 &#xff0c;这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器&#xff0c;右键点击 .uproject 文件&#xff0c;选择 "Generate Visual Studio project files"&#xff0c;重…...

EEG-fNIRS联合成像在跨频率耦合研究中的创新应用

摘要 神经影像技术对医学科学产生了深远的影响&#xff0c;推动了许多神经系统疾病研究的进展并改善了其诊断方法。在此背景下&#xff0c;基于神经血管耦合现象的多模态神经影像方法&#xff0c;通过融合各自优势来提供有关大脑皮层神经活动的互补信息。在这里&#xff0c;本研…...

VSCode 没有添加Windows右键菜单

关键字&#xff1a;VSCode&#xff1b;Windows右键菜单&#xff1b;注册表。 文章目录 前言一、工程环境二、配置流程1.右键文件打开2.右键文件夹打开3.右键空白处打开文件夹 三、测试总结 前言 安装 VSCode 时没有注意&#xff0c;实际使用的时候发现 VSCode 在 Windows 菜单栏…...

前端打包工具简单介绍

前端打包工具简单介绍 一、Webpack 架构与插件机制 1. Webpack 架构核心组成 Entry&#xff08;入口&#xff09; 指定应用的起点文件&#xff0c;比如 src/index.js。 Module&#xff08;模块&#xff09; Webpack 把项目当作模块图&#xff0c;模块可以是 JS、CSS、图片等…...