jni在Android studio中的配置和使用(一)

来源:互联网 发布:linux rpm文件 编辑:程序博客网 时间:2024/06/05 01:08

一.是什么?

1. JNI的含义

Java Native Interface 它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他编程语言,只要调用约定受支持就可以了,JNI标准至少要保证本地代码能工作在任何Java 虚拟机环境。(还有不懂,请自行百度解决)

为什么要用它?

  • 复用一些优秀的c/c++或者其它代码
  • 效率问题,c代码可以直接操作硬件,java代码只能操作虚拟机
  • c代码反编译困难,调试困难,java代码反编译比较容易。

怎么用?

在Android studio 2.2之前只能通过ndkBuilder方式进行项目的构建,2.2以后可以使用cmake方式进行项目的构建

1.使用ndkBuilder进行项目的构建

  • 一,首先你需要下载ndk(如果你已经安装了,请略过)
    default project stucture
    设置页面
    下载页面这里写图片描
    最终安装的时候会卡很长时间,慢慢等吃瓜表情
  • 二,在要运行的项目中的build.gradle文件中的defaultConfig节点中增加以下代码
ndk {moduleName "JniDemo" //生成的so库名字ldLibs "log", "z", "m" //添加依赖库文件,因为有log打印等//非必填加项abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库,目前可有可无。//不填写则生成所有}
  • 三,在gradle.properties文件中设置android.useDeprecatedNdk=true

  • 四,编写调用c/c++的本地代码

public class JniUtils {    // 这里以获取一个C中的字符串为栗子    public static native String getString();}
  • 五,生成.h文件
    – rebuild或clear一下,生成你的class文件,class文件路径如下
    class文件目录
    – 打开你的命令行,输入以下命令
    生成.h文件
    – .h文件会生成在你class文件的路径下
    生成成功

    • 六,将.h的头文件拷贝到jni目录下,编写c/c++的方法
      这里写图片描述
      – 我不会c…就写了个helloWorld这里写图片描述
    • 七,在刚刚的jniUtils中静态导入
    • 这里写图片描述
      那个包名就是你在gradle里面配置的包名

    至此,所有jni的配置都已经完成了,你可以在通过JniUtils中的getString()方法成功调用对你的C代码,最终结果显示如下:
    这里写图片描述
    这里写图片描述

到这里,用ndkBuilder构建的方法就已经介绍完了,下一篇介绍cmake的方式构建~~~~这里写图片描述

1 0