爱开发,爱鱼八! 我是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的注册方式致使的。通常来讲咱们使用的是静态注册,若是像第三方那样使用须要动态注册。大佬回答以下:
这个向大佬提问的软件,是大佬的知识星球,有兴趣的朋友
也能够加入,进入星球并非免费的,
扫一下便可!(给大佬广告了一波,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:红色方法不要紧,不报错
注:实际开发中大家项目路径名不一样,建立相同路径的包就能够了。
若是路径不对你会报以下错误: java.lang.UnsatisfiedLinkError: No implementation found for XXXXXXXXXX
这里给你们提供一个网上解决办法,写的还比如我详细,大家能够看看
6.最后在本身的MainActity中写方法调用吧!
代码很简单,以下:
7.成功调用!!!是否是很6呢?
总结:经过跟鱼八的NDK三步走,你应该知道
1.NDK的环境配置
2.配置buildgradle,CMakeLists的写法
3.静态注册下的.so的使用
复制代码
此时此刻 你必定使用了本身的.so!
有了基础,准备下一步的NDK进阶学习吧!
我是鱼八,有任何问题均可在下方讨论!谢谢!
附:如下三篇文章,均是基础内容,大佬看了有话说,菜鸟看了有所获!
跟鱼八学NDK开发 基于Cmake(三) 使用本身编写的动态库.so