android JNI 使用 for mac

使用jni實現Java調用C代碼,步驟:html

1,下載ndk,連接:http://developer.android.com/tools/sdk/ndk/index.html;解壓 ,java

2,若是是windows系統,須要安裝Cygwin工具,這是window下模擬Linux編譯環境的工具(由於Android內核就是Linux);若是windows系統的同窗就去找安裝這個工具的教程;android

3,若是是Linux系統或者mac系統,就直接配置NDK環境變量(我是mac系統,在這裏就介紹mac系統的了),和配置adb環境變量同樣,將ndk解壓路勁加入到環境變量文件中,而後在終端中就能夠直接編譯了;windows

4,建立一個Android project,在.java文件中定義一個native方法:
工具

public native String  fromeC();

5,在項目根目錄下建立一個jni文件夾,在這個文件夾下建立一個.c文件,用來實現咱們定義的native方法;代碼以下:ui

#include <jni.h>
#include <stdio.h>
/*
 * 把Java的方法跟C的方法作個對應,必定要符合這些命名規則,才能java才能找到對應的c代碼
 * type:Java
 * PackageName:com_baiyou_mp3ecode    這個類所在的包
 * ClassName:   JNIMp3Encode  native方法所在的類
 * MethodName:    fromC
 * obj:表明調用C代碼的Java對象
 */
jstring Java_com_baiyou_mp3ecode_JNIMp3Encode_fromC
(JNIEnv *env, jobject obj)
{
	//c代碼
	char* cstr = "hello from c";
	return (**env).NewStringUTF(env,cstr);
}

/*
 * type:Java
 * Package:com_baiyou_mp3ecode
 * Class:     JNIMp3Encode
 * Method:    destroy
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_baiyou_mp3ecode_JNIMp3Encode_destroy
(JNIEnv *env, jobject obj)
{
	lame_close(lame);
}

6,在jni目錄下建立Android.mk文件,定義一些規範:代碼以下:spa

LOCAL_PATH := $(call my-dir)
 
include $(CLEAR_VARS)
 
#編譯後的c可執行性文件叫啥名
LOCAL_MODULE    	:= JNIMp3Encode

#須要被編譯的C源文件
LOCAL_SRC_FILES 	:=JNIMp3Encode.c

LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)

7,打開終端,切換到jni目錄下編譯.c文件,鍵入 ndk-build  ;code

8,編譯完成以後,在根目錄會生成libs文件夾,裏面的armeabi子文件夾中會有JNIMp3Encode.so 庫。htm

9,在JNIMp3Encode定義了native方法的類中,用靜態代碼塊加入.so類庫:以下:對象

public native String  fromeC();;
	
	static{
		System.loadLibrary("JNIMp3Encode");//這個名字要和在Android.mk文件中定義的LOCAL_MODULE    	:= JNIMp3Encode這個名字同樣
	}

10,而後在其餘.java文件中就能夠調用fromeC();這個本地方法了;

相關文章
相關標籤/搜索