Qt 安卓环境搭建

序言

Qt 开发 Android 需要 jdk、ndk、sdk 三个包,并且 Qt 的版本要与这些包的版本对应,否则会出现一堆奇怪的 bug,我的环境如下:

  • qt 版本:5.14.2
  • JDK:1.8.0_172
  • NDK:r20b
  • SDK:24.4.1

安装时注意安装目录不能有中文,这一点不用多说,网上有些说不能带空格,但我是直接使用默认安装目录的,而默认目录是有空格的,所以这个应该不是大问题,最终我使用默认目录也可以成功。

Qt 和 Android 版本依赖关系:

Getting Started with Qt for Android | Qt 5.15

image-20241221181401964

搭建过程

Qt | Qt For Android、Qt5.14.2安卓开发环境搭建详细步骤_觉皇不秃头的技术博客_51CTO博客

1. 安装 qt

我选择的版本为:5.14.2,勾上 Android 组件,其他按需选择即可,

下载地址(这个可能需要开梯子,镜像源中没找到这个版本,所以我直接开梯子下载了):

Index of /archive/qt/5.14/5.14.2

2. 安装 JAVA JDK

我选择的版本为:JDK:1.8.0_172,这里我直接使用 exe 程序安装的,安装过程会自动配置环境变量,就不用再手动配置环境变量了。

安装完使用命令查看版本:

1
2
3
4
C:\Users\Administrator>java -version
java version "1.8.0_172"
Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)

JDK 下载镜像网站:

Index of java-local/jdk (huaweicloud.com)

3. NDK

我选择的版本为:r20b,下载完解压到没有中文的英文目录即可(最好也别带空格,没试过)。

下载 Android NDK:

Unsupported Downloads · android/ndk Wiki · GitHub

4. 安装 Android Studio

安装 Android Studio 软件,这个软件是专门用来开发 Android 的,这里主要借用其来安装 Android SDK。为什么要借用这个软件呢:原因是我直接使用 SDK Manager 工具来安装组件时,一直出现网络问题获取不到库(放在 Google 上的),使用梯子和镜像源都不能解决,所以最终选择这种方法。

下载地址:

下载 Android Studio 和应用工具 - Android 开发者 | Android Developers (google.cn)

安装教程:

android studio安装教程(持续更新中,包安装成功,不成功你找我)-CSDN博客

5. Qt 配置 Android 环境

前面都安装完后,进入到 Qt Creator 进行配置 Android 环境:

image-20241221175614105

这是最后成功的情况,我使用 Android Studio 软件下载安装后组件时,Qt 这里还是出现 SDK tools installed 和 Platform SDK installed 这两个选项打×的情况,查找资料发现是 SDK 目录下缺少 tools 目录(Android Studio 软件可能不需要用到这个 tools 目录或者是放在其他目录,我们只是借其下载安装组件,所以手动下载 tools 即可)。

Qt6.3.0安卓配置提示缺少Platform SDK installed-CSDN博客

于是就去手动下载 SDK Tools,并接压缩包内的 Tools 目录复制到原来的 SDK 目录下,即可解决。

AndroidDevTools - Android开发工具 Android SDK下载 Android Studio下载 Gradle下载 SDK Tools下载

Qt 配置 Android 环境的选项:

Qt5.14.2 for Android 环境配置及开发_qt 5.14 android-CSDN博客

出现的问题

下载 gradle 时出现网络问题,可以手动下载放到对应目录或者修改镜像源:

Gradle 下载:

https://services.gradle.org/distributions/

jdk 版本不对应出现错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7
at org.codehaus.groovy.vmplugin.VMPluginFactory.<clinit>(VMPluginFactory.java:43)
at org.codehaus.groovy.reflection.GroovyClassValueFactory.<clinit>(GroovyClassValueFactory.java:35)
at org.codehaus.groovy.reflection.ClassInfo.<clinit>(ClassInfo.java:109)
at org.codehaus.groovy.reflection.ReflectionCache.getCachedClass(ReflectionCache.java:95)
at org.codehaus.groovy.reflection.ReflectionCache.<clinit>(ReflectionCache.java:39)
......
......
......
at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.ensureClassInitialized(Unknown Source)
at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.newConstructorAccessor(Unknown Source)
at java.base/jdk.internal.reflect.ReflectionFactory.newConstructorAccessor(Unknown Source)
at java.base/java.lang.reflect.Constructor.acquireConstructorAccessor(Unknown Source)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Unknown Source)
at java.base/java.lang.reflect.ReflectAccess.newInstance(Unknown Source)
at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(Unknown Source)
at java.base/java.lang.Class.newInstance(Unknown Source)
at org.codehaus.groovy.vmplugin.VMPluginFactory.createPlugin(VMPluginFactory.java:57)
at org.codehaus.groovy.vmplugin.VMPluginFactory.<clinit>(VMPluginFactory.java:39)
... 119 more

FAILURE: Build failed with an exception.

* What went wrong:
Could not initialize class org.codehaus.groovy.reflection.ReflectionCache
> Exception java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7 [in thread "main"]

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 1s
-- Skipping C:/Qt/Qt5.14.2/5.14.2/android/plugins/iconengines/libplugins_iconengines_qsvgicon_armeabi-v7a.so. It has unmet dependencies: lib/libQt5Svg_armeabi-v7a.so.
-- Skipping C:/Qt/Qt5.14.2/5.14.2/android/plugins/imageformats/libplugins_imageformats_qsvg_armeabi-v7a.so. It has unmet dependencies: lib/libQt5Svg_armeabi-v7a.so.
Skipping createRCC
Building the android package failed!
-- For more information, run this command with --verbose.
15:06:47: 进程"C:\Qt\Qt5.14.2\5.14.2\android\bin\androiddeployqt.exe"退出,退出代码 14 。
Error while building/deploying project untitled (kit: Android for armeabi-v7a,arm64-v8a,x86,x86_64 (Clang Qt 5.14.2 for Android))
When executing step "Build Android APK"

Android SDK 版本太高了,但项目依赖的工具或库不兼容。sdk tools 版本使用的是 24.4.1,但是这里用了 android-35,版本不对应出错,后面改成 android-29 可解决。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':processDebugResources'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
> Android resource linking failed
AAPT: aapt2.exe E 12-21 15:11:16 17732 10564 LoadedArsc.cpp:112] RES_TABLE_TYPE_TYPE entry offsets overlap actual entry data.
aapt2.exe E 12-21 15:11:16 17732 10564 ApkAssets.cpp:157] Failed to load 'resources.arsc' in APK 'C:\Users\Administrator\AppData\Local\Android\Sdk\platforms\android-35\android.jar'.
error: failed to load include path C:\Users\Administrator\AppData\Local\Android\Sdk\platforms\android-35\android.jar.



* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 24s
19 actionable tasks: 19 executed
Building the android package failed!
-- For more information, run this command with --verbose.
15:11:17: 进程"C:\Qt\Qt5.14.2\5.14.2\android\bin\androiddeployqt.exe"退出,退出代码 14 。
Error while building/deploying project untitled1 (kit: Android for armeabi-v7a,arm64-v8a,x86,x86_64 (Clang Qt 5.14.2 for Android))
When executing step "Build Android APK"

编译时出现架构不对,需要选择 ABIs 支持的架构,可单选或多选。

1
adb: failed to install Failure [INSTALL_FAILED_NO_MATCHING_ABIS: INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113] Installing to device failed! 13:19:31: The process "C:\Qt\Qt5.14.2\5.14.2\android\bin\androiddeployqt.exe" exited with code 16.

image-20241221184344322

构建时还会出现目录名太长的情况,在 Qt 内手动修改减少目录名字即可。