下图为JNI 与 NDk关系图:
现在我们来说说如何在AS里面使用NDK 。从前我们需要命令行 javah jni 和 ndk build ,现在我们用CMAKE 。
不管是哪种方式,流程是一样的:
1.首先我们先 写一个JAVA类(调用so用的,System.load(""),必须build生成.class),
2.然后利用它的.class文件生成一个.cpp文件
3.根据cpp生成一个.so文件
4.完美运行
只能说这两种方式的在第二步和第三步的 方式不一样,以及配置文件不一样
现在我们进入正题
1.CMAKE
首先在创建工程的时候,勾上 Include c++ support 。项目建成后 module 下就多了 CMakeLists.txt ,以及build.grandle 。包括MainActivity ,cpp 文件都会写,后面照着写就好。
以上都是建立项目后自动有的。
小注:
1.若自定义native方法,直接 选中方法名 再alt+enter ,即可
2.ctrl 点击方法,可以在java 与 c文件的方法互相跳转 (使用很方便)
3.写c ,还有代码提示
4.如果我们不在c源代码文件中输出日志到logcat,那么我们是不需要依赖log库的,也就是说find_library、target_link_libraries不是必须的。
如果我们开发半途希望加入jni ,那么我们的步骤是:
1.新建CMakeLists.txt
2.模块右键 选择 ,然后build.gradle 就自动变化配置了,但是还是有需要自己配置的
3.cpp文件还是要自己新建的,新建后就可以在java文件中System.Load("") ,且在java 中写好方法 ,选中+alt+enter ,保证CPP 中生成对应的方法
老旧实现:
是通过命令行实现
1.通过在jdk/bin 下找到javah -> 将class文件 转化成 cpp
2.通过sdk/ndk/ndk-build -> 将cpp 转化成so
而在AS 中 ,可以直接配置命令行,右键对应的文件 就可省去代码。