Android关于libs,jniLibs库的基本使用说明及冲突解决

最近在开发中遇到了一个问题,因为项目需要集成不同的sdk。相对应的也是不同的.so文件。

针对libs中.so库的引入会遇到一些问题。

比如要集成第三方NDK库:

image.png

如果是在eclipse中,需要放到libs下对应库的目录。
如果是在Android Studio中,则会默认匹配main下的jniLibs目录,如果没有目录需要自己手动创建。并且库的名称也不能随便更改。

但是这里会有一个问题,就是如果使用的是AndroidStudio,但是想用libs下的库,还需要手动去指定库的位置:

在App下的build.gradle中加入以下配置。

   android {
        ......
        sourceSets {
            main {
                jniLibs.srcDirs = ['libs']
                ......
            }
            ......
        }
        ......
    }

在集成第三方服务商sdk的时候,大多数都会让你下载demo,或者是SDK集合包,让你直接拷贝整个libs或者jniLibs目录,合并本地项目。这样就会出问题。

以讯飞语音开发文档、百度语音开发文档和极光推送文档为例

讯飞的文档中说明是将libs目录下所有的文件拷贝至自己项目中的libs目录。

讯飞集成说明

百度的则是将app/src/main/jniLibs下的所有文件拷贝至自己的项目。

百度集成说明

极光文档就显得比较人性化

极光集成说明

如果你要集成前面两家的sdk,显然就会出现冲突。

build配置后,jniLibs库就无法被识别。但是不配置的话,libs库无法识别。
结果是改来改去总有一方库无法加载.so文件。

所以要解决的话,就抛弃前面的文档吧。
正确姿势是把所有的.so所对应的库要么全部放在libs,要么全部放在jniLibs。
eclipse现在的使用者已经很少了,所以还是以Android Studio为主。建议全部放在jniLibs,不需要额外的任何配置。

说点题外话

在第三方提供的NDK库中,大多都是成套的为了适配不同的cpu厂商,也就是常说的高通,联发科这些。

在拷贝库的时候也会成套的拷贝进项目,一般是四五个,百度语音的.so库全部导入的话加起来足足在15M以上。

所以在选择第三方服务的时候这也是需要考虑的一个因素。

我的demo为例,最近公司要选择一套语音方案,所以暂时就体验了百度的和讯飞的。
集成之前安装包是4M,集成后21M。

image.png

如果要精简通过so库来减少安装包的大小其实还可以通过动态选择需要添加的.so库

在App下的build.gradle中配置:

ndk {
            //选择要添加的对应cpu类型的.so库。
            abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
            // 还可以添加 'x86', 'x86_64', 'mips', 'mips64'
        }

这样就可以指定加载库。


相关文档参考:
ANDROID动态加载 使用SO库时要注意的一些问题
Android jniLibs下目录详解(.so文件)

项目demo参考:
android-CollectionDemo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,558评论 25 708
  • 推送技术产生场景: --服务器端主动性: 客户端与服务器交互都是客户端主动的, 服务器一般不能主动与客户端进行数据...
    原军锋阅读 34,822评论 4 60
  • 都说国庆堵得慌,我也一直都是知道的,但是从深圳到江西,居然跨越了三天就有点难以置信了,本熊30号出发,2号凌晨到家...
    小熊话保险阅读 247评论 0 0
  • 没有叶子的树 虽然没有衣服 他也没有哭诉 没有叶子的树 树梢上的鸟窝 也看得很清楚 没有叶子的树 他轻轻摇摇头 迎...
    四知录阅读 538评论 5 6
  • 江南的细雨缠绵了半月之久。 感受到一股流食随着咽喉入体,他的意识也逐渐苏醒。像是在黑夜中徘徊了太久,此刻内心也只...
    不嗝儿阅读 301评论 0 0