Android-NDK編譯

 

(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文件生成的差很少..

相關文章
相關標籤/搜索