Android Jni之编写so文件

开发中我们在集成第三方的时候经常用到一些so文件等,但这个so文件是如何编写的?并且我们为什么要用so文件?接下来我们就慢慢谈论一下这两个问题。

    我们为什么要用so文件?

一些基础的概念就不说了:首先我们知道so文件中有我们需要的方法,我们可以直接调用,说明对我们开发方便。但是我们既然用起来方便,我们为什么不直接写成java类,供我们直接调用呢?原因有两个:1、so文件不太容易逆向(也不是绝对的),就是说有些算法及一些规则是人家不希望你看到的,因为涉及到了人家的核心代码,靠这个吃饭。集成的第三方的产家的产品,人家想要盈利要保证核心技术不外露。 2、so文件是用c/c++来编写的,对于一些项目较大、质量要求太高的产品,c的效率较高,而且可以规模性的复用。3、编写后的so文件,可以模块化的进行使用,不用的话可以就不添加。当然编写so文件还有其他好的用途。

那么so文件是如何编写的?

so文件的编写首先得对c或c++语言得有一定了解,并且对jni技术有所了解。

 

步骤:1、配置好ndk环境(自行百度)

    2、一个项目下创建一个类。以media为例,System.loadLibrary(""),表示要加载Jnitest资源文件。Nativie_init方法申明了一个native方法,供java曾调用。此处有红色提示,可以忽略。

Android Jni之编写so文件

 3、找到刚创建的文件所在的位置。

Android Jni之编写so文件

Android Jni之编写so文件

4.在此处执行 javac 命令,将Media文件转化为计算机语言

Android Jni之编写so文件

 

5.在java文件夹下执行javah 命令,生成c头文件。格式:javah -jni 包名.类名

Android Jni之编写so文件

6.在包名下面创建jni目录,并将刚才生成的.h文件复制进去。

Android Jni之编写so文件

7.将工程gradle中配置如下

Android Jni之编写so文件

 

moduleName:名称可随意编写,当生成so文件之后,就是按照这个规范来命名的。

abiFilters:可支持cpu架构

未完待续: