1.配置环境
1.在项目SDKLocation里面下载NDK
2. gradle.properties的文件末尾加上android.useDeprecatedNdk=true
2.java代码和C代码的编写步骤及过程
1.创建一个java类JNIUtils:
public class JNIUtils {
static {
system.loadLibrary("so库的名字")
}
//java调C中的方法都需要用native声明且方法名必须和c的方法名一样
public native String getString();
}
2.build 里面makeProject一下 就会看到在项目intermediates里面生成的class文件JNIUtils
接下来我们打开Terminal,进到项目的main目录下
运行 javah -d jni -classpath 加上上文中JNIUtils的绝对路径 :如图
3.如果你看到在main文件加下看到新创建的jni目录和名称命名的.h文件,就表示成功了
注:这个文件不用做任何修改 是自动生成的 我们需要写一个c的文件在这个生成的jni目录下
3.创建一个.c的文件 如上图 huazict.c:
#include "coffee08_com_test_jni_JNIUtils.h"
/**
*上边的引用标签一定是.h的文件名加后缀,方法名一定要和.h文件中的名称一样
*/
Java_coffee08_com_test_jni_JNIUtils_getString //必须是Java+包名+类名+方法
(JNIEnv *env,jobject obj){
return (env)->NewStringUTF("这是我测试的jni");
}
到了这里我们打开项目中的build.gradle 把项目对NDK的依赖加上
到这里配置工作已经基本完成我们做下测试:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = (TextView) findViewById(R.id.text);
textView.setText(new JNIUtils().getString());
}
}
ok,看下效果
4.到这里基本的工作都已经完成了,但是我们要的so库呢?so库直接拿来用就好了,而且不需要管理这些零碎的.c/.h文件
我们打开app/build/intermediates/ndk/debug/lib .so文件就在这里
ok,到此为止so库的环境搭建和基本配置都总结完了,关于so库的应用和具体功能实现敬请期待