-
android支持的cpu架构(目前是七种)
armeabi | 第5代 ARM v5TE,使用软件浮点运算,兼容所有ARM设备,通用性强,速度慢 --只支持这个就够了 |
armeabi-v7a | 第7代 ARM v7,使用硬件浮点运算,具有高级扩展功能 --只支持这个就够了 |
arm64-v8a | 第8代,64位,包含AArch32、AArch64两个执行状态对应32、64bit |
x86 | intel 32位,一般用于平板 |
x86_64 | intel 64位,一般用于平板 |
mips | 少接触 |
mips64 | 少接触 |
Android 设备的CPU类型(通常称为”ABIs”)
- armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它.
- arm64-v8a: 第8代、64位ARM处理器,很少设备,三星 Galaxy S6是其中之一。
- armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多。
- x86: 平板、模拟器用得比较多。
- x86_64: 64位的平板。
- 问题
这是最新应用的lib下的目录结构,然后同样打旧版本包的lib目录,发现,旧的包只有armeabi-v7a这个文件夹,再查看各个文件夹下的文件,又发现,新版本的包中确实只有在armeabi-v7a文件夹下有libmupdf.so文件,其他文件夹下的都是fresco的so文件,而armeabi-v7a存放的是32位的so文件。
只保留某一个abi,比如armeabi
为了包大小的考虑,去掉多余的本地库
build.gradle中
android {
defaultConfig {
ndk {
abiFilters 'armeabi'
//abiFilters "armeabi","armeabi-v7a"
}
}
}
-
建议
来自于博客:《与 .so 有关的一个长年大坑 》给的建议是:
1.为了减小 apk 体积,只保留 armeabi 和 armeabi-v7a 两个文件夹,并保证这两个文件夹中 .so 数量一致
2.对只提供 armeabi 版本的第三方 .so,原样复制一份到 armeabi-v7a 文件夹
-
文档
GRADLE构建最佳实践
用GRADLE构建安卓项目已是大势所趋,具体实战中姿势啥的很重要,结合具体应用场景,最佳实践给你最佳的体验
http://www.figotan.org/2016/04/01/gradle-on-android-best-practise/
与 .so 有关的一个长年大坑
https://zhuanlan.zhihu.com/p/21359984
https://zhuanlan.zhihu.com/p/23102158