Android Studio 生成so包和.H文件给jni调用产生新so包。(即so包调so包)

简单说下此文的目的:

1.如何自己 生成 so包跟H头文件 给别人使用。

(常见使用第三方给的,但是怎么生成就???,此文介绍。)

2.如何使用这个so包跟H头文件 自己再生成新的so包。

(这个就基本上都会用了,这里是为了配合1介绍)

第一步:先使用AS创建一个支持C/C++项目。

Android Studio 生成so包和.H文件给jni调用产生新so包。(即so包调so包)

第二步:创建项目后在cpp文件夹下面创建一个h文件和一个cpp文件

Android Studio 生成so包和.H文件给jni调用产生新so包。(即so包调so包)

1.h文件和cpp文件里面这里就随意写一个求和的

Android Studio 生成so包和.H文件给jni调用产生新so包。(即so包调so包)Android Studio 生成so包和.H文件给jni调用产生新so包。(即so包调so包)

第三步:修改CMakeLists.txt文件。

这里只是改了生成的包名。和加入Hello.cpp文件

Android Studio 生成so包和.H文件给jni调用产生新so包。(即so包调so包)

第四步:编译 运行。这里虽然没有调用Hello.cpp里面的方法,但不影响so包的生成。

由于我在build.gradle里面指定了生成版本所以这里只有v7a的。

Android Studio 生成so包和.H文件给jni调用产生新so包。(即so包调so包)

到此,第一个so包生成,而且跟其他博客介绍的一样到这里应该没什么大问题。

接下来 才是重点,怎么在另一个c++项目里引用这个so。

第五步:现在再新建一个支持C/C++项目,跟第一步一样,

然后把第一个项目生成的libhello.so放到新建的armeabi-v7a文件夹下面

把第一个项目创建的Hello.H文件放到新建的include文件夹下面

Android Studio 生成so包和.H文件给jni调用产生新so包。(即so包调so包)

第六步:修改CMakeLists.txt文件,这里跟上面一样为了方便看删掉了官方注释。

            加入头文件引用和动态链接so包。这里是第一个项目的so包跟头文件。

Android Studio 生成so包和.H文件给jni调用产生新so包。(即so包调so包)

第七步:在MainActivity里面创建一个方法 adds() 并在native-lib.cpp文件中生成对应的方法调用so包里面的方法。

        注意引用头部最好加入include

Android Studio 生成so包和.H文件给jni调用产生新so包。(即so包调so包)

Android Studio 生成so包和.H文件给jni调用产生新so包。(即so包调so包)

第八步,同样的编译运行。下面是产生的新的libnative-lib.so包和调用运行的结果。

Android Studio 生成so包和.H文件给jni调用产生新so包。(即so包调so包)

Android Studio 生成so包和.H文件给jni调用产生新so包。(即so包调so包)


到此为止,在jni里面调用so包的方法完成,并产生第二个新的so包。

这里说一下这样做的原因,大部分是因为第三方会给这样的so包配合h头文件使用。

同时也清楚这其中的使用流程。尤其是第一个项目生成so包和h头文件给第二个项目使用的流程。

这样做目的当然是为了不想让你看到实现方法。也无法修改实现方法。以及一些商业机密。

在这里难免有些步骤出错,导致包找不到,或者类找不到,所以我放到另外一篇文章,供参考。

https://blog.csdn.net/SXH_Android/article/details/80700963


项目的demo

项目一:

https://github.com/talentsxh/HelloApplication

项目二:

https://github.com/talentsxh/TestHello