(2013-12-19 21:48:21 其實一切仍是先看看官網的好,亂百度浪費時間....html
http://developer.android.com/tools/sdk/ndk/index.html#Installing )java
(開始..這個文章只有最後的總結算筆記,其餘廢話)linux
話說移動設備交叉編譯還真是麻煩....android
看cocos2d-x 環境搭建 ,基本上都是推薦安裝 cygwin.windows
由於兩年前的幼稚經驗,對這個東西實在是內心畏懼,加上偶爾交叉編譯點東西都是用MingW,就進行了如下嘗試:app
1. 給MinGW環境變量加上NDK路徑eclipse
找到MinGW安裝目錄下的 /etc/profile ide
在最後加上這麼一句: 工具
export PATH="/e/T_GIT/android_dep/android-ndk-r8e:$PATH"
MinGW訪問驅動器用 「/」 開頭,而且沒有「:」 。對應的實際路徑是 :E:\T_GIT\android_dep\android-ndk-r8eui
在MinGW環境下輸入命令進行驗證:
ezhong@bj-ezhong ~ $ ndk-build Android NDK: Could not find application project directory ! Android NDK: Please define the NDK_PROJECT_PATH variable to point to it. /e/T_GIT/android_dep/android-ndk-r8e/build/core/build-local.mk:130: *** Android NDK: Aborting . Stop. ezhong@bj-ezhong ~
這樣就證實MinGW的NDK環境變量配置好了.
2. 編譯NDK sample :hello-jni
從 E:\T_GIT\android_dep\android-ndk-r8e\samples 下拷貝 hello-jni到任意目錄
好比個人是 E:\T_GIT\eclipse\hello-jni
MinGW中進入hello-jni目錄,執行ndk-build 命令:
ezhong@bj-ezhong /e/T_GIT/eclipse/hello-jni $ ls AndroidManifest.xml default.properties jni res src tests ezhong@bj-ezhong /e/T_GIT/eclipse/hello-jni $ ndk-build Gdbserver : [arm-linux-androideabi-4.6] libs/armeabi/gdbserver Gdbsetup : libs/armeabi/gdb.setup Cygwin : Generating dependency file converter script Compile thumb : hello-jni <= hello-jni.c SharedLibrary : libhello-jni.so Install : libhello-jni.so => libs/armeabi/libhello-jni.so ezhong@bj-ezhong /e/T_GIT/eclipse/hello-jni
hello-jni目錄下多了libs 、obj 兩個文件夾.
libs下有生成的so文件
3 編譯錯誤
將jni文件拷貝到一個eclipse生成的android項目下,再次調用ndk-build的時候出現以下錯誤
ezhong@bj-ezhong /e/T_GIT/eclipse/andTest1 $ ndk-build Invalid attribute name: package /e/T_GIT/android_dep/android-ndk-r8e/build/gmsl/__gmsl:512: *** non-numeric seco nd argument to `wordlist' function: ''. Stop. ezhong@bj-ezhong /e/T_GIT/eclipse/andTest1 $
查了些資料,居然有的這樣的解決方法:
http://blog.csdn.net/devilkin64/article/details/9144355
解決方法: 找到NDK中的這個__gmsl文件,並將其中第518行: int_encode = $(__gmsl_tr1)$(wordlist 1, ,$(__gmsl_input_int))修改成 int_encode = $(__gmsl_tr1)$(wordlist 1,$(words ),$(__gmsl_input_int))
不理解啊...
一樣一份jni代碼,放入一個工程就不行了?
http://blog.csdn.net/jiuyueguang/article/details/9465305 有提示..原來是 AndroidManifest.xml 搞怪.
去掉AndroidManifest.xml果真能夠編譯經過.
看到各個大神們的 dos2unix 、fromdos 等轉換工具 ,windows真是傷不起啊.
最後搜到個不多辦法的辦法..先把 AndroidManifest.xml挪走或者更名,編譯完再恢復...過高級了.
總結:
最激動人心的時刻到了....
以上都是廢話....
NDK自己有提供windows的ndk-build腳本...
只要將 安裝目錄 如「E:\T_GIT\android_dep\android-ndk-r8e」 設置到windows系統環境變量PATH中.
直接在CMD中,切入到目標目錄,ndk-build便可....
E:\T_GIT\eclipse\andTest1>ndk-build "Compile thumb : ejni <= ejni.c SharedLibrary : libejni.so Install : libejni.so => libs/armeabi/libejni.so E:\T_GIT\eclipse\andTest1>
太容易把本身繞死...
另: javah 找不到 android.app.Activity 用
-bootclasspath E:\T_GIT\android_dep\adt-bundle-windows-x86-20130717\sdk\platforms\android-17\android.jar
參數指定,貌似與直接用src下的 Java文件生成的差很少..