Android项目针对libs(armeabi,armeabi-v7a,x86)进行平台兼容
来源:互联网 发布:封印者画质优化 编辑:程序博客网 时间:2024/06/07 13:53
转载于 http://blog.csdn.net/u011688880/article/details/46984547
1.Android设备如何加载.so文件?
不同CPU架构的android手机加载时会在libs下找自己对应的目录,从对应的目录下寻找需要的.so文件;如果没有对应的目录,就会去armeabi下去寻找,如果已经有对应的目录,但是如果没有找到对应的.so文件,也不会去armeabi下去寻找了。
以x86设备为例,x86设备会在项目中的 libs文件夹寻找是否含有x86文件夹,如果含有x86文件夹,则默认为该项目有x86对应的so可运行文件,只有x86文件夹而文件夹下没有so,程序运行也是会出现find library returned null的错误的;如果工程本身不含有x86文件夹,则会寻找armeabi或者armeabi-v7a文件夹,兼容运行。以armeabi-v7a设备为例,该Android设备当然优先寻找libs目录下的armeabi-v7a文件夹,同样,如果只有armeabi-v7a文件夹而没有 so也是会报错的;如果找不到armeabi-v7a文件夹,则寻找armeabi文件夹,兼容运行该文件夹下的so,但是不能兼容运行x86的so。所以项目中如果只含有x86的so,在armeabi和armeabi-v7a也是无法运行的。以上就是不同CPU架构运行时加载so的策略。
2.对于不同的平台,我们应该怎么去进行适配?
目前主流的Android设备肯定是armeabi-v7a架构的,然后就是x86和armeabi了。如果同时包含了 armeabi, armeabi-v7a和x86,所有设备都可以运行,程序在运行的时候去加载不同平台对应的so,这是较为完美的一种解决方案,但是同时也会导致包变大。
armeabi-v7a是可以兼容armeabi的,而v7a的CPU支持硬件浮点运算,目前绝大对数设备已经是armeabi-v7a了,所以为了性能上的更优,就不要为了兼容放到armeabi下了。x86也是可以兼容armeabi平台运行的,另外需要指出的是,打出包的x86的so,总会比armeabi平台的体积更小,对于性能有洁癖的童鞋们,还是建议在打包so的时候支持x86。
3.如果第三方没有提供对应平台的.so文件怎么办?
有一些第三方的类库只提供了armeabi下的.so文件,如果我们项目里适配了armeabi-v7a和x86,如果不在对应的文件下放对应的.so文件,就可能导致某些Android设备会出一些问题,我们可以复制armeabi下得.so文件到不同的文件夹下。如果第三方提供了不同平台的.so文件,则复制不同平台的.so文件到项目中对应的文件夹下即可。
1.Android设备如何加载.so文件?
不同CPU架构的android手机加载时会在libs下找自己对应的目录,从对应的目录下寻找需要的.so文件;如果没有对应的目录,就会去armeabi下去寻找,如果已经有对应的目录,但是如果没有找到对应的.so文件,也不会去armeabi下去寻找了。
以x86设备为例,x86设备会在项目中的 libs文件夹寻找是否含有x86文件夹,如果含有x86文件夹,则默认为该项目有x86对应的so可运行文件,只有x86文件夹而文件夹下没有so,程序运行也是会出现find library returned null的错误的;如果工程本身不含有x86文件夹,则会寻找armeabi或者armeabi-v7a文件夹,兼容运行。以armeabi-v7a设备为例,该Android设备当然优先寻找libs目录下的armeabi-v7a文件夹,同样,如果只有armeabi-v7a文件夹而没有 so也是会报错的;如果找不到armeabi-v7a文件夹,则寻找armeabi文件夹,兼容运行该文件夹下的so,但是不能兼容运行x86的so。所以项目中如果只含有x86的so,在armeabi和armeabi-v7a也是无法运行的。以上就是不同CPU架构运行时加载so的策略。
2.对于不同的平台,我们应该怎么去进行适配?
目前主流的Android设备肯定是armeabi-v7a架构的,然后就是x86和armeabi了。如果同时包含了 armeabi, armeabi-v7a和x86,所有设备都可以运行,程序在运行的时候去加载不同平台对应的so,这是较为完美的一种解决方案,但是同时也会导致包变大。
armeabi-v7a是可以兼容armeabi的,而v7a的CPU支持硬件浮点运算,目前绝大对数设备已经是armeabi-v7a了,所以为了性能上的更优,就不要为了兼容放到armeabi下了。x86也是可以兼容armeabi平台运行的,另外需要指出的是,打出包的x86的so,总会比armeabi平台的体积更小,对于性能有洁癖的童鞋们,还是建议在打包so的时候支持x86。
3.如果第三方没有提供对应平台的.so文件怎么办?
有一些第三方的类库只提供了armeabi下的.so文件,如果我们项目里适配了armeabi-v7a和x86,如果不在对应的文件下放对应的.so文件,就可能导致某些Android设备会出一些问题,我们可以复制armeabi下得.so文件到不同的文件夹下。如果第三方提供了不同平台的.so文件,则复制不同平台的.so文件到项目中对应的文件夹下即可。
- Android项目针对libs(armeabi,armeabi-v7a,x86)进行平台兼容
- Android项目针对libs(armeabi,armeabi-v7a,x86)进行平台兼容
- Android项目针对libs(armeabi,armeabi-v7a,x86)进行平台兼容
- Android项目针对libs(armeabi,armeabi-v7a,x86)进行平台兼容
- Android项目针对libs(armeabi,armeabi-v7a,x86)进行平台兼容
- Android项目针对libs(armeabi,armeabi-v7a,x86)进行平台兼容
- Android项目针对libs(armeabi,armeabi-v7a,x86)进行平台兼容
- android libs文件夹下armeabi armeabi-v7a x86 arm64-v8a
- Android项目中libs库中的armeabi-v7a,armeabi和x86
- Android开发中libs包下面的mips、armeabi、armeabi-v7a和x86
- Android开发中libs包下面的mips、armeabi、armeabi-v7a和x86
- Android开发中libs包下面的mips、armeabi、armeabi-v7a和x86
- Android开发中libs包下面的mips、armeabi、armeabi-v7a和x86
- Android armeabi armeabi-v7a
- armeabi armeabi-v7a android
- armeabi,armeabi-v7a,x86等
- armeabi 、armeabi-v7a 和x86
- armeabi-v7a/arm64-v8a/x86/x86_64均兼容armeabi
- sping boot 整合 beetl 模版
- .NET下WebBrowser的一个BUG以及其替代品—geckofx
- 扎克伯格:锻造一只硕大无朋的能力“碗”
- [分治+floyed] 2016 计蒜之道 复赛 A 百度地图的实时路况
- 【Netty源码】NioEventLoop源码剖析
- Android项目针对libs(armeabi,armeabi-v7a,x86)进行平台兼容
- (十)linux下用标准i/o实现格式化输出并且把时间每隔一秒输出到文件中
- 《win10专业版永久激活》
- Java序列化和反序列化的简单理解
- iis 6 7 8预加载,提升web访速
- dagger2的配置及基本使用(一)
- Bootstrap基础10——徽章badge
- Java Instrumentation类相关文章合集
- 利用伪类清除浮动