JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。它使得Java虚拟机内部运行的Java代码能够与其它编程语言(C&C++)编写的应用程序和库进行交互操作.
1.使用Android Studio新建一个项目
2.新建JniUtils类并实现native方法
public class JniUtils {
public static native String sayHello();
}
3.生成.h文件
1. 点击Build -> Clean Project
2.点击Build -> Rebuild Project
3.打开Android Studio 的Terminal并进入app/build/intermediates/classes/debug目录
cd app/build/intermediates/classes/debug
4.输入javah -jni <包名>.<类名>
javah -jni com.coolke.helloworld.JniUtils
5.在app/main目录下新建jni目录,并将之前生成的.h文件剪切到该目录下
4.配置jni开发的相关设置
1.在gradle.properties文件末尾添加android.useDeprecatedNdk=true
2.在build.gradle文件的defaultConfig括号内添加如下内容
ndk {
moduleName "hello" //生成的so名字
abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库,目前可有可无。
}
3.配置完毕后,点击Build -> Rebuild Project
4.在jni目录下新建.c文件,文件名随意
#include <jni.h>
//
// Created by coolke on 16-6-4.
//
JNIEXPORT jstring JNICALL Java_com_coolke_helloworld_JniUtils_sayHello(JNIEnv *env, jclass obj)
{
return (*env)->NewStringUTF(env,"hello");
}
C问文件建好后点击Build -> Rebuild Project,此时JniUtils类里就不会报红色了
5.在JniUtils类中加入加载库的代码
static {
System.loadLibrary("hello");
}
6.使用
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toast.makeText(this,JniUtils.sayHello(),Toast.LENGTH_SHORT).show();
}
}