AndroidStudio如何配置NDK/JNI?AndroidStudio怎么调用so动态链接库

如题所述

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();

温馨提示:答案为网友推荐,仅供参考
相似回答