Android客户端.So 精简策略

/**
 * Created by chenchangjun on 17/10/27.
 */

1..So 理论基础

首先介绍一下 目前所有手机上 .So 的指令集

Android系统目前支持以下七种不同的CPU架构,每一种都关联着一个相应的ABI。而架构上对应的指令集是以下几种

  • Intel 64 指令集在 x86基础上扩展的(x86指令集有两种CPU位,既有32位的,也有64位的.)
  • armabi 是针对旧的或者普通的ARM v5 CPU.
  • armabi-v7a 是针对ARM v7 CPU (是针对有浮点运算或高级扩展功能的arm cpu).
  • arm64-v8a 是针对最新的 ARM v8a CPU的(就是在MIPS64架构上增加了ARMv7).

安卓这些固定平台的应用通常都编译成ARM处理器的程序,不全都会编译成Intel或者MIPS处理器的程序。

为了解决这个问题,Intel和MIPS要使用特殊的转换软件把ARM的指令转换成他们处理器使用的指令。这当然是会降低性能的

2.项目问题解决

2.1 思路分析

目前项目中的jniLib是这样的,相当冗余.

img_db5ad242f1e6ab78f6187b08a9ab26c6.png
image.png

思路是这样的

  1. armabi指令集是全arm平台(包括armV7 armv8,以及x86,x86_64),都兼容的 指令集.
  1. armabi-v7a 是针对有浮点运算或高级扩展功能的arm cpu,也就是armabi的高性能版本. Android 5.0+同时支持32位与64位ABI的.so. 有arm64-v8a就用,没有就fallback到armeabi-v7a或armeabi.
  1. arm64-v8a 64位指令集,运行在64位手机cpu上,目前主流cpu都已经是64位.

所以说:

为了尽量兼容市面所有手机类型, 尽可能减少crash几率. 所以,
ARM7, ARM8设备能够向下兼容ARM5的SO,也就是说只打包armabi下的so即可

2.2 调研第三方lib库

为了验证这个导论, 我反编译了一些流行app文件.

反编译了 微博 的jniLib中的 文件.

只用了 armabi的兼容包.

img_3fbb82ccf546143f398adb123d03146e.png
image.png

反编译 微信

他们只用了armabi的兼容包,但是里面有_v7.so后缀的 高性能包,提高性能.

img_3c874085abf94ba02c19b1eb0a687e20.png
image.png

反编译 淘宝

只用了 armabi的兼容包.

img_5867bc91b2ca5ed82428b9ad35194425.png
image.png

第三方总结

这里, 都是用了 armeabi包下的.so .

不同的是, 有的他们在这个文件夹下的.so直接做了v7兼容包, 有的则可能选择了插件加载.so的方式.

相同的是, 都是只打包armeabi,提高最大的兼容性,并且减少apk体积.

3.实现,测试

3.1 代码实现

为了确保不出现问题(比如gradle引用第三方可能存在so),保留可选择性的打包.我没有删掉其他cpu指令集,而是用代码选择性编译,只保留armeabi进行编译.

//'armeabi-v7a' // , ‘arm64-v8a’, ‘x86’, ‘x86_64’
        ndk {
            abiFilters 'armeabi'
        }
        

3.2 结果对比

img_d421a50640ee50443f98867906bc5b88.png
image.png

4. 总结

目前,可以只编译armeabi下的so,因为armeabi兼容所有的cpu架构.
理论上行得通, 主流app也都是这么做的.
至于,性能问题,so包影响程度不超过15%,性能问题 最大的还是在手机质量和运行内存..........

5. 后期方向

5.1 只保留armabi-v7a或者arm64-v8a

随着Android 版本的提高(Android5.0以后的版本支持v7和v8指令集), 手机性能的提高(不管高通,麒麟还是联发科,目前主流cpu都是64位处理器.

也就是说支持v7和v8指令集.越来越没必要做ARM5和X86的支持了,以后就更没必要。

5.2 采用插件化 加载.so 包

我们可以采用 插件化加载.so .

优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/658837

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。