Java Native Interface
JNI
相当于一种桥梁,一种协议。通过Jni可以让java调用C语言或者C++。

第一个程序
准备工作
安卓NDK开发
**
下载ndk配置环境变量
命令行输入
ndk-build
安卓项目配置
项目下创建
main目录下创建jni目录

JAVA 调用 C
- 编写带有native声明的方法的Java类
2. 使用javac命令编译编写的Java类
3. 使用java -jni **来生成后缀名为.h的头文件
4. 使用其他语言(C、C++)实现本地方法
5. 将本地方法编写的文件生成动态链接库
编写Java代码
package art.taoya;public class JNITools {static {System.out.println("NDKLIB");//设置查找路径为当前项目路径// System.setProperty("java.library.path", ".");//加载动态库的名称// 在这里我们需要加载这个jni so库, 这个Hello名字就是最终编译产出的so的名字,也可以起其他的名字,但必须要和最终的so库名相同。System.loadLibrary("Hello");}public native String hello();}
写完之后我们,Make Project
**
编译代码**
➜ taoya javac JNITools.java
生成.h头文件
:::info
javah命令
**
:::
用法:javah [options] <classes>其中, [options] 包括:-o <file> 输出文件 (只能使用 -d 或 -o 之一)-d <dir> 输出目录-v -verbose 启用详细输出-h --help -? 输出帮助信息-version 输出版本信息-jni 生成 JNI 样式的标头文件 (默认值)-force 始终写入输出文件-classpath <path> 从中加载类的路径-cp <path> 从中加载类的路径-bootclasspath <path> 从中加载引导类的路径<classes> 是使用其全限定名称指定的(例如, java.lang.Object)。
生成头文件
:::warning Android Studio 自动生成头文件
File -> Setting ->Tools -> External Tools,点击加号添加新的Tools
:::
这就会生成.h文件,这个文件里面的内容是不能被修改的。

生成的文件存在于 .idea/modules/app/src/main/jni/art_taoya_JNITools.h
基本类型映射
:::warning
基本类型映射
:::
配置动态链接库
在这里我们需要指定编译产出的so库名,如前面指定的Hello。
配置通常有两种方式,一种通过ndk属性进行配置, 另一种通过cmake配置
**
编译完成后可以看到生成的文件。

目录结构
Android 特有的文件 :Android.mk Application.mk
在 Android 上编译需要的配置文件,相当于 build.gradle。
Android.mk
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := HelloLOCAL_SRC_FILES := Hello.cinclude $(BUILD_SHARED_LIBRARY)
