1.新建一个类,在该类中实现本地方法
它可能是红色的,提示找不到对应的jni方法,但是不用管,以后会配置
2. 在命令行对该native方法生成头文件
首先,用cd命令进入该类的目录下,然后输入javac -h .\ 你的.java文件
这里不用javah是因为jdk10之后已经弃用了javah,而使用javac -h代替。另外,这里的.\代表当前目录,不能省,而且.\后有一个空格。
运行之后,会在当前目录下同时生成.class文件和.h头文件
3. 在main文件夹下建立新文件夹jni,把刚生成的头文件移入,并新建一个jni.c文件,在其中实现native方法
其实jni文件夹不是必须的,只是把c文件和h文件放一起好管理
4. 编辑jni.c
首先include刚生成的头文件,然后写你的native方法,注意方法名必须和头文件中规定的相对应。至于native方法怎么写,语法规则是什么,可以参考https://www.jianshu.com/p/464cd879eab
5. 在app目录下新建CMakeLists.txt文件,内容如下
# value of 3.4.0 or lower.
# 1.指定cmake版本
cmake_minimum_required(VERSION 3.4.1)
add_library( # Sets the name of the library. ——>2.生成函数库的名字,需要写到程序中的 so 库的名字
native-lib
# Sets the library as a shared library. 生成动态函数
SHARED
# Provides a relative path to your source file(s).
# Associated headers in the same location as their source
# file are automatically included. ——> 依赖的cpp文件,每添加一个 C/C++文件都要添加到这里,不然不会被编译
src/main/jni/jni.c
)
find_library( # Sets the name of the path variable. 设置path变量的名称
log-lib
# Specifies the name of the NDK library that
# you want CMake to locate. #指定要查询库的名字
log )
# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in the
# build script, prebuilt third-party libraries, or system libraries.
target_link_libraries( # Specifies the target library. 目标库, 和上面生成的函数库名字一致
native-lib
# Links the target library to the log library
# included in the NDK. 连接的库,根据log-lib变量对应liblog.so函数库
${log-lib} )
6. 在app目录下的gradle文件中注册CMakeLists.txt文件目录
7. 在你包含native方法的类中调用so库
这个so库的名字就是你在CMakeLists.txt文件中所定义的
然后就可以在你的mainactivity中调用这个类的native方法了!