一、JNI基础介绍
JNI is the Java Native Interface. It defines a way for managed code (written in the Java programming language) to interact with native code (written in C/C++).
JNI(Java本地接口):定义一种方式,使得Java代码能与C代码或者Dynamic Shared Libraries(动态共享库)进行交互。
调用方式:
C代码通过编译生成一个.so动态共享库,供java代码调用。
二、NDK开发介绍
NDK 是 Google为Android提供做C/C++代码开发的工具包,包含GCC的编译器以及各个平台(arm,X86,MIPS)的相关头文件,交叉编译的一些平台相关文件等。可在google官网上下载。
1、Eclipse配置下载的NDK资源包位置
解压下载的NDK包,android-ndk-r9b-windows-x86.zip
Preferences——>Android——>NDK,配置ndk所在位置
2、开发使用Demo
new一个普通Android工程TestJni;
右键项目,Android Tools——>Add Native Support,输入想要生成动态库名字:TestJni;
此时,会多出一个jni文件夹,包括一个TestJni.c和Android.mk文件。
Android.mk 配置编译相关动作,内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := TestJni
LOCAL_SRC_FILES := TestJni.c
include $(BUILD_SHARED_LIBRARY)
注:
BUILD_SHARED_LIBRARY:表示编译目标为动态共享库,即生成.so文件
LOCAL_MODULE:编译目标名
LOCAL_SRC_FILES:编译源文件
TestJni.c即本地C代码,本例中只加了一个Hello字串的返回,此方法名的定义,为了使得Java代码能够找到相应的native代码,其规范为:Java+包名+class+Method,否则找不到。
当然可以有另外一种方法映射的途径,可以实现java到C方法的映射,在此不详细介绍了。
1. jstring Java_com_pingtech_testjni_TestJni_sayHello( JNIEnv* env,
2. jobject thiz )
3. {
4. return (*env)->NewStringUTF(env, "Hello from JNI !");
5. }
3、JNI java代码
1. public class TestJni{
2. public static native String sayHello();
3. static{
4. "TestJni");
5. }
6. }
使用静态代码块,首先加载TestJni.so 动态共享库,sayHello为C中本地方法,前面加一个native修饰符即可。这个我们直接可以通过TestJni.sayHello();在Java代码中调用C代码了。
4、编译运行
Project build all,可检测本地代码错误,生成.so库(lib/armeabi下,这个对于arm平台,当然可以通过配置编译出其他平台的)。
标签:NDK,Java,代码,介绍,编译,TestJni,Android From: https://blog.51cto.com/u_16112859/6282452