Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 開發入門 >> Android平台Qt開發入門教程

Android平台Qt開發入門教程

編輯:開發入門

很多人會問,android平台可以不使用Java開發應用程序??

我做Android平台native開發之前,也有這麼想過,但是我又想,底層系統全是c/c++代碼,用c/c++開發Android平台程序是可能的,只是需要使用系統非公開的API(就是android源代碼,而非NDK裡面提供的頭文件),比如libui和skia。

好了,由於我的工作是把C++中間件移植到Android平台,所以會對Qt for android這個項目比較了解,畢竟國內做這些的還比較少,所以需要參考android-lighthouse如何解決的文字顯示,圖形,鍵盤,觸摸屏事件等等。

言歸正傳,我們開始今天的教程: 在android平台開發Qt應用程序。

前提:
  • 你的系統必須是Linux,或者Mac OS X。在Windows平台使用cygwin開發會遇到問題。
  • 你首先需要下載android-ndk-r5或以上版本,android-sdk-r8或以上版本。
  • 然後下載好android-lighthouse, 這個就是android平台的Qt版本,國外個人移植的,nokia官方是不會發布這樣的版本的。git軟件庫地址:git://gitorious.org/~taipan/qt/android-lighthouse.git
  • 當然你還可以下載整合了android平台的qtcreator, 軟件庫地址:git://gitorious.org/~taipan/qt-creator/android-qt-creator.git  這樣你可以直接在qtcreator裡面開發測試android應用程序,這裡有個視頻介紹qtcreator開發android應用程序(被牆了,可以用VPN或proxy訪問): http://www.youtube.com/watch?v=VU_zPnQrM6E

下載,編譯android-lighthouse:
  • 打開終端,輸入"git clone git://gitorious.org/~taipan/qt/android-lighthouse.git",便開始下載android-lighthouse的源碼。下載好後,android-lighthouse目錄結構如下圖:
android-lighthouse source tree 2011-1-15 22:24 上傳下載附件 (69.07 KB)
android-lighthouse source tree

  • 下載android-qtcreator, 在終端中輸入"git clone git://gitorious.org/~taipan/qt-creator/android-qt-creator.git",開始下載;如果你不想使用圖形界面開發Qt應用程序,你可以不用下載,下面是我通過打包下載的qtcreator 2.1 for android的文件目錄結構,壓縮包總共21M.
  1. arIEs@uu3g:/wp/qt-creator-android-qt-creator$ ls
  2. dist  HACKING             LICENSE.LGPL   qtcreator.pro  scripts  src
  3. doc   LGPL_EXCEPTION.TXT  qtcreator.pri  README         share    tests
復制代碼
  • 然後我們修改以下環境變量,開始編譯android-lighthouse:

       1. androidconfigbuild.sh文件, 把ANDROID_NDK_ROOT, ANDROID_NDK_HOST, ANDROID_NDK_TOOLCHAIN_PREFIX等等這5個變量安裝你下載的android-ndk進行修改,比如下面是我自己電腦上面設置的變量:
  1. export ANDROID_NDK_ROOT=/opt/android-ndk-r5
  2. export android_NDK_HOST=Linux-x86
  3. export ANDROID_NDK_TOOLCHAIN_PREFIX=arm-Linux-androideabi
  4. export android_NDK_TOOLCHAIN_VERSION=4.4.3
  5. export ANDROID_NDK_PLATFORM=android-8
復制代碼       2. mkspecs/android-g++/qmake.conf文件,把NDK_ROOT, NDK_HOST,NDK_TOOLCHAIN_PREFIX, ANDROID_PLATFORM, NDK_TOOLCHAIN_VERSION按照你下載的android-ndk進行修改,比如我使用的是x86平台的android-ndk-r5(非64位系統),我修改後的mkspecs/android-g++/qmake.conf文件如下圖所示:
qmake.conf 2011-1-15 22:24 上傳下載附件 (68.35 KB)
qmake.conf

  • 做好以上2個文件的修改後,我們就開始編譯android-lighthouse,注意androidconfigbuild.sh最後有一個make的指令,你可以去掉他,自己手動輸入,或者現在修改,注意最好充分利用你的多核CPU,我2核的CPU,我就make -j2了,如果你是4核的,你最好make -j4,這樣我想如果3GHz的CPU,最多1個小時就可以編譯好android-lighthouse.修改好後,運行
  1. ./androidconfigbuild.sh
復制代碼
       然後就等待結果,如果你設置的是手動輸入make,你需要在config完成之後輸入make自行編譯。
       編譯結束後,輸入
  1. sudo mkdir /data/local/qt
  2. sudo make install
復制代碼
       android-lighthouse默認會安裝到/data/local/qt目錄下。

安裝qt動態庫:

  • 手機:首先確保你的手機有足夠大的空間安裝這些動態庫(全部安裝需要200M的空間),其中QtXML有50M, QtGui有90M,QtCore有20多M。這些都是帶調試信息的動態庫。(2011年1月20日注:其實不需要這麼大的空間,strip過後的library只需要10多M就可以了,我原來拷貝的所有library是沒有strip過的)
  • 模擬器:模擬器默認啟動會把分區大小設置為64M,這裡是不夠用的,我們需要手動設置分區大小,我這裡設置為256M。首先用android list列出你的AVD列表,如下圖
android avd list 2011-1-15 22:22 上傳下載附件 (114.34 KB)
android avd list
        然後使用emulator -avd <avd_name> -partition-size <size_in_megabyte>指定分區大小並啟動模擬器,如下所示,我啟動的是android2.2, 分區大小為256M的AVD:
  1. arIEs@uu3g:~$ emulator -avd android2.2 -partition-size 256
復制代碼在模擬器裡面查看分區大小:
df in android emulator 2011-1-15 22:22 上傳下載附件 (69.95 KB)
df in android emulator
  • 這裡我們使用模擬器來做例子,使用adb -e push把所有Qt庫push到模擬器中,你也可以使用android-lighthouse自帶的腳本來完成這個任務,push_qt_libs.sh腳本內容如下(注意修改你的push_qt_libs.sh裡面的strip工具路徑):
  1. #!/bin/sh

  2. adb shell rm -r /data/local/qt || exit 0
  3. rm -fr al
  4. mkdir al
  5. cp -a lib/*.so* al/

  6. /opt/android-ndk-r5/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-Linux-androideabi-strip --strip-unneeded al/*

  7. adb push al /data/local/qt/lib
  8. adb push imports /data/local/qt/imports
  9. adb push plugins /data/local/qt/plugins
復制代碼

運行Qt應用程序:
  • 以上步湊結束後,我們還需要修改一些shell腳本才可以正常的工作,android-lighthouse main trunk裡面的shell腳本有一些bug,這裡我們就動手開始改他, 在android-lighthouse根目錄下面找到create_android_lighthouse_project.sh,打開,根據你android-ndk的版本路徑, 修改以下內容:
  1. ......
  2. #修改以下2行,指向你的android-sdk和android-lighthouse源碼路徑
  3. SDK_ROOT=/home/buus/dev/android-sdk-Linux_x86
  4. LIGHTHOUSE_ROOT=/home/buus/dev/android-lighthouse
  5. ......
  6. #我的android-sdk裡面,adb在platform-tools目錄下面,所以修改為$SDK_ROOT/platform-tools/adb
  7. \$SDK_ROOT/tools/adb install -r bin/\$PROJECT_NAME-debug.apk
  8. ......
  9. #同上
  10. \$SDK_ROOT/tools/adb shell am start -n org.\$PROJECT_NAME.qt/.QtMain
  11. ......
  12. #同上
  13. \$SDK_ROOT/tools/adb install -r bin/\$PROJECT_NAME-debug.apk
復制代碼
       這些路徑設置好後,我們再修改一些可能存在的bug, 把此腳本中的如下代碼
  1. cp $LIGHTHOUSE_ROOT/examples/android/QtAnimatedtiles/AndroidManifest.xml $J_PRO/androidManifest.XML
  2. cp -r $LIGHTHOUSE_ROOT/src/android/java/src/com $PROJECT_NAME-Java/src
  3. sed -i "s/animatedtiles/$PROJECT_NAME/g" $J_PRO/androidManifest.XML
  4. cp \$Q_PRO/lib\$PROJECT_NAME.so* \$J_PRO/libs/armeabi     #我們編譯cpp代碼時是生成可執行文件,不是生成動態庫
復制代碼
       替換為
  1. cp $LIGHTHOUSE_ROOT/src/android/Java/AndroidManifest.xml $J_PRO/androidManifest.XML
  2. cp -r $LIGHTHOUSE_ROOT/src/android/java/src/* $PROJECT_NAME-Java/src
  3. cp -r $LIGHTHOUSE_ROOT/src/android/java/res/* $PROJECT_NAME-Java/res
  4. sed -i "s/animatedtiles/$PROJECT_NAME/g" $J_PRO/src/org/$PROJECT_NAME/qt/QtMain.Java
  5. sed -i "s/calculator/$PROJECT_NAME/g" $J_PRO/src/com/nokia/qt/android/QtActivity.Java
  6. sed -i "s/example.name/$PROJECT_NAME.qt/g" $J_PRO/androidManifest.XML
  7. sed -i "s/Application name/$PROJECT_NAME/g" $J_PRO/res/values/strings.XML
  8. cp \$Q_PRO/\$PROJECT_NAME \$J_PRO/libs/armeabi/lib\$PROJECT_NAME.so #我們編譯cpp代碼時是生成可執行文件,不是生成動態庫,但這裡必須以動態庫的形式加載
復制代碼       注意其中的幾個"sed", 你所需要替代的源對象可能和這裡的不一樣,請根據你的情況做適當修改。
        修改這些主要是由於example裡面的代碼沒有及時更新,並且我們還需要res裡面的libs.XML文件,然後保存,這裡有一份我修改好的,針對2011年1月份的trunk做的修改。
create_android_lighthouse_project.sh (5.49 KB, 下載次數: 110) 2011-1-15 22:32 上傳下載次數: 110
下載積分: 電量 -1
  • 以上步湊結束後,我們開始拷貝一個例子程序來開始我們的Qt for android之旅。拷貝examples/widgets/calculator整個目錄到android-lighthouse根目錄下面,然後使用"create_android_lighthouse_project.sh"創建此c++代碼對應的Java代碼,我們在終端裡面運行
  1. ./create_android_lighthouse_project.sh -n calculator
復制代碼
  • 命令結束後,會在當前目錄產生calculator-cpp和calculator-Java 2個目錄,以及build.sh, creatorbuild.sh, run.sh等工具腳本。這裡需要注意,calculator-cpp目錄下面的源代碼是stub程序,就是什麼事情都不做作的代碼,我們需要把這個目錄下面的所有文件都刪除掉,然後把calculator目錄下面的所有文件拷貝到calculator-cpp目錄下,然後再運行(在這裡你的模擬器必須啟動,或者手機已經正確連接上電腦了):
  1. ./build.sh
復制代碼
        我執行以上幾個步湊後的終端:
  1. arIEs@uu3g:/wp/android-lighthouse$ rm calculator-cpp/* -rf
  2. arIEs@uu3g:/wp/android-lighthouse$ cp calculator/* calculator-cpp/
  3. arIEs@uu3g:/wp/android-lighthouse$ ./build.sh
  4. /opt/android-ndk-r5/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-Linux-androideabi-g++ -c -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -fpic -mthumb -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -DANDROID -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -DQT_NO_QWS_TRANSFORMED -I/wp/android-lighthouse/src/3rdparty/android/precompiled/android-8/arch-arm/include -Os -g -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -Wall -W -D_REENTRANT -DQT_NO_CORESERVICES -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I../mkspecs/android-g++ -I. -I../include/QtCore -I../include/QtNetwork -I../include/QtGui -I../include -I.moc/release-shared -I/opt/android-ndk-r5/platforms/android-8/arch-arm/usr/include -I/opt/android-ndk-r5/sources/cxx-stl/gnu-libstdc++/include -I/opt/android-ndk-r5/sources/cxx-stl/gnu-libstdc++/libs/armeabi/include -o .obj/release-shared/button.o button.cpp
  5. .......
  6. -obfuscate:

  7. -dex:
  8.      [echo] Converting compiled files and external librarIEs into /wp/android-lighthouse/calculator-Java/bin/classes.dex...

  9. -package-resources:
  10.      [echo] Packaging resources
  11.      [aapt] Creating full resource package...

  12. -package-debug-sign:
  13. [apkbuilder] Creating calculator-debug-unaligned.apk and signing it with a debug key...

  14. debug:
  15.      [echo] Running zip align on final apk...
  16.      [echo] Debug Package: /wp/android-lighthouse/calculator-Java/bin/calculator-debug.apk

  17. BUILD SUCCESSFUL
  18. Total time: 8 seconds
  19. 652 KB/s (304878 bytes in 0.456s)
  20.     pkg: /data/local/tmp/calculator-debug.apk
  21. Success
復制代碼
  • 到這裡,我們就成功編譯並安裝好了Qt版的calculator了,把logcat打開,我們試一試運行這個calculator,並看一看android log的輸出,另起一個終端,裡面輸入
  1. adb logcat
復制代碼
  • 由於run.sh有bug,所以我們就不用這個腳本來啟動calculator,打開android模擬器或者手機的軟件列表,找到名為calculator的應用程序,點擊就可以運行了,如下圖(左面終端裡面是logcat輸出的log信息):
Qt calculator run on android 2011-1-15 22:23 上傳下載附件 (317.18 KB)
Qt calculator run on android

用鼠標點擊下這個計算器試試效果如何。
以後我們便可以按照以上步湊創建自己的Qt應用程序了。

作者: ArIEs @ 米狗族
網站: http://www.meegozu.com/thread-1199-1-1.Html
歡迎轉載,轉載請保留以上信息。


補充: 如果按照此教程實驗出現問題可以參考這裡http://www.meegozu.com/thread-1155-1-1.Html
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved