Android-NDK編譯


 

(2013-12-19  21:48:21 其實一切還是先看看官網的好,亂百度浪費時間....

http://developer.android.com/tools/sdk/ndk/index.html#Installing  )

(開始..這個文章只有最后的總結算筆記,其他廢話)

話說移動設備交叉編譯還真是麻煩....

 

看cocos2d-x 環境搭建 ,基本上都是推薦安裝 cygwin.

因為兩年前的幼稚經驗,對這個東西實在是心里畏懼,加上偶爾交叉編譯點東西都是用MingW,就進行了以下嘗試:

 

1.  給MinGW環境變量加上NDK路徑

      找到MinGW安裝目錄下的  /etc/profile 

  在最后加上這么一句: 

  export PATH="/e/T_GIT/android_dep/android-ndk-r8e:$PATH"

     MinGW訪問驅動器用 “/” 開頭,並且沒有“:” 。對應的實際路徑是 :E:\T_GIT\android_dep\android-ndk-r8e

     在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文件生成的差不多..

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM