2013年7月14日 星期日

打造 qt 5.1 for android 開發環境

the 1st edition: 20130714
the 2nd edition: 20160303

用 qt 來開發 android app 的支援已經有一陣子, 但我期待著 qt 官方的版本, 我是個有耐心的開發者, 終於讓我等到 qt 5.1 官方的版本。

但是該怎麼開始呢?照著這篇裝很多東西:
http://doc-snapshot.qt-project.org/qt5-stable/qtdoc/android-support.html
在 qtcreator 設定好這些路徑。

執行
adt-bundle-linux-x86-20130522/sdk/tools/android
安裝 android 2.3.3 (api 10)

download for android version.
http://qt-project.org/downloads

選 project android arm gcc 4.4.3



這比之前的版本設定的東西應該還更簡單, but, 如果你夠幸運的話才是這樣的結果。中途遇到很多小問題, 陸續亂 try, 總算有個結果。

我試過好幾個平台
  • ubuntu 10.04 64bit
  • debian 32bit
  • windows xp
遇到各式各樣的的小問題:
qtcreator 無法開啟:
strace 結果顯示卡在 clock_gettime
clock_gettime(CLOCK_MONOTONIC, {5315, 458918574}) = 0
clock_gettime(CLOCK_MONOTONIC, {5315, 459187882}) = 0
poll([{fd=3,   events=POLLIN}, {fd=6, events=POLLIN}, {fd=11, events=POLLIN}, {fd=13,   events=POLLIN}, {fd=16, events=POLLIN}, {fd=22, events=POLLIN}], 6,   169541) = 1 ([{fd=3, revents=POLLIN}])
read(3, "\1\0\0\0\0\0\0\0", 16)         = 8
clock_gettime(CLOCK_MONOTONIC, {5318, 204940484}) = 0
clock_gettime(CLOCK_MONOTONIC, {5318, 205176548}) = 0

Qt Creator 2.7.2:
http://qt-project.org/downloads
我自己 download 下載這版本, qt 5.1 裡頭的 qtcreator 不知道為什麼無法執行起來。

ant 無法正常工作:
http://stackoverflow.com/questions/17483682/qt-5-1-for-android-occurs-error-in-apache-ant/17538419#17538419

ant 和 jdk 並不容易搞定,交給 apt 就好, 我用 apt 安裝就沒遇到這問題了。
install jdk/ant:
sudo apt-get install openjdk-7-jre openjdk-7-jdk 
sudo apt-get install ant

模擬器:

有時候無法正常啟動模擬器執行程式, 很不穩定。

最後在 debian 32bit 環境成功:
uname -a
Linux debian-vm 3.9-1-686-pae #1 SMP Debian 3.9.8-1 i686 GNU/Linux

我已經很少用 IDE, 在 qtcreator 下, 直接按個 run 就通通搞定, 快樂是快樂, 不過 ide 下到底做了什麼事情, 不知道的感覺很不好。

稍微看了一下整個步驟, 大概就是用 ndk 編譯 qt 產生 .so, 然後 qtcreator 產生的 java 程式會使用 jni 來呼叫這個 .so, ant 會使用 qtcreator 產生的 build.xml 來完成剩下的步驟。我看了一下 build.xml, 要手工打造這個可能不容易, 看來還是需要 qtcreator。

ref: Java Native Interface(JNI) 簡介與教學

qtcreator option/android setting
這是 qtcreator 在 apt-get 後自己抓到的路徑:
ant location:  /usr/bin/ant
openjdk location: /usr/lib/jvm/java-7-openjdk-i386

這個沒什麼功能的程式占了 21.72 MB, 也很耗記憶體, 看來不太能用, 等 qt 5.2 了。

20130902 補充:

若是遇到這情形:
http://qt-project.org/forums/viewthread/29299

我的作法是選用 api 17 version 的 emulator。

使用以下指令可以將 apk 複製到 emulator 上。
./adb install -r /home/descent/app1/android/bin/App1-debug-unaligned.apk
ref: http://developer.android.com/tools/help/adb.html

我實在不喜歡操作 qtcreator 這個大怪物, 使用以下 command line 編譯產生 app1.apk:

export ANDROID_NDK_ROOT=/home/descent/android-dev/android-ndk-r8e
~/android-dev/qt51/5.1.0/android_armv7/bin/qmake ~/app1/app1.pro
ant clean debug

上傳到 emulator:
descent@descent-u:platform-tools$ ./adb devices
List of devices attached
emulator-5554    device

./adb install -r ~/app1/android/bin/App1-debug.apk
2620 KB/s (671473 bytes in 0.250s)
pkg: /data/local/tmp/App1-debug.apk
Success

qt 5.X alpha 出了, 來試試: qt 5.4 alpha for android

沒有留言:

張貼留言

使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。

我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。