ubuntu下QT搭建Android开发环境

news2024/11/15 7:44:03

一、前言

用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.coloradmin.cn/o/1273196.html

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

相关文章

pycharm安装django框架详细教程(指定版本)

教程目录 前言一、确保已安装好python和pycharm工具二、利用pycharm创建纯python项目,同时创建虚拟环境三、通过pycharm命令行安装Django指定版本四、通过pycharm命令行创建一个Django项目五、在pycharm中进行相关配置六、利用pycharm按钮启动Django项目 前言 在实…

常用API—String(操作字符串的工具类)

一,创建字符串的方法 二,案例 public static void main(String[] args) {//1,直接创建String string "gears";System.out.println(string);//2,用对象创建String s1 new String("xiaoheizi");System.out.println(s1);//3…

高效解决在本地打开可视化服务器端的tensorboard

文章目录 问题解决方案 问题 由于连着远程服务器构建模型,但是想在本地可视化却做不到,不要想当然天真的以为CTRLC点击链接http://localhost:6006就真能在本地打开tensorboard。你电脑都没连接服务器,只是pycharm连上了而已 解决方案 你需要…

有趣的代码——井字棋游戏的实现

前面我们讲解过一个猜数字游戏的实现,想来应该让大家感受到了属于编程的趣味性,并且在实现过程中应该也收获了知识。但猜数字这种简单的游戏肯定满足不了大家对于游戏的高标注、严要求,估计玩不了多久就会没有兴趣了,所以&#xf…

渗透测试-环境部署

环境部署 一、kali的环境部署二、DNSenum工具:深入挖掘目标域名的DNS信息三、安装Burpsuite四、安装根证书五、JSFinder的使用六、App、小程序、公众号提取 一、kali的环境部署 1.配置SSH 修改配置文件 vi /etc/ssh/sshd_config 找到 # PermitRootLogin prohibit…

收藏!7个小众宝藏的开发者学习类网站

1、simplilearn 地址:https://www.simplilearn.com/ simplilearn是全球排名第一的在线学习网站,它的课程由世界知名大学、顶级企业和领先的行业机构通过实时在线课程设计和提供,其中包括顶级行业从业者、广受欢迎的培训师和全球领导者。 2、…

java springboot通过application配置文件生成随机值并控制范围

我们找到 项目的 application 配置文件 这里我们还是习惯用 yml格式的 我们在配置文件中 写出 ${random.} 的时候 他就会将所有可配置的随机类型都提示出来了 有 整数 长整星 字符串 uuid 这里 我们来个模板 testcase:book:id: ${random.int}name: ${random.value}date: ${r…

[跑代码]BK-SDM: A Lightweight, Fast, and Cheap Version of Stable Diffusion

Installation(下载代码-装环境) conda create -n bk-sdm python3.8 conda activate bk-sdm git clone https://github.com/Nota-NetsPresso/BK-SDM.git cd BK-SDM pip install -r requirements.txt Note on the torch versions weve used torch 1.13.1 for MS-COCO evaluation…

了解ConcurrnetHashMap 吗?

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

kafka中的常见问题处理

文章目录 1. 如何防⽌消息丢失2. 如何防⽌重复消费3. 如何做到消息的顺序消费4. 如何解决消息积压问题4.1 消息积压问题的出现4.2 消息积压的解决⽅案 5. 实现延时队列的效果5.1 应用场景5.2 具体方案 1. 如何防⽌消息丢失 ⽣产者:1)使⽤同步发送 2&…

决策树(Classification and Regression Tree)

学了数据结构的树后,一直没发现树有哪些应用。学而时习(实践)之,不亦说乎?故特地上网查了查树的应用,在下阐释: 1.文件系统:文件和目录的组织通常以树的形式表示,允许高效…

掌握Python BentoML:构建、部署和管理机器学习模型

更多资料获取 📚 个人网站:ipengtao.com BentoML是一个开源的Python框架,旨在简化机器学习模型的打包、部署和管理。本文将深入介绍BentoML的功能和用法,提供详细的示例代码和解释,帮助你更好地理解和应用这个强大的工…

【C++】异常处理 ③ ( 栈解旋 | 栈解旋概念 | 栈解旋作用 )

文章目录 一、栈解旋1、栈解旋引入2、栈解旋概念3、栈解旋作用 二、代码示例 - 栈解旋1、代码示例2、执行结果 一、栈解旋 1、栈解旋引入 C 程序 抛出异常后 对 局部变量的处理 : 当 C 应用程序 在 运行过程 中发生异常时 , 程序会跳转到异常处理程序 , 并执行一些操作以处理异…

10.30 作业 C++

设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数。 #include <iostream>using namespace std;clas…

【C语言学习疑难杂症】第6期:C语言中如何打印一些特殊字符,比如打印扩展ascii码字符

首先我们来看下ascii表和ascii拓展表: ascii表中的字符只有128个,是从0-127,而拓展ascii表的内容是128-255。拓展表中它们都是一些特殊的字符,如果我们想答应ascii拓展码中的一些字符应该要怎么操作呢? 比如下面的代码: unsigned char a = 176, b = 219;printf("%…

客餐书房一体布局,新中式风格禅意十足。福州中宅装饰,福州装修

你是否曾经遇到过这样的痛点&#xff1a;装修时不知道该选择什么样的风格&#xff0c;让家居空间显得既时尚又实用&#xff1f;如果你对此感到困惑&#xff0c;那么新中式风格可能正是你想要的选择&#xff01; 今天&#xff0c;我们将一起探讨一种别样的家居布局&#xff0c;它…

openGauss学习笔记-136 openGauss 数据库运维-例行维护-检查数据库性能

文章目录 openGauss学习笔记-136 openGauss 数据库运维-例行维护-检查数据库性能136.1 检查办法136.2 异常处理 openGauss学习笔记-136 openGauss 数据库运维-例行维护-检查数据库性能 136.1 检查办法 通过openGauss提供的性能统计工具gs_checkperf可以对硬件性能进行检查。 …

单词拆分 II

题目链接 单词拆分 II 题目描述 注意点 s 和 wordDict[i] 仅有小写英文字母组成wordDict 中所有字符串都 不同词典中的同一个单词可能在分段中被重复使用多次以任意顺序 返回所有这些可能的句子 解答思路 使用深度优先遍历回溯解决本题&#xff0c;每一层从idx开始遍历s&a…

OSG编程指南<十六>:OSG渲染到纹理RTT及三维纹理体渲染技术简介

1、渲染到纹理&#xff08;RTT&#xff09; 1.1 RTT介绍 RTT&#xff08;Render to Texture&#xff09;即渲染到纹理。在普通的图形渲染流程中&#xff0c;最终结果是渲染到帧缓存中&#xff0c;然后才会显示到屏幕上。而RTT则是将场景渲染到一张纹理上&#xff0c;并且在之后…

知识蒸馏代码实现(以MNIST手写数字体为例,自定义MLP网络做为教师和学生网络)

dataloader_tools.py import torchvision from torchvision import transforms from torch.utils.data import DataLoaderdef load_data():# 载入MNIST训练集train_dataset torchvision.datasets.MNIST(root "../datasets/",trainTrue,transformtransforms.ToTens…