AndroidStudio如何配置NDK/JNI?AndroidStudio怎么调用so动态链接库
2017-12-06
AndroidStudio怎么调用so动态链接库?在我们日常开发中,经常会用到一些复杂的加密的算法以保证通信的安全。通常这些算法会用C或C++实现后打包成.so动态链接库并向Java层开发接口方便调用。
以AndroidStudio为例
1 . 首先去下载NDK包,下载路径如下可根据自己系统定点下载
https://developer.android.google.cn/ndk/downloads/index.html
2 . 创建一个安卓工程,初始化完成以后,右键项目->Open Module Settings
选择你下载的ndk存放路径
3 .创建一个jniTest类,写好navite方法,点击Build->Make Project打包文件
4 . 点击底下的Terminal窗口 cd 到当前项目目录
例:当前目录为JniDemo C:\Users\bilibili\Desktop\JniDemo>
cd C:\Users\bilibili\Desktop\JniDemo\app\build\intermediates\classes\debug
调用命令javah -jni 包名.类名生成头文件(文件生成在以上cd定位到的目录)
5 .在main>src下创建文件夹jni(new-Folder-jni Folder)进目录app>build>intermediates>classes>debug旗下找到头文件复制到jni文件夹
6 . jni目录下生c文件与.h文件重名c文件编写如下:
JNIEXPORT jstring JNICALL Java_com_jni_jnidemo_JniText_get_11111CLang_11String(JNIEnv *env, jobject obj)
{
return (*env)->NewStringUTF(env,"This just a test for Android Studio NDK JNI developer!");
}
7 . 在app的build.gradle的defaultConfig标签下添加如下标签:
ndk{
moduleName "jnitext" //生成的so名字,根据你自己的so定义
abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库。目前可有可无。
}
8 . 在工程的gradle.properties添加如下代码:
android.useDeprecatedNdk=true
9 . 点击Build->Make Project打包文件,去\app\build\ndk\debug\lib\目录下拷贝编译好的so文件复制到app\libs目录下即可
10 .调用如下:
static {
System.loadLibrary("jnitext");
}
public native String get_1111CLang_1String();