JNI: Java Native Interface (Java本地接口,本地接口即C和C++开发的接口) → 调用接口
NDK:Native Development Kit (原生开发套件) → 工具集
一: 使用NDK生成so文件
1. 生成头文件,使用有调用native方法的类生成头文件。
2. 在app的build.gradle增加
Android{}里面增加
sourceSets {
main {
jniLibs.srcDirs = ['libs']
jni.srcDirs = ['src/main/jni', 'src/main/jni/']
}
}
3. 在gradle.properties末行 android.useDeprecatedNdk=true
4. 进入app/src/main目录:cd app/src/main执行javah命令:javah -d jni -classpath ./Java 包名.类名
<< 解释语: -d jni 表示头文件生成到jni文件夹(当前在<Project工程下>\app\src\main目录下,所以.h所在的目录为<Project>\app\src\main\jni )
-classpath ./java 指定去当前路径下java下寻找包名指定的类>>
5. 写一个c或者c++文件, 这个比较复杂, 可以根据demo讲解。
#include <stdlib.h>
#include <Stdio.h>
#include <jni.h>
// 就string 返回的数据类型, JNICALL java_包名_类名_方法名(JNIEnv *env,jobject thiz)
jstring JNICALL Java_com_yunange_drjing_JniTest_getPackageName(JNIEnv *env,jobject thiz) {
// 返回值 *env(结构体->)
return (*env)->NewStringUTF(env, "I`m bug_king!");}
6. 调用ndk-build生成so库。
7. 别忘记使用system.System.loadLibrary("so文件名");<so文件名需要去掉前缀lib 和后缀.so>
网友评论