官方文档:https://doc.qt.io/qt-6/android.html

目的:把 Qt 安装目录 Example 中的例子编译生成 APK,安装到 Android 平台运行起来。

一、依赖安装

要把 Qt 项目编译成 APK,首先要解决的就是编译环境问题。它有两个部分内容,一个是如何配置 Android 的环境,另一个是如何把 Qt 与 Android 关联起来。

二、编译脚本

当 Qt 与 Android 环境依赖都安装以后,就可以进行进行编译,为了方便使用直接让 AI 生成一个脚本。

#!/bin/bash

# qt 文档
# https://doc.qt.io/qt-6/android-building-projects-from-commandline.html

# 配置路径
QT_ANDROID_BIN="/home/liuyang/Qt/6.8.7/android_x86_64/bin/qt-cmake"
ANDROID_SDK_ROOT="/home/liuyang/Android/Sdk"
ANDROID_NDK_ROOT="/home/liuyang/Android/Sdk/ndk/30.0.14904198"
BUILD_DIR="build-android"

# 尝试自动设置 JAVA_HOME (如果环境没设置)
if [ -z "$JAVA_HOME" ]; then
    # 尝试寻找系统默认 JDK 路径
    export JAVA_HOME="/home/liuyang/workspace/tool/android-studio/jbr"
fi

# 1. 清理并创建构建目录
if [ -d "$BUILD_DIR" ]; then
    echo "正在清理构建目录: $BUILD_DIR..."
    rm -rf "$BUILD_DIR"
fi
mkdir -p "$BUILD_DIR"
cd "$BUILD_DIR"

# 2. 配置项目
echo "正在配置项目..."
"$QT_ANDROID_BIN" \
    -DANDROID_SDK_ROOT="$ANDROID_SDK_ROOT" \
    -DANDROID_NDK_ROOT="$ANDROID_NDK_ROOT" \
    -S .. \
    -GNinja

# 3. 生成 Android 构建文件 (Gradle 项目)
echo "正在生成 Gradle 项目文件..."
# 运行此命令是为了让 Qt 自动生成 android-build 目录及其配置
# cmake --build . --target apk > /dev/null 2>&1
cmake --build . --target apk

# 4. 直接调用 gradlew 完成 APK 编译
echo "正在编译 APK (通过 gradlew)..."
cd android-build
./gradlew assembleDebug

# 5. 提示结果
if [ $? -eq 0 ]; then
    echo "------------------------------------------------"
    echo "编译成功!"
    echo "APK 位置: $BUILD_DIR/android-build/build/outputs/apk/debug/"
    echo "------------------------------------------------"
else
    echo "编译失败,请检查错误输出。"
    exit 1
fi

三、版本兼容

1、把 Qt 项目编译成 Android APK 的过程中,涉及到 Qt 版本、Android 版本以及依赖包的版本。

2、关于 AGPGradle
Qt 安装目录中内置了用于生成 android 项目的 Gradle 模板文件。
当使用 qt-cmake 配置并构建项目时,这些模板会被复制到构建目录中。
也就是在 Qt 的安装目录中可以看到 AGPGradle 的版本。

$ cd ~/Qt/6.8.7/android_x86_64
$ rg classpath
src/android/templates/build.gradle
9:        classpath 'com.android.tools.build:gradle:8.6.0'
$ cd ~/Qt/6.8.7/android_x86_64
$ rg distributionUrl
src/3rdparty/gradle/gradle/wrapper/gradle-wrapper.properties
3:distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip