抽了一個周末研究Qt5.1.0Beta的安卓開發環境該怎麼搭建。兩天時間過去了,也算是有些小成果吧,在這裡給大家分享分享。
首先讓我們看看Qt5.1.0Beta的新特性。除了一些模塊內大大小小的更改外,我們還發現了它可以支持靜態編譯和安卓和iOS構建目標的支持。靜態編譯這部分先放在一邊,我們來看看Qt5.1.0是如何支持安卓開發環境的。
在此聲明,此過程繁瑣,若想用此制作軟件產品,還希望大家再等到Qt5.2的穩定版發布。此教程僅適用於Linux操作系統,我使用的版本是Ubuntu 13.04。
按照qt-project裡面的指示,我們需要下載安卓的SDK,NDK,Apache的Ant,以及OpenJDK。安卓的SDK和NDK是在構建Qt安卓版本必須的開發包,在make階段需要用到SDK中的jar包和tools,需要用到NDK中的頭文件和源文件以實現對QtAndroid插件的封裝。而OpenJDK和Ant則是在應用程序打包成apk的時候必須用到的。為了方便大家,我把下載地址放出來。
安卓SDK,這裡我下載了ADT,裡面附帶了Eclipse和SDK,Eclipse請無視掉吧。
安卓NDK,
OpenJDK,在Ubuntu下可輸入sudo apt-get install openjdk-6-jre
Ant。
不要下載二進制包,我們要自己編譯,所以我們需要下載源碼包。這裡給出了鏈接,以後鏈接失效了,還可以在這裡查找。
本來解壓什麼的應該不是什麼問題,但在後面階段出現了莫名的^M符號,這時我開始懷疑是不是解壓這一步出錯了……
其實開始解壓是使用GUI的歸檔管理器來進行的,默認情況下會出現文本編碼的問題。所以在解壓縮的時候,為了防止將源碼的文本文件更改文本格式,需要在控制台下手動解壓。假設已進入“下載”文件夾,壓縮包名為Qt5.1.0Beta.zip,解壓的位置是~/Programs/Qt5.1.0ForAndroid,那麼需要這麼寫:
unzip -a Qt5.1.0Beta.zip -d ~/Programs/Qt5.1.0ForAndroid
取消qt-everywhere-opensource-src-5.1.0-beta1文件夾,直接將其中的內容放在Qt5.1.0ForAndroid中,我喜歡簡單的文件夾名。
解壓完畢後,進入~/Programs/Qt5.1.0ForAndroid文件夾,這裡開始了configure階段了。我傾向於解壓在哪兒,qmake就在哪兒,這樣可以節省make install步驟,但是需要的同學可以試著加上-prefix參數,設置安裝的位置。這裡我就按照官網上的步驟順勢寫出configure了。
./configure -developer-build -xplatform android-g++ -nomake tests -nomake examples -android-ndk 你的NDK路徑 -android-sdk 你的SDK路徑 -android-ndk-host 是32位Linux操作系統就填linux-x86,64位就填linux-x86_64 -skip qttranslations -skip qtwebkit -skip qtserialport -skip qtwebkit-examples
以下是我的configure參數
./configure -developer-build -xplatform android-g++ -nomake tests -nomake examples -android-ndk /home/jiangcaiyang/Programs/android-ndk-r8e -android-sdk /home/jiangcaiyang/Programs/adt-bundle-linux-x86-20130514/sdk -android-ndk-host linux-x86 -skip qttranslations -skip qtwebkit -skip qtserialport -skip qtwebkit-examples
如果大家默認都選開源的版本,那麼上面的參數中添加-opensource,可以減少詢問。
另外不可靜態編譯安卓版本,因為在鏈接自己寫的代碼的目標文件時會出現cannot find -lqandroid錯誤。看來qandroid還是必須要以插件的形式存在才行。
make階段的錯誤出現得最多,所以要格外重視。
如果沒有做准備工作,那麼make似乎也能進行,但是編譯的庫函數不完全,以至於無法在模擬器上運行apk程序。
為了防止找不到相關的路徑,需要添加兩個安卓環境變量。這裡直接在控制台上輸入:
export ANDROID_SDK_ROOT=/home/jiangcaiyang/Programs/adt-bundle-linux-x86-20130514/sdk
export ANDROID_API_VERSION=android-17
為了防止找不到javac等java編譯工具,需要在/etc/profile中添加JAVA_HOME環境變量:
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-i386
為了防止找不到dx工具和dx.jar包,需要將dx和dx.jar從adt-bundle-linux-x86-20130514/sdk/build-tools/android-4.2.2和adt-bundle-linux-x86-20130514/sdk/build-tools/android-4.2.2/lib中轉至/home/jiangcaiyang/Programs/adt-bundle-linux-x86-20130514/sdk/platform-tools中。(這裡以我安裝的路徑為例)
為了防止出現QtMultimedia for Android requires API level 11錯誤,需要將$${QT_DIR}/qtmultimedia/qtmultimedia.pro這條語句:
!qtCompileTest(android):error("QtMultimedia for Android requires API level 11")
使用#號注釋掉。
如果一切順利,將會看不到任何PROJECT ERROR。