搞QT安卓开发就像搭积木,选错积木块整个房子都会塌。我花了三天时间反复折腾,终于摸清了QT5.15.2安卓开发环境的正确打开方式。先说结论:版本兼容性是最大的坑,下面这些软件版本组合是我用血泪史验证过的黄金搭配:
Could not determine java version错误第一次配置时我直接装了最新版Android Studio,结果在Qt Creator里死活检测不到SDK。后来发现是cmdline-tools版本过高导致的,具体表现为Qt Creator配置页面显示"×Android SDK Command-line Tools run"。这里有个隐藏知识点:Qt5.15.2对Android开发工具链的版本极其敏感,后面会详细说解决方案。
下载QT安装器时注意选择在线安装程序,离线包可能不包含Android组件。运行安装程序后重点看这两个步骤:
我犯过的典型错误是只勾选了桌面开发组件,结果创建项目时根本看不到Android编译套件选项。如果已经安装但漏选组件,可以重新运行安装程序进行组件增删。
Oracle官网下载Java 8需要注册账号,这里分享个直链技巧:在浏览器地址栏直接输入https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html可跳过登录步骤。安装时建议修改默认路径为C:\Java\jdk1.8.0_371,避免路径含空格和中文。
环境变量配置有个易错点:除了添加JAVA_HOME和修改Path外,还需要:
bash复制# 验证时执行这三个命令
java -version # 应显示1.8.x
javac -version # 应显示相同版本
where javac # 检查是否指向正确路径
如果javac命令报错,通常是Path中%JAVA_HOME%\bin没配置正确。我遇到过系统原有Java环境干扰的情况,用where java命令查看所有java.exe路径,删除冲突的环境变量即可。
Android Studio安装后不要急着创建项目,先完成这些关键配置:
重点来了:Qt5.15.2与最新版cmdline-tools不兼容,但AS默认安装的就是新版。解决方案是:
AndroidSDK\cmdline-tools\latest目录内容打开Qt Creator→工具→选项→设备→Android,需要填写这些路径:
C:\Users\你的用户名\AppData\Local\Android\SdkC:\Java\jdk1.8.0_371C:\Users\你的用户名\AppData\Local\Android\Sdk\ndk\21.4.7075529配置成功的标志是所有检测项都显示绿色对勾。如果看到红色叉号,把鼠标悬停在图标上会显示具体错误信息。我遇到最多的问题是:
code复制× Android SDK Command-line Tools run
× Android Platform-Tools installed
这通常意味着:
新建Qt Quick项目时,在"构建套件选择"界面要勾选Android套件。编译运行前需要:
我推荐先用真机测试,模拟器经常遇到性能问题。第一次部署时会自动签名APK,这个过程可能耗时较长。如果卡在Generating Android Package步骤超过10分钟,检查是否被杀毒软件拦截了adb进程。
错误1:Dex archive merge failed
解决方法:在项目的build.gradle中添加:
gradle复制android {
dexOptions {
javaMaxHeapSize "4g"
}
}
错误2:Unable to strip library
这是NDK版本问题,修改AndroidManifest.xml添加:
xml复制<uses-sdk android:minSdkVersion="21" />
如果APP安装后闪退,按这个顺序检查:
adb logcat获取详细堆栈我遇到过一个典型问题:在Windows开发机上运行正常,但安卓设备上崩溃。最后发现是QML文件中用了file:///开头的绝对路径,改成Qt.resolvedUrl()就好了。
安卓设备资源有限,建议:
qmake复制android {
ANDROID_EXTRA_LIBS = $$PWD/libs/*.so
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
}
qml复制ApplicationWindow {
flags: Qt.Window | Qt.MaximizeUsingFullscreenGeometryHint
}
使用adb命令可以大幅提升测试效率:
bash复制# 卸载旧版本
adb uninstall com.yourcompany.appname
# 安装新APK
adb install app/build/outputs/apk/debug/app-debug.apk
# 清除应用数据
adb shell pm clear com.yourcompany.appname
建议把这些命令保存为Qt Creator的外部工具,一键调用。我在项目根目录放了个deploy.bat脚本,内容如下:
batch复制@echo off
adb uninstall com.yourcompany.appname
adb install android-build\build\outputs\apk\debug\android-build-debug.apk
adb shell am start -n com.yourcompany.appname/org.qtproject.qt5.android.bindings.QtActivity
安卓设备上的控制台输出默认不可见,可以通过这些方法捕获:
cpp复制#include <android/log.h>
#define LOG_TAG "MyApp"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
cpp复制LOGD("Current value: %d", someVariable);
bash复制adb logcat -s MyApp:D
这套环境配置方案已经在三个实际项目中验证通过,包括一个跨平台的工业控制APP。最难搞的摄像头权限问题最终是通过修改AndroidManifest.xml解决的:
xml复制<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />