文档章节

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

shzwork
 shzwork
发布于 07/06 00:13
字数 920
阅读 129
收藏 0

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

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

比如要集成第三方NDK库:

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

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

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

   android {
        ......
        sourceSets {
            main {
                jniLibs.srcDirs = ['libs']
                ......
            }
            ......
        }
        ......
    }
1
2
3
4
5
6
7
8
9
10
11
在集成第三方服务商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。

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

在App下的build.gradle中配置:

ndk {
            //选择要添加的对应cpu类型的.so库。
            abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
            // 还可以添加 'x86', 'x86_64', 'mips', 'mips64'
        }
1
2
3
4
5
6
这样就可以指定加载库。

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

项目demo参考: 
android-CollectionDemo
--------------------- 
作者:wapchief 
来源:CSDN 
原文:https://blog.csdn.net/wapchief/article/details/78229097 
版权声明:本文为博主原创文章,转载请附上博文链接!

本文转载自:https://blog.csdn.net/wapchief/article/details/78229097

shzwork
粉丝 15
博文 827
码字总数 18401
作品 0
厦门
私信 提问
Android关于libs,jniLibs库的基本使用说明及冲突解决

最近在开发中遇到了一个问题,因为项目需要集成不同的sdk。相对应的也是不同的.so文件。 针对libs中.so库的引入会遇到一些问题。 比如要集成第三方NDK库: image.png 如果是在eclipse中,需要...

八怪不姓丑
2017/10/13
0
0
Android集成讯飞语音、百度语音、阿里语音识别

一、引言 demo下载地址:https://fir.im/jy28 demo源码查看:https://github.com/wapchief/android-CollectionDemo 效果图: 选这几个平台的主要也是从多方面考虑。 大概从这几个 识别精准度...

八怪不姓丑
2017/11/17
0
0
关于Android Studio UnsatisfiedLinkError错误的解决办法

转载自:https://blog.csdn.net/yang451212/article/details/78327900 (一)Android Studio UnsatisfiedLinkError错误的解决办法 1:当程序报错: Caused by: java.lang.UnsatisfiedLinkEr......

犀牛有脾气
2018/11/27
0
0
Android eclipse项目转成Android studio项目遇到的问题

导入到Android studio后发现项目的build.grade是这样的。 这是不能编译的,参照官方的说明:http://tools.android.com/tech-docs/new-build-system/user-guide 编辑成这样: 引入依赖 这里依...

Nov_Eleven
2014/12/10
7.2K
0
Android 离线人脸识别 ArcFace 2.0 Demo开发分享

环境要求 1、运行环境 armeabi-v7a 2、系统要求 Android 5.0 (API Level 21)及以上 3、开发环境 Android Studio 下载地址:https://github.com/ArcsoftEscErd/ArcfaceDemo_Android SDK获取地...

feishixin123
01/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

32位与64位Linux系统下各类型长度对比

64 位的优点:64 位的应用程序可以直接访问 4EB 的内存和文件大小最大达到4 EB(2 的 63 次幂);可以访问大型数据库。本文介绍的是64位下C语言开发程序注意事项。 1. 32 位和 64 位C数据类型...

mskk
34分钟前
6
0
Vue 实现点击空白处隐藏某节点(三种方式:指令、普通、遮罩)

在项目中往往会有这样的需求: 弹出框(或Popover)在 show 后,点击空白处可以将其 hide。 针对此需求,整理了三种实现方式,大家按实际情况选择。 当然,我们做项目肯定会用到 UI 框架,常...

张兴华ZHero
41分钟前
7
0
SpringBoot激活profiles你知道几种方式?

多环境是最常见的配置隔离方式之一,可以根据不同的运行环境提供不同的配置信息来应对不同的业务场景,在SpringBoot内支持了多种配置隔离的方式,可以激活单个或者多个配置文件。 激活Profi...

恒宇少年
42分钟前
8
0
PDF修改文字的方法有哪些?怎么修改PDF文件中的文字

PDF修改文字一直以来都是一个难以解决的问题,很多的办公族在办公的时候会有修改PDF文件中的文字的需要,可是PDF文件一般是不能进行编辑和修改的,难道就没有什么办法解决这个问题了嘛?不要...

趣味办公社
45分钟前
5
0
企业组织中采用服务网格的挑战

作者:Christian Posta 译者:罗广明 原文:https://blog.christianposta.com/challenges-of-adopting-service-mesh-in-enterprise-organizations/ 编者按 本文作者介绍了企业组织采用服务网...

jimmysong
55分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部