Android Studio中进行Jni编程

1.介绍

Android程序分2层,java层与native层,java层编译为dex文件,native层编译为so动态库。两者使用jni(java native interface)来进行连接。

2.在Android Studio中进行Jni编程

2.1 Android Studio 中Jni环境搭建

Android Studio原生支持Jni编程,可以直接创建so库,不过需要修改gradle文件以开启Jni支持。

1.创建一个普通的Android项目
2.打开File->Project Structure,检查NDK目录是否正确,如果之前安装了NDK,这里会自动填上地址,如果没有安装,使用Android Studio中的SDK Manager进行下载。
在这里插入图片描述
还可以自己下载NDK包,解压后将路径填入Android NDK location。链接:https://pan.baidu.com/s/1Hoyt9q_kNWLe0ckiJ4mr_A
提取码:nvdu

3.添加环境变量,新建名为NDK_HOME的字段,值为NDK的根目录地址

再在Path中添加%NDK_HOME%\。
在这里插入图片描述
4.此时local.properties中应该有下图中的一行地址,如果没有,手动添加也可以
在这里插入图片描述
由于NDK版本和SDK可能不一致,编译时可能会报警“Your project contains C++ files but it is not using a supported native build system”,所以先在gradle.properties文件下添加一行android.useDeprecatedNdk=true。
在这里插入图片描述
至此Android Studio下的Jni环境就搭建完毕了。

2.2 Android Studio下的Jni开发和使用

上节将NDK开发需要的环境搭建完毕了,现在可以生成一个.so库,并使用它。

1.右键app,选择New->Folder->Jni Folder,创建完后会生成一个jni目录,里面用来放c文件。
在这里插入图片描述

2.在MainActivity中声明native方法

public native String sayHello();

3.在jni目录中创建hello.c文件并实现native方法

#include <string.h>
#include <jni.h>

jstring Java_com_example_a42033_myapplication_MainActivity_sayHello(JNIEnv *env,jobject thiz){
    return (*env)->NewStringUTF(env,"Hello from JNI !");
}

4.在build.gradle中加入moduleName,它将作为.so库的名字
在这里插入图片描述
5.代码中调用
在这里插入图片描述
6.生成.so库,点击Build->Rebuild Project,会生成.so库,生成的.so库在\app\build\intermediates\ndk\debug\lib下
在这里插入图片描述
7.使用.so库,Android Studio中.so包默认存放在main/jniLibs目录下,不过一般情况下我们直接接.so库放在app/libs目录下面,首先将上图红框中所有平台的.so文件一起拷贝到app.libs目录下,然后在app/build.gradle中添加如下代码:
在这里插入图片描述

此时可以将jni里面的.c文件和build.gradle中的moduleName删除,这不会影响程序的正常运行。
至此.so库的编写和使用都完成了。

2.3 额外的gradle配置

ndk{
    moduleName = "hello"
    ldLibs("log")//依赖库
    abiFilters("armeabi","armeabi-v7a","x86")//指定编译平台
    stl =- "system"
    cFlags("-std=c++11")
}

在AndroidStudio中进行Jni开发不需要编写复杂的Android.mk,Application.mk等文件,这些完全可以在gradle中进行配置,具体可以参照gradle中的NdkOptions类。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值