首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Qt 桌面應用移植 Android 完整指南:VS2015 + Qt 環境搭建與避坑

     編輯:程式設計疑難解答

核心前提:桌面版 Qt 無法直接產出 APK

必須安裝獨立的 Qt for Android 套件,桌面版與 Android 版編譯器、庫、工具鏈完全不同。

環境搭建清單(耗時 1-2 小時,請預留足夠時間)

組件版本建議下載來源關鍵配置
Qt for Android與桌面版同大版本(如 5.12.x / 6.2.x)Qt 官網在線安裝器 → 選 Android armv7/arm64安裝路徑無中文/空格
Android SDKCommand Line Tools 或 Android Studio 內置developer.android.comANDROID_SDK_ROOT 環境變量
Android NDKr21e / r23b / r25c(匹配 Qt 版本)SDK Manager 或 NDK 歷史版本頁Qt Creator → Options → Devices → Android → NDK 路徑
Apache Ant1.10.x(Qt 5)或 Gradle(Qt 6)ant.apache.org配置 ANT_HOME、Path
JDKJDK 8 (1.8.0_202+) / JDK 11 (Qt 6)Adoptium / OracleJAVA_HOME、Path

Qt Creator 關鍵配置步驟

  1. Options → Devices → Android:依次填入 SDK、NDK、Ant/JDK 路徑,點「Apply」自動檢測綠勾。
  2. Options → Build & Run → Compilers:應看到 Android ARMv7 (Clang)、Android ARM64 (Clang) 等。
  3. Options → Build & Run → Kits:添加/選中 Android Kit,Device type 選 Android,Compiler 選上述 ARM 編譯器,Qt Version 選 Android 版 Qt(如 Qt 5.12.12 Android ARMv7)。
  4. 專案 → Build Steps:確認 Build Android APK 步驟存在。

代碼層面遷移要點

  • 去除平台相關代碼:Windows API、#ifdef Q_OS_WIN、第三方 Windows 庫(如 DirectShow、Media Foundation)。
  • 多媒體播放:桌面用 QMediaPlayer + 濾鏡器,Android 必須用 QMediaPlayer + MediaPlayer 後端,確保項目 .pro 添加 QT += multimedia,視頻格式以 H.264/AAC MP4 為主。
  • 文件路徑:QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) 替代硬編碼 C:/。
  • 權限聲明:AndroidManifest.xml 添加 INTERNET、READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE(視預覽)。

常見構建錯誤速查

錯誤原因解決
SDK platform not foundSDK 缺少對應 API LevelSDK Manager 安裝 Android SDK Platform 28/29/30
NDK toolchain not foundNDK 版本與 Qt 不匹配換 Qt 官方推薦 NDK 版本(文檔有對應表)
Manifest merger failed權限衝突/缺失檢查 AndroidManifest.xml 合併規則
java.lang.UnsatisfiedLinkErrorso 庫未打包/架構不匹配確認 ANDROID_PACKAGE_SOURCE_DIR、libs/armeabi-v7a/ 下有 .so

總結

Qt 移植 Android 是系統工程,核心在於完整安裝獨立 Android 工具鏈並在 Qt Creator 正確掛載。建議先跑通官方 examples/multimedia/videoplayer,再遷移自有代碼,遇錯對照表單排查,耐心等待 Gradle/Ninja 構建完成。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved