作者: Qingan Li 邮箱:qingan@whu.edu.cn
问题及背景
手机应用的Apk文件瘦身优化, 通常优先级排在启动优化、卡顿优化之后。但是,对于稳定期的APP项目,Apk文件瘦身有如下好处:
1. 满足强制要求
- 满足应用商城的需求。比如,Google Play对上架的App就有大小限制。
- 满足手机厂商的预装需求。Apk越大,单价成本越高。
2. 提升下载转化率
- 如果某App的APK大小相比同类型的App要更小的话,可以预期下载率会上升,使用率也会上升。
3. 提升性能、降低成本
- 加快安装时间。Apk变小后,文件拷贝、解压、编译、签名校验等过程都会加快。
- 降低运行时内存占用。
- 降低ROM存储占用。
- 降低下载带宽需求。
Apk分析
Apk组成
Apk文件解压缩后,是一个文件夹,其主要成分包括:classes.dex文件、so文件、资源文件等。其中,
- dex文件。这是Android系统的可执行文件,包含应用程序的全部操作指令以及运行时数据。通常命名classes.dex文件。
应用程序员开发的Kotlin或Java代码,先被编译成Java字节码文件格式.class,然后再利用dx工具将所有.class文件合并到一个classes.dex文件。在合并过程中,不仅通过数据共享降低了信息冗余,而且将适合解释执行的Java字节码转化成更适合编译优化的dex字节码。相比传统的jar文件,dex文件的大小能较少约50%。 ![Alt text](appSizePreview.assets/image-1.png){:width="100" height="100"}
- so文件。应用程序所依赖的第三方库(native代码)。通常在lib目录下。
- res。应用程序用到的资源文件。一般包括图像,布局文件,字符串,音频,XML文件,这些资源是可以被Android系统管理的,并且根据配置(比如语言,屏幕)自行选择。
- assets。应用程序的资产文件。主要存储二进制文件或原始文件,如HTML,JSON,音频文件等。
- META-INF。元数据信息,包含签名等信息。
- Resources.arsc。 res资源的ID映射文件。
- AndroidManifest.xml。 安卓的清单文件,包含了应用程序的基本信息,组件的声明,应用程序的权限要求以及其他重要的元数据。
Apk大小分析
根据对抖音,快手,微信,今日头条,淘宝等热门app的分析,Apk文件中各成分的存储占比如下:
- Dex 44%
- So 34.36%
- Res 11.38%
- Assets 8.14%
- Resources.arsc 0.74%
- META-INF 0.74%
- AndroidManifest.xml 0.06%
跨App的重复度分析
-
分析了11个流行App中so文件的存储占比,平均占比38%。
-
分析了11个App间重复的so文件数