AndroidStudio配置NDK/JNI,完成so动态链接库的调用

写在前面

在我们日常开发中,经常会用到一些复杂的加密的算法以保证通信的安全。通常这些算法会用C或C++实现后打包成.so动态链接库并向Java层开发接口方便调用。
本文主要叙述在Android开发过程中如何配置环境,以及如何利用JNI技术完成动态链接库的调用。
大神请无视。

以AndroidStudio为例

  • 1 . 首先去下载NDK包,下载路径如下可根据自己系统定点下载

    https://developer.android.google.cn/ndk/downloads/index.html

    这里写图片描述

  • 2 . 创建一个安卓工程,初始化完成以后,右键项目->Open Module Settings

    这里写图片描述

    选择你下载的ndk存放路径

    选择你下载的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();

如果问题欢迎留言指点

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值