JNI 是java 语言调用C/C++函数的接口。与JNI相关的开发工具包是NDK。下面记录Android Studio 里用 java代码调用 JNI的基本过程。当前环境:
Android Studio:3.1.2.
准备
下载NDK:

###1.创建Java类
定义一个工具类,里面定义了native方法:
1  | package cn.qiracle.jnidemo.jni;  | 

2.创建JNI文件夹
在main文件夹下创建jni文件夹:

3.生成头文件
两种方式:
1.通过命令行
javac JniUtils.java 编译生成 JniUtils.class文件。然后回退到包外目录javah -jni cn.qiracle.jnidemo.jni.JniUtils。将生成的.h文件移动到main下的jni目录下。
2.配置外部工具
点击File - Setting - Tools - External Tools 打开外部工具配置页,点击 + 新建一个工具。

Program: $JDKPath$\bin\javah.exe 
Arguments: -classpath . -jni -d $ModuleFileDir$\src\main\jni $FileClass$ 
Working directory: $ModuleFileDir$\src\main\Java
点击 OK 保存后就新建了一个工具。此时我们右击 JniUtils.java,在菜单中选择 External Tools - javah 就可以快速生成头文件并放到 jni 目录。

4.编写C代码
在jni目录下新建一个cn_qiracle_jnidemo_jni_JniUtils.cpp文件。内容如下:
1  | 
  | 
这里输出 hello jni
5.创建mk文件
mk 文件用于告诉 ndk-build 该如何编译 c 源码。详情见官方指南。
在jni目录下创建Android.mk:
1  | LOCAL_PATH := $(call my-dir)  | 
创建 Application.mk:
1  | APP_MODULES := JniLib  | 
6.gradle配置
在 module 的 build.gradle 里,amndroid.defaultConfig 下加入下面配置:
1  | ndk {  | 
6.编译
这里我们配置使用外部工具:

- Program: 
D:\SDK\ndk-bundle\build\ndk-build.cmd(注意这里是ndk-build路径) - Working directory: 
$ProjectFileDir$\app\src\main 
任意找个第地方右击,选择 External Tools - ndk-build 即可编译 c 源码。成功后可以看见创建了 libs 目录,里面包含了不同平台下的 so 文件。

7.验证
在MainActivity.java里调用native方法:
1  | Toast.makeText(this,JniUtils.getJniString(),Toast.LENGTH_SHORT).show();  | 
运行结果:

参考: