一、apk主要结构
可以通过Android studio>build>Analyze APK
分析apk结构
-
res
包含所有没有被编译到.arsc
里面的资源文件 -
lib
用于存放so
库文件 -
assets
主要存放预置数据,包括配置文件,图片,html,字体等,通过AssetManager
访问 -
META_INF
签名信息,用来保证apk包的完整性和系统的安全。在生成一个APK的时候,会对所有的打包文件做一个校验计算,并把结果放在该目录下面 -
classes.dex
包含编译后的应用程序源码转化成的dex字节码。如果开启了multidex
会存在多个dex文件 -
resources.arsc
一些资源和标识符被编译和写入这个文件 -
Androidmanifest.xml
编译时,AndroidManifest.xml
会被转化成二进制格式
二、瘦身方案
1. res优化
-
png优化
- png压缩
- 大图背景,可以考虑纯色图+后台下载方案
- 只用1~2套图(
xh xxh
,对于出现次数不多的图片可以只切一套,例如引导图,设置页背景图) - 使用
shape xml
、自定义View替代png
- 使用
.9
图替代普通png
- 使用
svg
替代png
(注意兼容性) - 使用
webp
替代png
(最低只支持4.0) - 第三方库中无用图片可以采用1x1透明png替代
- raw优化
- 音视频文件采用
压缩格式
文件,ogg,mp3,mp4等
- 音视频文件采用
- 移除无用资源
shrinkResources true
Android Studio > Refactor > Remove Unused Resources
- 删除无用语言资源
resConfigs "zh"
2. lib优化
- 仅保留主流架构的
so
库,armeabi
(微信、头条仅保留armeabi)、armeabi-v7a
、arm64-v8a
(如果涉及一些多媒体功能,美颜、音视频) - 较大的
so
可以动态下发,需要代码做逻辑判断
3.dex优化
-
minifyEnabled true
,混淆、压缩代码 - 删除一些无用库
- 移除无用代码
Android studio>Analyze>Inspect code
- 注解替代枚举
- 剔除
R.class
网友评论