JNI与NDK开发(一)——项目初建

随着工作时间越久,接触关于Android系统越深入(日常开源项目使用,及解系统BUG),JNI与NDK开发出现的频率越来越多。目前,越来越多公司对于代码执行效率、核心代码的保密性要求日益提高,加之各种C 、C++开源项目的不断接入。使得Android开发中,对于JNI的使用甚至NDK的开发,越来越重视。
虽然使用JNI已经很久了,NDK也小范围的进行过实际项目的开发。但,自己的笔记中,这些方面的知识记得都比较零散。自己对这些知识从生疏到熟练,这个过程花费了很长时间。现在回顾一下,其实如果系统性的进行了梳理和着重强化练习,这个过程其实可以大幅缩短。想想还是认真梳理一下吧,知识先是越学越多,再是越学越少。

首先AndroidStudio工具需要配置NDK开发环境,我用的AndroidStudio 3.2 版本。过程非常简单,勾选以下红框的选项,联网进行自动下载,沿途一律同意!

当然,如果不进这些配置,直接创建JNI项目也是可以的,到时候会有多种报错。你只需要,根据报错提示,安装相应的工具或插件即可。但是,我还是建议进行预先配置,这是个习惯或做事思路的问题。古语有云:未雨绸缪 欲速则不达
在这里插入图片描述
以上图:
CMake 用于产生编译脚本CMakeLists.txt,其本身并没有真正参与代码编译。AndroidStudio中真正进行编译的是Glide工具中的插件nijia,这里我们不用关心;
LLDB 用于进行调试;
NDK 真正进行NDK开发的工具集;

使用AndroidStudio创建一个JNI项目

1、勾选 Include C++ support
创建JNI程序
2、其他步骤与创建普通Android项目相同。
由于步骤1,勾选了 Include C++ support,才会出现下图所示界面。

在这里插入图片描述
图①:C++ Standard: 选择C++库
Toolchain Default: 默认 CMake 设置
C++ 11:支持C++11特性
C++ 14:支持C++14特性

图②:Exceptions Support(-fexceptions):
如果你想使用有关 C++ 异常处理的支持,就勾选它。勾选之后,Android Studio 会在 module 层的 build.gradle 文件中的 cppFlags 中添加 -fexcetions 标志。

图③:Runtime Type Information Support(-frtti):
如果你想支持 RTTI,那么就勾选它。勾选之后,Android Studio 会在 module 层的 build.gradle 文件中的 cppFlags 中添加 -frtti 标志。
在这里插入图片描述
经过以上设置,就可以创建一个JNI的Hello World项目。

下图为这个JNI项目的目录结构,和基本代码结构:
在这里插入图片描述
在这里插入图片描述
文件夹 main — cpp: 这里的cpp文件夹,在以前的AndroidStudio 和 Eclipse版本中,命名为JNI。估计Google觉得,cpp文件夹(原JNI文件)中书写的是C/C++代码,所以为了好理解不误会,就将其改名字了。

JNI主要包含3部分代码,分别对应图中的 ①、②、③。
①:将要使用的library库进行引用。所有代码第一步都是要引用或关联代码库,然后才能代用库中的方法或属性;
②:在Java代码中定义 native方法;
③:在C代码中,对应创建(JNI代码第一种书写方法)或映射关联(JNI代码的第二种书写方法),Java代码中的native方法。
完成以上三步,就可以在Java代码中调用这个native方法,以便让C代码中的函数参与运算或业务处理。
在这里插入图片描述
以上内容是JNI与NDK开发环境的搭建(随着工具的更新,这个很简单了,以前的还是有点复杂)。并且,介绍了一下JNI的目录与代码构成。下一篇预计讲解一下,JNI的语法使用和注意事项。希望到时候工作不忙!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值