跟鱼八学NDK开发 基于Cmake(三) 使用含有第三方动态库的本身编译好的.so

爱开发,爱鱼八! 我是yubaKevin!不是单身的程序猿! 主题:NDK开发 完美解析详细开发过程,菜鸟必备!java

由于太菜,因此想写文章学习,提高本身帮助他人!如若文章有误,请大佬提笔赐教,不慎感激!android

随便转载,可是必定要附上原文连接哦,注上做者:@yubakevingit

个人github地址:github.com/YubaKevin 项目Demo在Trip-for-android里面,记得来个star哦github

详细参考资料:developer.android.com/studio/proj…app


本篇文章开发工具:AS 3.0.1 NDK版本 17

NDK开发基于CMakeLists

为何我直接使用的.so失败?

使用.so通常是在libs下新建对应ABI文件夹放置.so,而后在Buildgradle下配置一下就行了,结果我发现没法使用。老是没法找到对应库

后来询问大佬才了解,这是jni的注册方式致使的。通常来讲咱们使用的是静态注册,若是像第三方那样使用须要动态注册。大佬回答以下:

这个向大佬提问的软件,是大佬的知识星球,有兴趣的朋友
也能够加入,进入星球并非免费的,
这是加入的连接:t.zsxq.com/7UbA6MV
扫一下便可!(给大佬广告了一波,emmm里面氛围仍是不错的,能够认识其余大佬,嘿嘿嘿)

如今咱们先说明一下本身编写的静态注册下的.so使用方式吧!

1、使用含有第三方动态库的本身编译的.so

1.新建一个项目(或者在你须要使用.so的项目中)

2.在新建项目的libs中新建对应的ABI文件夹(我这里.so 是armeabi-v7a的)

3.将本身编译的.so和第三方.so放入进去

4.配置app下的buildgradle

sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
复制代码

5.最重要的一步:将jni类复制过来(也能够在写Jni的时候将jni类的包打成jar,在依赖到项目中使用),要保证jni类的路径和你编译.so的路径一致!

在编译.so的时候,咱们的包路径是:com.example.kevin.MyJniUtils,类名是JniUtils (参加NDK开发(二))
 因此在咱们这里要保持路径须要建立相同路径包,我这里包路径是相同的,只要复制MyJniUtils和JniUtils类就行了
复制代码

配置完成以下图:ps:红色方法不要紧,不报错

jni路径一致

注:实际开发中大家项目路径名不一样,建立相同路径的包就能够了。
若是路径不对你会报以下错误: java.lang.UnsatisfiedLinkError: No implementation found for XXXXXXXXXX
这里给你们提供一个网上解决办法,写的还比如我详细,大家能够看看
blog.csdn.net/ouyang_peng…

6.最后在本身的MainActity中写方法调用吧!

代码很简单,以下:


7.成功调用!!!是否是很6呢?

总结:经过跟鱼八的NDK三步走,你应该知道

1.NDK的环境配置
	2.配置buildgradle,CMakeLists的写法
	3.静态注册下的.so的使用
复制代码

此时此刻 你必定使用了本身的.so!

有了基础,准备下一步的NDK进阶学习吧!

我是鱼八,有任何问题均可在下方讨论!谢谢!


附:如下三篇文章,均是基础内容,大佬看了有话说,菜鸟看了有所获!

跟鱼八学NDK开发 基于Cmake(一) NDK环境配置

跟鱼八学NDK开发 基于Cmake(二)附有第三方动态库编写私有的动态库.so

跟鱼八学NDK开发 基于Cmake(三) 使用本身编写的动态库.so

相关文章
相关标签/搜索