Qt for Android開發環境搭建及測試過程記錄


最近學習了Qt的QML編程技術,感覺相較於以前的QtGUI來說更方便一些,使用QML可以將界面與業務邏輯解耦,便於開發。
QML支持跨平台,包括支持Android平台,因此可以使用Qt的QML進行Android開發。本文記錄了Qt for Android環境搭建及測試過程。

本文使用Qt 5.6.1版本。

1. 下載Qt for Android

Qt for Android (5.6.1)安裝包下載地址:http://download.qt.io/archive/qt/5.6/5.6.1/qt-opensource-windows-x86-android-5.6.1.exe

2. 安裝Android依賴環境

參考Qt for Android官方網站:Getting Started with Qt for Android | Qt 5.7,可知需要安裝如下幾項:

  • Android SDK (包括Android SDK Tools和Android Debug Bridge(ADB))
  • Android NDK
  • Apache Ant v1.8 or later
  • Java SE Development Kit (JDK) v6 or later

於是,我安裝了如下幾項:

3. 安裝Qt for Android

如果之前沒有安裝過Qt 5.6.1的任何平台版本(包括VS2015、VS2013等),則可以直接雙擊運行qt-opensource-windows-x86-android-5.6.1.exe,按提示進行安裝即可。

但如果之前安裝過Qt 5.6.1,比如我之前安裝了Qt 5.6.1 VS2010 x86,安裝目錄下的結構如下:

 
 
 
         
  1. D:\ProgramFiles\Qt\5.6.1
  2. ├─5.6
  3. ├─msvc2010_x86
  4. └─Src
  5. ├─Docs
  6. ├─Examples
  7. ├─Tools
  8. └─……(其他不重要的目錄或文件)

我又在虛擬機里測試安裝了一下qt-opensource-windows-x86-android-5.6.1.exe,得到的目錄結構如下:

 
 
 
         
  1. D:\ProgramFiles\Qt\5.6.1
  2. ├─5.6
  3. ├─android_armv7
  4. ├─android_x86
  5. ├─mingw49_32
  6. └─Src
  7. ├─Docs
  8. ├─Examples
  9. ├─Tools
  10. └─mingw492_32
  11. └─……(其他不重要的目錄或文件)

從上面兩個目錄結構的對比中可以看出,Qt 5.6.1在不同編譯平台下的安裝文件的區別就在於5.6目錄下和Tools目錄下的對應內容。

於是,我將虛擬機中的5.6\android_armv75.6\android_x865.6\mingw49_32Tools\mingw492_32這幾個文件夾復制到主機中安裝了Qt 5.6.1 VS2010的對應目錄下。現在匯總的目錄結構如下:

 
 
 
         
  1. D:\ProgramFiles\Qt\5.6.1
  2. ├─5.6
  3. ├─android_armv7
  4. ├─android_x86
  5. ├─mingw49_32
  6. ├─msvc2010_x86
  7. └─Src
  8. ├─Docs
  9. ├─Examples
  10. ├─Tools
  11. └─mingw492_32
  12. └─……(其他不重要的目錄或文件)

其中Tools\mingw492_32目錄相當於MinGW編譯器的安裝目錄,需要將Tools\mingw492_32\bin的絕對路徑添加到系統Path環境變量中,否則后面Qt Creator會找不到mingw32-make.exe文件。

OK,到這里就算安裝完成了。

4. 后續配置

安裝完之后,就是在Qt Creator中配置Qt路徑了,比較簡單,就不再贅述了。

我的電腦上配置完之后如下(在Qt Creator中選擇"工具"->"選項"來查看):



5. 測試

打開Qt Creator,新建一個工程,配置如下:




選擇構建套件為Qt 5.6.1(即VS2010平台),點擊構建按鈕,成功構建。
再點擊運行按鈕,成功運行可以看到一個Hello World界面:

然后選擇構建套件為Android for armeabi-v7a (GCC 4.9, Qt 5.6.1)(即Android平台),點擊構建按鈕,成功構建。

此時可能會出現如下錯誤:

 
 
 
         
  1. Execute failed: java.io.IOException: Cannot run program${aapt}": error=2, No such file or directory

解決辦法參考:android - ant jar error: Execute failed: …… - Stack Overflow

Have you updated the Android SDK tools to 24.3.2? This seems to have caused the issue. Add following 4 lines to android-sdk-path/tools/ant/build.xml starting line 484 and hopefully it should solve.

 
 
 
         
  1. <property name="aidl" location="${android.build.tools.dir}/aidl${exe}" />
  2. <property name="aapt" location="${android.build.tools.dir}/aapt${exe}" />
  3. <property name="dx" location="${android.build.tools.dir}/dx${bat}" />
  4. <property name="zipalign" location="${android.build.tools.dir}/zipalign${exe}" />

於是,用文本編輯器打開D:\ProgramFiles\Android\sdk\tools\ant\build.xml,在第484行處添加上面幾行內容,保存。

重新點擊Qt Creator的構建按鈕,又出現了如下錯誤:

 
 
 
         
  1. 02:23:45: 正在啟動 "D:\ProgramFiles\Qt\5.6.1\Tools\mingw492_32\bin\mingw32-make.exe" "INSTALL_ROOT=D:/ProgramData/QtCreatorProjects/AndroidTest/build-AndroidTest-Android_for_armeabi_v7a_GCC_4_9_Qt_5_6_1-Debug/android-build" install
  2. cp -f libAndroidTest.so D:/ProgramData/QtCreatorProjects/AndroidTest/build-AndroidTest-Android_for_armeabi_v7a_GCC_4_9_Qt_5_6_1-Debug/android-build/libs/armeabi-v7a/libAndroidTest.so
  3. makefile:820: recipe for target 'install_target' failed
  4. process_begin: CreateProcess(NULL, cp -f libAndroidTest.so D:/ProgramData/QtCreatorProjects/AndroidTest/build-AndroidTest-Android_for_armeabi_v7a_GCC_4_9_Qt_5_6_1-Debug/android-build/libs/armeabi-v7a/libAndroidTest.so, ...) failed.
  5. make (e=2): 系統找不到指定的文件。
  6. mingw32-make: [install_target] Error 2 (ignored)

注意到上面有一行命令是cpcp是Linux系統中的復制命令,在Windows系統中對應的是copy,問題就出在這兒。

查看該工程Android平台build目錄(build-AndroidTest-Android_for_armeabi_v7a_GCC_4_9_Qt_5_6_1-Debug)下的Makefile,發現里面有下面這段內容:

 
 
 
         
  1. COPY = cp -f
  2. COPY_FILE = cp -f
  3. COPY_DIR = cp -f -R

而在VS2010平台build目錄(build-AndroidTest-Qt_5_6_1-Debug)下的Makefile中的對應內容為:

 
 
 
         
  1. COPY = copy /y
  2. COPY_FILE = copy /y
  3. COPY_DIR = xcopy /s /q /y /i

對比其中的cpcopy兩個命令,可以由此確定是因為構建套件Android for armeabi-v7a (GCC 4.9, Qt 5.6.1)(即Android平台)生成的Makefile是只適用於Linux平台的。
(注:我試過在"工具"->"選項"中修改該構建套件生成的Makefile的類型,但是不管選擇哪種Makefile類型,生成的Makefile中都是cp而不是copy。)

於是考慮在Windows系統中搭建虛擬Linux環境。

MSYS可以解決我的這個問題!

MSYS,即Minimal GNU(POSIX)system on Windows,是一個小型的GNU環境,包括基本的bash,make等等。與Cygwin大致相當。

於是下載MSYS,安裝,然后將其bin路徑添加到系統Path環境變量中。

再次點擊Qt Creator的構建按鈕,OK,成功構建!

最后點擊運行,可以選擇安裝到Android模擬器或是真機,安裝apk后可以看到和Windows平台上界面類似的Android界面:




到此,Qt for Android開發環境搭建以及測試全部完成!






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM