一、概述
没什么好讲的了,Android学习成长过程必经之路就是了解Framework层的源码及原理,在跟踪流程过程中,难免遇到很多natvie函数,这个时候学习native能帮助我们更轻松的读懂这方便的代码。
这篇文章也会从最基础的东西开始讲起,Android的native开发基础是什么,那就是JNI和NDK的概念。当然还会涉及到C++语言的一些基础知识。
二、JNI & NDK
JNI(java native Interface)顾名思义,就是java本地接口。Java虚拟机提供的一种能力,能够提供接口帮助开发者调用到本地代码库(native lib)。
如下图:Java虚拟机运行时数据区
构建一个JNI项目
构建一个JNI项目差点让这篇文章未半而中道崩殂,建议没有过经验的同学第一次直接创建一个C++项目,和原本项目比较差异,再在已有项目上添加JNI功能。需要的环境搭建这里就不多讲了。
这里就直接讲如何在已有的项目上添加JNI,首先是模块的build.gradle文件,再android节点中添加cmake的文件索引和依赖版本,我目前使用的AS是| 2024.1.2 Beta 1,如果你也是使用这个版本,那么添加如下,仅此而已。
android {
...
externalNativeBuild {
cmake {
path file('src/main/cpp/CMakeLists.txt')
version '3.22.1'
}
}
}
接着在我们的项目中写一个JNI的调用,这里以官方例子为例。Kotlin和Java有所不同的是,Kotlin当中修饰native方法的关键字是external,而静态块的库加载方式则是在companion object的init中完成的。
public class MainActivity extends AppCompatActivity {
static {
System.loadLibrary("nativelib");
}
private Button button;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(