ndk-build

轉自 http://blog.csdn.net/xiangjai/article/details/8712034


ndk相關

ndk編譯so環境配置

1.下載安裝cygwin,All->Devel其中包括gcc g++ make等
2.把NDK放到cygwin\home目錄下
3.進入這個目錄cygwin\home\Administrator對bash­_profile文件進行配置;
對該文件進行編輯,在文件最後添加如下命令後NDK=/cygdrive/c/cygwin/home/android-ndk-r7
4.源碼進行編譯 $NDK/ndk-build

5.生成頭文件 javah -jni com.android.gl2jni.GL2JNILib


javah 使用(Javah生成JNI頭文件)

C:/Users/archfree>javah 
用法:javah [選項] <類>

其中 [選項] 包括:

        -help                 輸出此幫助消息並退出 
        -classpath <路徑>     用於裝入類的路徑 
        -bootclasspath <路徑> 用於裝入引導類的路徑 
        -d <目錄>             輸出目錄 
        -o <文件>             輸出文件(只能使用 -d 或 -o 中的一個) 
        -jni                  生成 JNI樣式的頭文件(默認) 
        -version              輸出版本信息 
        -verbose              啓用詳細輸出 
        -force                始終寫入輸出文件

使用全限定名稱指定 <類>(例

首先先要編譯我們的android項目,因爲javah算是一個反編譯工具,需對編譯後的文件使用。由於我們編譯後的文件是默認放在android項目目錄下的bin目錄的。於是我們打開cmd

cd C:\cygwin\home\AndroidJrtp\bin\classes

假設工程目錄下有bin文件夾,bin存放編譯好的class文件; 

在bin目錄下,

進入項目目錄下的bin目錄然後輸入

javah  -jni   MAndroidJrtp.Transport.LoadJrtp   (MAndroidJrtp.Transport爲命名空間 LoadJrtp類名)

在jni目錄下生成了:android_serialport_SerialPort.h

注:如生成失敗可進入bin\classes目錄


ndk-build出錯,錯誤以及解決辦法如下   

    用NDK編譯jni目錄下的文件了,我的系統是Ubuntu10.04,NDK版本是android-ndk-r7b。

       切換到工程的jni目錄下執行:ndk-build(ndk-build的路徑已經添加到系統路徑了,如果沒有添加,需要指定完整路徑),直接報一下錯誤:

[html] view plaincopy
  1. Android NDK: There is no Android.mk under /home/helei/workspace/raydroid/jni/jni      
  2. Android NDK: If this is intentional  please define APP_BUILD_SCRIPT to point     
  3. Android NDK: to a valid NDK build script.      
  4. /home/helei/android_toolchain/android-ndk-r7b/build/core/add-application.mk:143: *** Android NDK: Aborting...    .  Stop.  
解決辦法:修改jni目錄下的Application.mk文件中:APP_PROJECT_PATH := $(call my-dir)這一行,將其修改爲:APP_PROJECT_PATH := $(call my-dir)/..  。

       再次執行:ndk-build,得,錯誤又來了,如下:

[html] view plaincopy
  1. Android NDK: /home/helei/workspace/raydroid/jni/../jni/Android.mk:silkcommon: LOCAL_MODULE_FILENAME must not contain a file extension      
  2. /home/helei/android_toolchain/android-ndk-r7b/build/core/build-static-library.mk:29: *** Android NDK: Aborting    .  Stop.  
很明顯在編譯silkcommon這個靜態庫的時候出錯了。

解決辦法:打開jni目錄下的Android.mk文件,在如下代碼位置:

[html] view plaincopy
  1. SILK     :silk  
  2. LOCAL_MODULE    :silkcommon  
  3. LOCAL_SRC_FILES :=  $(SILK)/src/SKP_Silk_A2NLSF.c \  
  4.     $(SILK)/src/SKP_Silk_CNG.c \  
  5.     $(SILK)/src/SKP_Silk_HP_variable_cutoff_FIX.c \  

之前添加:include $(CLEAR_VARS), 修改之後爲:

[html] view plaincopy
  1. include $(CLEAR_VARS)  
  2. SILK     :silk  
  3. LOCAL_MODULE    :silkcommon  
  4. LOCAL_SRC_FILES :=  $(SILK)/src/SKP_Silk_A2NLSF.c \  
  5.     $(SILK)/src/SKP_Silk_CNG.c \  

錯誤3

[html] view plaincopy
  1. Compile++ thumb  : speex_jni <= speex_jni.cpp  
  2. H:/workspace/SipUA/jni/../jni/speex_jni.cpp:26:25: fatal error: speex/speex.h: No such file or directory  
  3. compilation terminated.  
  4. /cygdrive/h/android/android-ndk-r8/build/core/build-binary.mk:255: recipe for target `/cygdrive/h/workspace/SipUA/obj/local/armeabi/objs/speex_jni/speex_jni.o' failed  
  5. make: *** [/cygdrive/h/workspace/SipUA/obj/local/armeabi/objs/speex_jni/speex_jni.o] Error 1  



解決辦法:把jni文件夾中的speex-1.2rc1/include/speex文件夾拷貝到jni目錄下

ndk-build編譯成功~~~~



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章