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();这个本地方法了;

相关文章
相关标签/搜索