Qt for Android開發(fā)環(huán)境搭建及測(cè)試過程記錄
最近學(xué)習(xí)了Qt的QML編程技術(shù),感覺相較于以前的QtGUI來說更方便一些,使用QML可以將界面與業(yè)務(wù)邏輯解耦,便于開發(fā)。
QML支持跨平臺(tái),包括支持Android平臺(tái),因此可以使用Qt的QML進(jìn)行Android開發(fā)。本文記錄了Qt for Android環(huán)境搭建及測(cè)試過程。
本文使用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依賴環(huán)境
參考Qt for Android官方網(wǎng)站:Getting Started with Qt for Android | Qt 5.7,可知需要安裝如下幾項(xiàng):
- 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
于是,我安裝了如下幾項(xiàng):
- Android SDK (包括Android SDK Tools 24.3.2和幾個(gè)版本的SDK Platform和Google APIs)
- Android NDK (android-ndk-r11c-windows-x86)
- Apache Ant v1.9.7
- JDK 1.7.0_55
3. 安裝Qt for Android
如果之前沒有安裝過Qt 5.6.1的任何平臺(tái)版本(包括VS2015、VS2013等),則可以直接雙擊運(yùn)行qt-opensource-windows-x86-android-5.6.1.exe,按提示進(jìn)行安裝即可。
但如果之前安裝過Qt 5.6.1,比如我之前安裝了Qt 5.6.1 VS2010 x86,安裝目錄下的結(jié)構(gòu)如下:
D:\ProgramFiles\Qt\5.6.1├─5.6│ ├─msvc2010_x86│ └─Src├─Docs├─Examples├─Tools└─……(其他不重要的目錄或文件)
我又在虛擬機(jī)里測(cè)試安裝了一下qt-opensource-windows-x86-android-5.6.1.exe,得到的目錄結(jié)構(gòu)如下:
D:\ProgramFiles\Qt\5.6.1├─5.6│ ├─android_armv7│ ├─android_x86│ ├─mingw49_32│ └─Src├─Docs├─Examples├─Tools│ └─mingw492_32└─……(其他不重要的目錄或文件)
從上面兩個(gè)目錄結(jié)構(gòu)的對(duì)比中可以看出,Qt 5.6.1在不同編譯平臺(tái)下的安裝文件的區(qū)別就在于5.6目錄下和Tools目錄下的對(duì)應(yīng)內(nèi)容。
于是,我將虛擬機(jī)中的5.6\android_armv7、5.6\android_x86、5.6\mingw49_32、Tools\mingw492_32這幾個(gè)文件夾復(fù)制到主機(jī)中安裝了Qt 5.6.1 VS2010的對(duì)應(yīng)目錄下。現(xiàn)在匯總的目錄結(jié)構(gòu)如下:
D:\ProgramFiles\Qt\5.6.1├─5.6│ ├─android_armv7│ ├─android_x86│ ├─mingw49_32│ ├─msvc2010_x86│ └─Src├─Docs├─Examples├─Tools│ └─mingw492_32└─……(其他不重要的目錄或文件)
其中Tools\mingw492_32目錄相當(dāng)于MinGW編譯器的安裝目錄,需要將Tools\mingw492_32\bin的絕對(duì)路徑添加到系統(tǒng)Path環(huán)境變量中,否則后面Qt Creator會(huì)找不到mingw32-make.exe文件。
OK,到這里就算安裝完成了。
4. 后續(xù)配置
安裝完之后,就是在Qt Creator中配置Qt路徑了,比較簡(jiǎn)單,就不再贅述了。
我的電腦上配置完之后如下(在Qt Creator中選擇"工具"->"選項(xiàng)"來查看):

5. 測(cè)試
打開Qt Creator,新建一個(gè)工程,配置如下:

選擇構(gòu)建套件為Qt 5.6.1(即VS2010平臺(tái)),點(diǎn)擊構(gòu)建按鈕,成功構(gòu)建。
再點(diǎn)擊運(yùn)行按鈕,成功運(yùn)行可以看到一個(gè)Hello World界面:

然后選擇構(gòu)建套件為Android for armeabi-v7a (GCC 4.9, Qt 5.6.1)(即Android平臺(tái)),點(diǎn)擊構(gòu)建按鈕,成功構(gòu)建。
此時(shí)可能會(huì)出現(xiàn)如下錯(cuò)誤:
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.
<property name="aidl" location="${android.build.tools.dir}/aidl${exe}" /><property name="aapt" location="${android.build.tools.dir}/aapt${exe}" /><property name="dx" location="${android.build.tools.dir}/dx${bat}" /><property name="zipalign" location="${android.build.tools.dir}/zipalign${exe}" />
于是,用文本編輯器打開D:\ProgramFiles\Android\sdk\tools\ant\build.xml,在第484行處添加上面幾行內(nèi)容,保存。
重新點(diǎn)擊Qt Creator的構(gòu)建按鈕,又出現(xiàn)了如下錯(cuò)誤:
02:23:45: 正在啟動(dòng) "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" installcp -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.somakefile:820: recipe for target 'install_target' failedprocess_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.make (e=2): 系統(tǒng)找不到指定的文件。mingw32-make: [install_target] Error 2 (ignored)
注意到上面有一行命令是cp,cp是Linux系統(tǒng)中的復(fù)制命令,在Windows系統(tǒng)中對(duì)應(yīng)的是copy,問題就出在這兒。
查看該工程Android平臺(tái)build目錄(build-AndroidTest-Android_for_armeabi_v7a_GCC_4_9_Qt_5_6_1-Debug)下的Makefile,發(fā)現(xiàn)里面有下面這段內(nèi)容:
COPY = cp -fCOPY_FILE = cp -fCOPY_DIR = cp -f -R
而在VS2010平臺(tái)build目錄(build-AndroidTest-Qt_5_6_1-Debug)下的Makefile中的對(duì)應(yīng)內(nèi)容為:
COPY = copy /yCOPY_FILE = copy /yCOPY_DIR = xcopy /s /q /y /i
對(duì)比其中的cp和copy兩個(gè)命令,可以由此確定是因?yàn)闃?gòu)建套件Android for armeabi-v7a (GCC 4.9, Qt 5.6.1)(即Android平臺(tái))生成的Makefile是只適用于Linux平臺(tái)的。
(注:我試過在"工具"->"選項(xiàng)"中修改該構(gòu)建套件生成的Makefile的類型,但是不管選擇哪種Makefile類型,生成的Makefile中都是cp而不是copy。)
于是考慮在Windows系統(tǒng)中搭建虛擬Linux環(huán)境。
MSYS可以解決我的這個(gè)問題!
MSYS,即Minimal GNU(POSIX)system on Windows,是一個(gè)小型的GNU環(huán)境,包括基本的bash,make等等。與Cygwin大致相當(dāng)。
于是下載MSYS,安裝,然后將其bin路徑添加到系統(tǒng)Path環(huán)境變量中。
再次點(diǎn)擊Qt Creator的構(gòu)建按鈕,OK,成功構(gòu)建!
最后點(diǎn)擊運(yùn)行,可以選擇安裝到Android模擬器或是真機(jī),安裝apk后可以看到和Windows平臺(tái)上界面類似的Android界面:

到此,Qt for Android開發(fā)環(huán)境搭建以及測(cè)試全部完成!

浙公網(wǎng)安備 33010602011771號(hào)