android so文件的作用,Android SO库

查看手机CPU架构:

$adb shell

$cat /proc/cpuinfo

OnePlus6:

AArch64 Processor rev 12 (aarch64)

➜ ~ adb shell

OnePlus6:/ $ cat /proc/cpuinfo

Processor : AArch64 Processor rev 12 (aarch64)

processor : 0

BogoMIPS : 38.40

Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp

CPU implementer : 0x51

CPU architecture: 8

CPU variant : 0x7

CPU part : 0x803

CPU revision : 12

processor : 1

BogoMIPS : 38.40

Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp

CPU implementer : 0x51

CPU architecture: 8

CPU variant : 0x7

CPU part : 0x803

CPU revision : 12

processor : 2

BogoMIPS : 38.40

Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp

CPU implementer : 0x51

CPU architecture: 8

CPU variant : 0x7

CPU part : 0x803

CPU revision : 12

processor : 3

BogoMIPS : 38.40

Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp

CPU implementer : 0x51

CPU architecture: 8

CPU variant : 0x7

CPU part : 0x803

CPU revision : 12

processor : 4

BogoMIPS : 38.40

Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp

CPU implementer : 0x51

CPU architecture: 8

CPU variant : 0x6

CPU part : 0x802

CPU revision : 13

processor : 5

BogoMIPS : 38.40

Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp

CPU implementer : 0x51

CPU architecture: 8

CPU variant : 0x6

CPU part : 0x802

CPU revision : 13

processor : 6

BogoMIPS : 38.40

Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp

CPU implementer : 0x51

CPU architecture: 8

CPU variant : 0x6

CPU part : 0x802

CPU revision : 13

processor : 7

BogoMIPS : 38.40

Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp

CPU implementer : 0x51

CPU architecture: 8

CPU variant : 0x6

CPU part : 0x802

CPU revision : 13

Hardware : Qualcomm Technologies, Inc SDM845

那么我的OnePlus6的CPU架构是ARM v8 64位

ARM v8 64

ARM v8 64

SO库

561bfab2585c

image.png

一种CPU架构 = 一种ABI = 一种对应的SO库;

加载SO库时,需要加载对应类型的SO库;

尽量提供全平台CPU类型的SO库支持;

SO库类型和CPU架构类型

现在至少支持以下七种不同的CPU架构:ARMv5,ARMv7,x86,MIPS,ARMv8,MIPS64和x86_64。每一种CPU类型都对应一种ABI(Application Binary Interface),“armeabi-v7a”文件夹前面的“armeabi”指的就是ARM这种类型的ABI,后面的“v7a”指的是ARMv7。这7种CPU类型对应的SO库的文件夹名是:armeabi,armeabi-v7a,x86,mips,arm64-v8a,mips64,x86_64。

只提供armeabi架构的.so文件而忽略其他ABIs的

armeabi与armeabi-v7a表示支持不同的CPU类型

armeabi是指的该so库用于ARM的通用CPU,而v7a的CPU支持硬件浮点运算。因此armeabi通用性强,但速度慢,而v7a能充分发挥v7a CPU的能力,在AIR打包APK调试模式adobe选择的是通用性强的armeabi模式。

android支持不同CPU的深层含义

首先从硬件支持方便来看,我们的adnroid设备目前为止大部分都是支持ARM芯片,(当然市面上此刻最新的android机器还支持intel等另外的几个芯片,例如intel最新的凌动项目芯片,就获得了android4.1的青睐)。从android版本与支持ARM硬件编码的程度来看:

起初android1.6:只支持armv4与armv5te指令集。

到了android2.0:增加了支持arm-vfp,armv6,armv6t2指令集。

到了android2.2:增加支持armv7-a指令集。

所以armeabi-v7a 应该是与AIR限定支持android2.2以上的条件有关。android2.2以上能让硬件发挥更大的作用。

我项目中使用armeabi还是armeabi-v7a

对于AIR项目来说性能问题是最大的瓶颈,能优化一点就一点,所以如果接平台方SDK或者写ANE的时候使用到SO库,个人推荐全部放到armeabi-v7a下,而不要为了兼容放到armeabi

当你引入一个.so文件时,不止影响到CPU架构。我从其他开发者那里可以看到一系列常见的错误,其中最多的是"UnsatisfiedLinkError","dlopen: failed"以及其他类型的crash或者低下的性能:

所有的x86/x86_64/armeabi-v7a/arm64-v8a设备都支持armeabi架构的.so文件,因此似乎移除其他ABIs的.so文件是一个减少APK大小的好技巧。但事实上并不是:这不只影响到函数库的性能和兼容性。

x86设备能够很好的运行ARM类型函数库,但并不保证100%不发生crash,特别是对旧设备。64位设备(arm64-v8a, x86_64, mips64)能够运行32位的函数库,但是以32位模式运行,在64位平台上运行32位版本的ART和Android组件,将丢失专为64位优化过的性能(ART,webview,media等等)。

以减少APK包大小为由是一个错误的借口,因为你也可以选择在应用市场上传指定ABI版本的APK,生成不同ABI版本的APK可以在build.gradle中如下配置:

android {

...

splits {

abi {

enable true

reset()

include 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a' //select ABIs to build APKs for

universalApk true //generate an additional APK that contains all the ABIs

}

}

// map for the version code

project.ext.versionCodes = ['armeabi': 1, 'armeabi-v7a': 2, 'arm64-v8a': 3, 'mips': 5, 'mips64': 6, 'x86': 8, 'x86_64': 9]

android.applicationVariants.all { variant ->

// assign different version code for each output

variant.outputs.each { output ->

output.versionCodeOverride =

project.ext.versionCodes.get(output.getFilter(com.android.build.OutputFile.ABI), 0) * 1000000 + android.defaultConfig.versionCode

}

}

}

减少SO库体积的正确姿势

构建特定ABI支持的APK

从网络下载当前设备支持的SO库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值