NDK与JNI基础
什么是NDK?
全拼是:Native Develop Kit
Android NDK是一套允许使用原生代码语言(例如C和C++)实现部分应用的工具集。
为什么使用NDK
提升性能,使用第三方库,代码保护等
什么是JNI?
全称为:Java Native Interface,即Java本地接口
为什么需要JNI
Java代码与C/C++代码进行交互
JNI简要流程
普通java业务类调用本地方法接口类,然后本地方法接口类调用本地方法。
Demo1
1.新建一个class,demo
例:
public class demo {
public static native String getDemo();
}
2.获取classes文件
点击Build中的Make Project后,在app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes找到对应的class,然后打开terminal,输入命令javah com.example.junmatek.myapplication.demo,会有对应的.h文件生成
3.增加对应.c文件
main目录下新建jni目录,将上面的.h文件剪切过来,再新建一个.c文件
新建的.c文件中添加头文件引用,然后具体实现头文件中的函数。
4.添加并编写Android.mk文件
在jni目录添加Android.mk文件,添加以下内容
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := demotest-jni
LOCAL_SRC_FILES := demotest.c
include $(BUILD_SHARED_LIBRARY)
############################
BUILD_STATIC_LIBRARY:编译为静态库
BUILD_SHARED_LIBRARY:编译为动态库
BUILD_EXECUTABLE:编译为Native C 可执行程序
BUILD_PREBUILT:该模块已经预先编译
5.修改相应的配置文件
在local.properties文件中添加NDK路径
修改app module目录下的build.gradle中的内容
defaultConfig 中加
ndk {
moduleName "demotest-jni"
}
buildTypes中添加
externalNativeBuild {
ndkBuild {
path 'src/main/jni/Android.mk'
}
}
sourceSets.main {
jni.srcDirs = []
jniLibs.srcDirs = ['src/main/jniLibs']
}
6.引用类添加静态初始化代码
static {
System.loadLibrary(“demotest-jni”);
}