【笔记】Android Studio中使用NDK-JNI

这些天一直在搞关于JNI的东西,重拾一下C++,翻一翻NDK的API。

NDK的使用第一反应是直接调用底层一些C/C++的东西,另一个众所周知的功效就是高效,其实我觉得相比较Java部分而言,JNI也更加安全,从反编译方面来看,Java部分的代码也好,逻辑也好,即使做了混淆之类的一些防范性措施,想知道依然还是蛮容易的,这不是说使用了JNI就绝对安全了,我个人认为至少比Java直接写的安全些。

不用Eclipse已经很久了,越来越发现Android Studio的强大。

最简单的NDK开发:1、下载安装;2、开始使用

下载安装

【笔记】Android Studio中使用NDK-JNI_第1张图片

这里主要需要下载安装3个组件:

1 CMake能够编译C/C++,可以与Gradle一起构建原生库;

2 NDK是Android原生开发工具包,它允许我们为Android使用C/C++代码,并且提供众多平台库,例如一些传感器等的使用管理;

3 LLDB是一个调试程序,让Android Studio可以调试原生代码(如果你强大到不需要调试就可以完成开发可以不安装,当然这是不可能的啦);

开始使用

说是直接使用,其实也要分两种,一种是直接创建支持C/C++的项目,一种是你已经创建了项目,后期加入C/C++部分;

1 直接创建(So Easy)

创建项目是勾上Include C++ support,然后就一路Next到底就行了。

【笔记】Android Studio中使用NDK-JNI_第2张图片

上图就是创建之后Android视图下的目录结构

1 native-lib.cpp就是我们编写C/C++的地方

2 CMakeList.txt是CMake的构建命令

2 后期加入

首先需要有一个不支持C/C++的项目

然后根据直接加入的项目结构我们知道需要在项目中包含两个东东,编写C/C++的文件和包含CMake构建命令的文件。

2.1 创建编写C/C++的文件

在需要创建编写C/C++的项目模块的main目录右键创建C/C++的目录:例如cpp;

然后在该目录下创建文件C/C++ Source File:例如jni-lib.cpp

2.2 创建包含CMake构建脚本的文件

如果比较偷懒可以直接把直接支持C/C++项目中的CMakeList.txt复制过来改一下里面的一些配置

【笔记】Android Studio中使用NDK-JNI_第3张图片

【笔记】Android Studio中使用NDK-JNI_第4张图片

把这两个命令中一些目标库的名称、相对路径等替换成你自己的配置就行。

2.3 使项目支持C/C++

右键你需要支持C/C++的项目模块点击Link C++ Project with Gradle,

查看build.gradle可以发现就是在需要支持的项目模块的gradle构建脚本中加入了CMake脚本执行配置

    externalNativeBuild {
        cmake {
            path 'CMakeLists.txt'
        }
    }

以上已经完成了使项目在后期加入C/C++代码的方法。


小坑

Android Studio的智能是众所周知的,我们只需要加载so库,在Java中写需要使用C/C++实现的方法名,一个Alt+Enter就能快捷创建C/C++中的方法。

但在这里有一个小坑,就是你刚支持了C/C++,你的.c/.cpp文件中没有任何方法,只有简单的头文件。

此时你使用上面的方法创建C/C++中的方法,Android Studio并不会在你自己创建的写C/C++的文件中生成方法,而是会新的目录中自动生成一个.c文件在里面生成方法。

【笔记】Android Studio中使用NDK-JNI_第5张图片

如果遇到上面发生的情况,其实很好解决,

一种是把生成的方法拷贝到你自己创建的文件中,再把Android Studio生成的文件和文件夹删除,之后再用Alt+Enter生成的方法就在你创建的文件夹中了;

一种是先在自己创建的C/C++的文件中写一个方法,再使用上面的快捷方法来创建想要实现的其他方法;




你可能感兴趣的:(Android)