android配置jni
2018-02-23 本文已影响23人
程序猿bug鱼
android配置jni
配置NDK
首先下载NDK,这个就不细说了,自行百度就OK。
接下来工程右键->openModuleSetting->SDK Location 里边的Android NDK Location填上
码代码
接下来就可以写码了:假如我要从jni中获取一串密钥
例如我新建一个类叫JNIKeyUtils
public static native String getJNIKey();
static {
//这个名字是一会儿需要和build.gradle里边匹配上的
System.loadLibrary("JniKey");
}
接下来我们需要执行一串命令来获取native方法对应的.h文件
在我这是~/Device/AndroidCode/CProject/app/src/main/java
找到对应工程此路径下执行如下命令:
javah -jni com.example.yuf.myapplication.utils.JNIKeyUtils
(就是JNIKeyUtils类对应的包名)
接下来就能就能看到生成了一个.h文件了
然后我们再main文件夹下新建一个文件夹叫jni
把之前生成的.h文件拷贝进去
再粘贴第二遍,改后缀名为.c.
这样jni文件夹下就有两个文件了一个是.h 一个是.c
然后打开.c文件
把对应主方法修改一下.
JNIEXPORT jstring JNICALL Java_com_example_yuf_myapplication_utils_JNIUtils_getJNIKey(JNIEnv *env, jclass jobj){
return (*env)->NewStringUTF(env,"your key");
};
然后我们在需要的地方调用JNIKeyUtils.getJNIKey()
这样就改好了.
其他环境配置
1.local.properties文件配置如下:
ndk.dir=ndk环境位置
sdk.dir=AndroidSDK位置
2.gradle.properties文件里添加如下:
Android.useDeprecatedNdk=true
3.app build.gradle文件里面如下:
android{
defaultConfig{
//添加
ndk {
moduleName "JniKey"
abiFilters "armeabi", "armeabi-v7a", "x86"
}
}
//添加
sourceSets {
main {
java.srcDirs = ['src/main/java', 'src/main/aidl']
jniLibs.srcDirs = ['src/main/jniLibs']
jni.srcDirs = []
}
}
}
//添加
repositories {
mavenCentral()
flatDir {
dirs 'libs'
}
}
生成so
在工程目录下 app\build\intermediates\ndk\debug\obj\local目录查看各平台的so文件
然后拷贝到jniLibs目录下.
这是可以删掉jni文件夹和里边的.c和.h文件了
大功告成,可以运行了.