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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/193617.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python----字典练习

相关链接:Python---字典的增、删、改、查操作_python中字典的增删改查-CSDN博客 Python---字典---dict-CSDN博客 Python---引用变量与可变、非可变类型-CSDN博客 重点: 字典中的 key (就是键)可以是很多数据类型(…

Java线程池的使用和最佳实践

第1章:引言 处理并发问题时,如果每次都新建线程,那系统的压力得有多大?这时候,线程池就像一个英雄一样出现了,它帮我们有效地管理线程,提高资源利用率,降低开销。那么,为…

代理模式介绍(静态代理、jdk动态代理、cglib代理)

一、静态代理 (一)定义 1、定义 为其他对象提供一种代理以控制对这个对象的访问; 2、涉及到的角色 (1)抽象主题角色:真实主题和代理主题的共同接口,便于在使用真实主题的地方都可以使用代理…

鸿蒙开发笔记

最近比较火,本身也是做前端的,就抽空学习了下。对前端很友好 原视频地址:黑马b站鸿蒙OS视频 下载安装跟着视频或者文档就可以了。如果你电脑上安装的有node,但是开发工具显示你没安装,不用动咱们的node,直…

红队攻防实战之Access注入

若盛世将倾,深渊在侧,我辈当万死以赴 访问漏洞url: 1.Access联合查询 判断是否有注入 and 11正常,and 12出错 判断字段数 order by 7正常 order by 8出错 爆破出表名并判断回显点为2,5 查看字段内容,将字段名填入回…

12月1号作业

实现运算符重载 #include <iostream>using namespace std; class Person{friend const Person operator-(const Person &L,const Person &R);friend bool operator<(const Person &L,const Person &R);friend Person operator-(Person &L,const …

WakaTime一个用于跟踪和分析编程时间的工具

WakaTime是一个用于跟踪和分析编程时间的工具&#xff0c;它可以集成到各种代码编辑器和集成开发环境中&#xff0c;例如Visual Studio Code、Sublime Text、PyCharm等。它可以帮助开发人员了解他们花费在不同项目和编程语言上的时间&#xff0c;以及他们的编码习惯和生产力。 …

【面试HOT200】二叉树——广度优先搜索篇

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招面试的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于【CodeTopHot200】进行的&#xff0c;每个知识点的修正和深入主要参…

SpringSecurity工作原理

实现功能就是继承这几个对应功能的类。 大概工作流程 Spring Security 的过滤器&#xff08;Filters&#xff09;和拦截器&#xff08;Interceptors&#xff09;是 Spring Security 框架中用于保护 web 应用安全的重要组件。它们在处理 HTTP 请求时扮演不同的角色&#xff0c…

uni-app一些目录结构、方法、生命周期、打包、微信小程序登录与支付

1、关于uniapp的目录结构 跟普通vue项目目录结构差不多&#xff0c;多了几个核心文件&#xff0c;manifest.json是配置应用名称、appid、logo、版本等打包信息用的&#xff0c;pages.json的作用是配置页面路径、页面窗口样式、tabBar、navigationBar等页面类信息 2、页面适配方…

【Node.js】笔记梳理 8 - API和JWT

写在最前&#xff1a;跟着视频学习只是为了在新手期快速入门。想要学习全面、进阶的知识&#xff0c;需要格外注重实战和官方技术文档&#xff0c;文档建议作为手册使用 系列文章 【Node.js】笔记整理 1 - 基础知识【Node.js】笔记整理 2 - 常用模块【Node.js】笔记整理 3 - n…

12月03日,每日信息差/菲律宾发生7.4级强震后共录得955次余震/腾讯惩处超 400 万个 QQ 号:这三大行为零容忍

_灵感 ​ &#x1f396; 中国联通&#xff1a;选举陈忠岳为公司董事长 &#x1f384; 菲律宾发生7.4级强震后共录得955次余震 &#x1f30d; 京沪高铁二线“收官段”尘埃落定&#xff1a;潍宿高铁初步设计正式获批 &#x1f30b; 我国燃料电池汽车产业进入提速关键期 &#…

树与二叉树堆:经典OJ题集(2)

目录 二叉树的性质及其问题&#xff1a; 二叉树的性质 问题&#xff1a; 一、对称的二叉树&#xff1a; 题目&#xff1a; 解题思路&#xff1a; 二、另一棵树&#xff1a; 题目&#xff1a; 解题思路&#xff1a; 三、翻转二叉树&#xff1a; 题目&#xff1a;…

synchronized和volatile的区别是什么?

synchronized和volatile是Java中的两个关键词&#xff0c;分别用于实现线程同步和线程间的可见性。 synchronized用于实现线程之间的互斥同步&#xff0c;即同一时刻只能有一个线程访问被synchronized修饰的代码块或方法&#xff0c;其他线程需要等待。synchronized确保了线程…

非功能关键知识总结(一)

文章目录 一、稳定性(一)、服务级别协议1、SLA2、OLA3、UC (二)、可用性指标(三)、突发事件等级 三、质量(一)、千行代码缺陷数量(二)、软件质量模型的发展(三)、产品质量模型 四、安全(一)、网络安全 五、灾备(一)、灾备指标(二)、灾难恢复等级(三)、容灾技术分类 一、稳定性 …

一次电气——电抗器(一)

我之前的工作是在国外建联合循环电厂&#xff0c;现在的工作是研发一次电力设备。虽然仍是在电力行业发展&#xff0c;但这两份不同岗位不同职能的工作究其感受而言有很大的不同。相较于第一份工作&#xff0c;第二份工作带给我带来的更多的是一种由广及微&#xff0c;由浅入深…

kafka3.6.0部署

部署zk https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.9.1/apache-zookeeper-3.9.1.tar.gz tar -xf apache-zookeeper-3.9.1.tar.gz -C /apps cd /apps/ && ln -s apache-zookeeper-3.9.1 zookeeper 修改配置bash grep -vE ^$|^# conf/zo…

buuctf [极客大挑战 2019]Havefun1

解题思路&#xff1a; 小习惯 本题先看看源码或者检查一下&#xff0c;可能这是俺的一个小习惯。 源码里面都看到了php的代码 php代码解析&#xff1a; $cat$_GET[cat]; echo $cat; if($catdog){ echo Syc{cat_cat_cat_cat}; } 1.$ca…

<蓝桥杯软件赛>零基础备赛20周--第8周第2讲--排序的应用

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周&#xff08;读者可以按…