JNI 与 NDK 的关系 以及实现

下图为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 中 ,可以直接配置命令行,右键对应的文件 就可省去代码。

 

posted @ 2018-08-27 14:00  学海无涯++  阅读(1116)  评论(0编辑  收藏  举报