Android C++開發(fā)環(huán)境搭建Android 開發(fā)環(huán)境搭建安裝JDK
JDK的環(huán)境變量配置
安裝 Eclipse
SDK 4.0安裝安裝方法可以參考http://wenku.baidu.com/view/2b2aa341b307e87101f6960a.html 直接解壓android-sdk.rar壓縮包安裝,或者到http://developer./sdk/index.html下載的android-sdk。 解壓后打開SDK Manager.exe可以看到如下的界面; 左側(cè)是我們要安裝的SDK目錄,如果你的網(wǎng)絡(luò)夠快而且空間不是特別少的話,選擇Accept All,然后Install,開始漫長的在線安裝,之后出現(xiàn)下面界面: 這樣SDK的安裝已經(jīng)基本完成,由于在tools目錄下有許多我們?cè)诿钚邢聢?zhí)行的命令,我們要進(jìn)行環(huán)境變量的添加,就是在Path中添加我們的tools目錄: Eclipse中安裝配置ADT(Android Development Tools)插件
下載完成后點(diǎn)擊I accept the terms of the license ,之后點(diǎn)擊Finish進(jìn)行安裝 重新啟動(dòng)Eclipse, 重啟之后我們會(huì)發(fā)現(xiàn)Eclipse工具欄中多了 一些東西這就是我們安裝插件的效果。此時(shí)如果點(diǎn)擊模擬器(向下箭頭的按鈕)的按鈕的話,會(huì)報(bào)錯(cuò),因?yàn)槲覀冞€沒有對(duì)模擬器進(jìn)行配置。配置方法:Windows-->Preferences-->Android,在SDK Location中添加最早解壓出來的那個(gè)壓縮包的路徑android-sdk-windows: 隨后OK。此時(shí)再點(diǎn)擊模擬器的按鈕
然后Create AVD就可以了。隨后選中模擬器的版本,點(diǎn)擊Start就會(huì)出現(xiàn)模擬出來的手機(jī)界面了:
在eclipse中集成c/c++開發(fā)環(huán)境,安裝CDT注意 :自己下載的CDT組件可能配置不完整,建議采用eclipse提供的C++開發(fā)方案里面的 CDT,然后把該方案里面所有CDT的 features和plugins復(fù)制出來我用的是http://www./downloads/packages/eclipse-ide-cc-developers/heliossr2 下載后,直接解壓,然后運(yùn)行一下里面的eclipse,創(chuàng)建一個(gè) C++項(xiàng)目看能不能編譯成功,如果能就沒問題。然后把features和plugins 目錄下跟CDT有關(guān)的文件和目錄復(fù)制到裝有android開發(fā)環(huán)境的eclipse 的 features和plugins目錄下也可以采用那個(gè)自己下載CDT插件來安裝,不過可能造成配置錯(cuò)誤,后面無法debug。
下載安裝NDK參考資料
下載安裝cygwin由于NDK編譯代碼時(shí)必須要用到make和gcc,所以你必須先搭建一個(gè)linux環(huán)境, cygwin是一個(gè)在windows平臺(tái)上運(yùn)行的unix模擬環(huán)境,它對(duì)于學(xué)習(xí)unix/linux操作環(huán)境,或者從unix到windows的應(yīng)用程序移植,非常有用。通過它,你就可以在不安裝linux的情況下使用NDK來編譯C、C++代碼了。下面我們一步一步的安裝cygwin吧。
1)Install from Internet:直接從Internet上下載并立即安裝(安裝完成后,下載好的安裝文件并不會(huì)被刪除,而是仍然被保留,以便下次再安裝)。 2)Download Without Installing:只是將安裝文件下載到本地,但暫時(shí)不安裝。 3)Install from Local Directory:不下載安裝文件,直接從本地某個(gè)含有安裝文件的目錄進(jìn)行安裝。 l 以install方式下載整個(gè)cygwin的話,大小大概在1.7G左右,所以注定這是一個(gè)比較漫長的過程。特別是不能采用我們平時(shí)的下載工具,并且服務(wù)器在國外,更加劇了耗時(shí)的長度,請(qǐng)從第三步開始; l 以Install From Local Directory方式,下載Cygwin包,選擇安裝的目錄(如果已經(jīng)有了CygWin安裝包,強(qiáng)烈建議用這種方法);請(qǐng)從第七步開始。
5. 上一步是選擇安裝cygwin的目錄,這個(gè)是選擇你下載的安裝包所在的目錄,默認(rèn)是你運(yùn)行setup.exe的目 錄,直接點(diǎn)下一步就可以: 6. 此時(shí)你共有三種連接方式選擇: 1) Direct Connection:直接連接。 2) Use IE5 Settings:使用IE的連接參數(shù)設(shè)置進(jìn)行連接。 3) Use HTTP/FTP Proxy:使用HTTP或FTP代理服務(wù)器進(jìn)行連接(需要輸入服務(wù)器地址、端口號(hào))。 用戶可根據(jù)自己的網(wǎng)絡(luò)連接的實(shí)情情況進(jìn)行選擇,一般正常情況下,均選擇第一種,也就是直接連接方式。然后再點(diǎn)擊“下一步”; 7. 這是選擇要下載的站點(diǎn),我用的是http://mirrors.163.com/,速度感覺還挺快,選擇后點(diǎn)下一步。 8. 此時(shí)會(huì)下載加載安裝包列表 9. 建議全部安裝所有包,不然在以后編譯時(shí)會(huì)出現(xiàn)錯(cuò)誤,或者安裝開發(fā)NDK所需的文件包。Search是可以輸入你要下載的包的名稱,能夠快速篩選出你要下載的包。那四個(gè)單選按鈕是選擇下邊樹的樣式,默認(rèn)就行,不用動(dòng)。View默認(rèn)是Category,建議改成full顯示全部包再查,省的一些包被隱藏掉。左下角那個(gè)復(fù)選框是是否隱藏過期包,默認(rèn)打鉤,不用管它就行,下邊開始下載我們要安裝的包吧,為了避免全部下載,這里列出了后面開發(fā)NDK用得著的包:autoconf2.1、automake1.10、binutils、gcc-core、gcc- g++、gcc4-core、gcc4-g++、gdb、pcre、pcre-devel、gawk、make共12個(gè)包。 10. 然后開始選擇安裝這些包吧,點(diǎn)skip,把它變成數(shù)字版本格式,要確保Bin項(xiàng)變成叉號(hào),而Src項(xiàng)是源碼,這個(gè)就沒必要選了。 11. 下面測試一下cygwin是不是已經(jīng)安裝好了。 運(yùn)行cygwin,在彈出的命令行窗口輸入:cygcheck -c cygwin命令,會(huì)打印出當(dāng)前cygwin的版本和運(yùn)行狀 態(tài),如果status是ok的話,則cygwin運(yùn)行正常。 然后依次輸入gcc --version,g++ --version,make –version,gdb –version進(jìn)行測試(或,輸入make -v 和 gcc -v ),如果都打印出版本信息和一些描述信息,非常高興的告訴你,你的cygwin安裝完成了! 配置NDK環(huán)境變量
NDK=/cygdrive/e/android-ndk-r5 export NDK NDK這個(gè)名字是隨便取的,為了方面以后使用方便,選個(gè)簡短的名字,然后保存 PATH=$PATH:$NDK //記得設(shè)置路徑參數(shù)
測試用NDK來編譯程序
配置C/C++的編譯器
還有一種方法,就是用CDT自己的編譯配置來做,而不用新建Builder
在執(zhí)行程序處,把原來的 bash 改成 <你cygwin安裝路徑>\bin\bash ,后面 參數(shù) 跟 新建Builder 的 Arguments一樣比如 : c:\cygwin\bin\bash.exe --login -c "cd /cygdrive/d/android/ndk-r5/samples/hello-jni && $NDK/ndk-build" 因?yàn)閰?shù)可能很多,而參數(shù)本身就是一些linux的shell 命令,所以,可以采用把所有的shell命令寫到一個(gè)shell腳本文件,然后參數(shù)里面改用這個(gè)腳本文件的名字,比如--login -c " /cygdrive/d/android/ndk-r5/samples/hello-jni/build.sh" 其中 build.sh就是腳本文件的名字,build.sh 必須有執(zhí)行的權(quán)限, 可以用 chmod +x build.sh 來加這個(gè)權(quán)限,這個(gè)在執(zhí)行cygwin的終端窗口中執(zhí)行改變權(quán)限后用可以用 ls -l 來查看權(quán)限 //下面是我的腳本文件的格式 # 先切換到程序目錄 cd /cygdrive/d/android-ndk-r5/samples/hello-jni #設(shè)定一個(gè)編譯器輸出obj文件的目錄 objPath="obj/local/armeabi/objs-debug/hello-jni/" #驗(yàn)證obj目錄是否存在 if [ -d "$objPath" ]; then #刪除所有的0.d文件,不然在編譯錯(cuò)誤后,就無法再編譯了 rm -rf $objPath/*.o.d fi #設(shè)置是支持debug模式的 debug=true #開始真正調(diào)用NDK的編譯,開始編譯項(xiàng)目 $NDK/ndk-build C++ build 里面要去掉自動(dòng)生成makefile選項(xiàng),不然會(huì)無法編譯,根據(jù)以上的配置就可以很方便的在修改源代碼后,自動(dòng)編譯程序。 配置 NDK 調(diào)試配置調(diào)試環(huán)境比較麻煩,要有一些準(zhǔn)備
1) main 頁面,location 輸入 調(diào)試的程序名 比如 c:\cygwin\bin\bash.exe ,working directory 輸入c:\cygwin\bin\ 參數(shù) 輸入 --login -c "cd /cygdrive/d/android/ndk-r5/samples/hello-jni && ndk-gdb.eclipse --verbose" 這個(gè)參數(shù)的輸入方式跟 編譯器一樣ndk-gdb.eclipse 就是那個(gè)移除 GDBCLIEN 的 ndk-gdb文件--verbose 用來顯示詳細(xì)的調(diào)試處理信息
l 選擇 run 菜單--->debug configurations l 選擇C/C++ Attach to Application ,新建一個(gè)debug 配置,名字隨意起,我這里起 l main 頁面 C/C++ Application 選擇 項(xiàng)目錄下obj/local/armeabi 的app_process 文件,如D:\android-ndk-r5\samples\hello-jni\obj\local\armeabi\app_process,app_process 文件必須是在運(yùn)行一次ndk-gdb.eclkipse后才會(huì)出現(xiàn)在 main 頁面 最下面的GB選擇,選擇 select other,在彈出的GDB選擇中選中 use configuration specific settings 然后選中列表框中的standard create process launcher l debug頁面 debugger 選擇 gdbserver main gdb debug 選擇 NDk 的gdb 執(zhí)行文件,我這里是 D:\android-ndk-r5\toolchains\arm-linux-androideabi-4.4.3\prebuilt\windows\bin\arm-linux-androideabi-gdb.exe gdb command files 選擇 上面 項(xiàng)目錄下obj/local/armeabi 的 gdb配置文件,就是上面提到的gdb2.setup 比如 D:\android-ndk-r5\samples\hello-jni\obj\local\armeabi\gdb2.setup connection 頁面,type 選擇TCP port number 輸入5039 android 的gdbserver 是5039的端口
項(xiàng)目調(diào)試
運(yùn)行項(xiàng)目中會(huì)有install apk 以及啟動(dòng)調(diào)試信息 Installing HelloJni.apk... // 安裝程序包 HelloJni] Success! //安裝成功 HelloJni] Starting activity com.example.hellojni.HelloJni on device emulator-5554 //開始啟動(dòng) activity HelloJni] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.hellojni/.HelloJni } HelloJni] Attempting to connect debugger to 'com.example.hellojni' on port 8638 //debug
Android NDK installation path: /cygdrive/D/android-ndk-r5 Using default adb command: /cygdrive/d/Android/android-sdk-windows/platform-tools/adb ADB version found: Android Debug Bridge version 1.0.26 Using final ADB command: '/cygdrive/d/Android/android-sdk-windows/platform-tools/adb' Using auto-detected project path: . Found package name: com.example.hellojni ABIs targetted by application: armeabi Device API Level: 8 // Android 2.2 以后的平臺(tái)才支持遠(yuǎn)程調(diào)試 Device CPU ABI: armeabi Compatible device ABI: armeabi Found debuggable flag: true Found device gdbserver: /data/data/com.example.hellojni/lib/gdbserver Using gdb setup init: /cygdrive/d/android-ndk-r5/samples/hello-jni/libs/armeabi/gdb.setup Using toolchain prefix: /cygdrive/D/android-ndk-r5/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi- Using app out directory: /cygdrive/d/android-ndk-r5/samples/hello-jni/obj/local/armeabi Found data directory: '/data/data/com.example.hellojni' Found running PID: 306 ## COMMAND: /cygdrive/d/Android/android-sdk-windows/platform-tools/adb shell run-as com.example.hellojni lib/gdbserver +debug-socket --attach 306 Launched gdbserver succesfully. Setup network redirection ## COMMAND: /cygdrive/d/Android/android-sdk-windows/platform-tools/adb forward tcp:5039 localfilesystem:/data/data/com.example.hellojni/debug-socket Attached; pid = 306 //把 GDB server跟程序 PID 306掛鉤
Listening on sockaddr socket debug-socket
## COMMAND: /cygdrive/d/Android/android-sdk-windows/platform-tools/adb pull /system/bin/app_process D:/android-ndk-r5/samples/hello-jni/obj/local/armeabi/app_process 354 KB/s (5676 bytes in 0.015s) Pulled app_process from device/emulator. ## COMMAND: /cygdrive/d/Android/android-sdk-windows/platform-tools/adb pull /system/lib/libc.so D:/android-ndk-r5/samples/hello-jni/obj/local/armeabi/libc.so 75 KB/s (270068 bytes in 3.484s) Pulled libc.so from device/emulator. //啟動(dòng)成功
注意:C++調(diào)試由于是遠(yuǎn)程調(diào)試,相對(duì)還是比較慢 標(biāo)簽: Android ADT NDK CDT Cygwin |
|