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 (就是键)可以是很多数据类型(…

jmeter下载地址

Jmeter安装教程【5.5】【Windows】jmeter详细安装配置教程,装不好你打我_一只莽夫的博客-CSDN博客

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

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

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

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

C#网络编程System.Net.WebClient 类vs System.Net.Http.HttpClient 类

目录 一、WebClient 类 1.WebClient 将数据上传到资源的方法 2.WebClient 从资源下载数据的方法 3.示例源码 4.生成效果 二、HttpClient 类 1.示例源码 2.生成效果 为什么要把两者拿出来pk呢?那是因为WebClient已经在.NET 6.0以后得版本被弃用了&#xff0c…

python跑ncnn(验证模型是否转换成功)

为了转ncnn模型是否成功,用python验证一下先 pip install ncnn分割模型的验证代码 import ncnn import cv2 import numpy as np# 创建ncnn的网络对象 net ncnn.Net()# 加载ONNX模型 net.load_param(E:\\Android_Projects\\ncnn-android-deeplabv3plus-main\\app\…

Spring学习笔记:Day1

学习策略: 理论与实践相结合:每学完一个知识点,尝试进行小的练习或小的项目实践。 持续反馈:在学习过程中,参与社区、论坛或与同事进行讨论,及时解决遇到的问题。 实际项目驱动:在学习后期&a…

PHP字符串面试题

PHP字符串面试题 1. 创建一个字符串变量&#xff0c;并打印输出字符串的内容。 <?php $string "Hello, World!"; echo $string; ?>2. 如何获取字符串的长度&#xff1f; <?php $string "Hello, World!"; $length strlen($string); echo …

P1530 [USACO2.4] 分数化小数 Fractions to Decimals

题目描述 写一个程序,输入一个形如 DN​ 的分数,输出它的小数形式。如果小数有循环节的话,把循环节放在一对圆括号中。 例如,13=0.33333333…31​=0.33333333… 写成 0.(3)0.(3),41333=0.123123123…33341​=0.123123123… 写成 0.(123)0.(123),整数 x 写成 x.0。 输入…

Vue3父子组件通信

一、父组件给子组件传值 子组件 ShipHomePortDialog 1.定义变量名称 <script lang"ts" setup> const props defineProps([title]) </script> 2.在template中使用变量 <h4>{{ title }}</h4> 3.在Script代码使用 var t props.title…

鸿蒙开发笔记

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

15个Pandas代码片段助力数据分析

大家好&#xff0c;Python的Pandas库是数据分析的基本工具&#xff0c;提供了强大的数据操作和分析功能。本文将探讨15个高级Pandas代码片段&#xff0c;这些代码片段将帮助简化数据分析任务&#xff0c;并从数据集中提取有价值的见解。 1. 过滤数据 import pandas as pd# 创…

红队攻防实战之Access注入

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

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;以及他们的编码习惯和生产力。 …

C语言实战演练之贪吃蛇游戏

贪吃蛇游戏的C语言实现主要包括以下几个步骤&#xff1a; 1. 初始化游戏界面&#xff1a; 设置窗口大小&#xff0c;背景颜色等。 2. 创建蛇的数据结构&#xff1a; 包括蛇头的位置、蛇身的长度、蛇身的坐标等。 3. 创建食物的数据结构&#xff1a; 包括食物的位置等。 4. 控制…

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

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

Leetcode 2952. Minimum Number of Coins to be Added

Leetcode 2952. Minimum Number of Coins to be Added 1. 解题思路2. 代码实现 题目链接&#xff1a;2952. Minimum Number of Coins to be Added 1. 解题思路 这一题思路上就是一个贪婪算法的思路&#xff0c;偏数学性多一点。 首先&#xff0c;我们将面值有序排列&#x…

SpringSecurity工作原理

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