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
-
在第一步下载后,在ubuntu终端使用命令解压:tar -xzvf jdk-8u391-linux-x64.tar.gz
-
配置环境变量:
可以配置临时环境变量或者永久环境变量
临时环境变量配置方法:
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重新分配内存。
-
在第一步下载后,在ubuntu终端使用命令解压:tar -xzvf android-sdk_r24.4.1-linux.tgz
-
解压后cd到tools目录,执行./android
- 选择库安装
这里,有个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