一. APK结构分析
1.assets:
包含了应用的资源,这些资源能够通过AssetMaanger对象获得
2.lib:
办好了针对处理器层面的被编译的代码。这个目录针对每一个平台类型都有一个子目录,比如armeabi,armeabi-v7a,arm64-v8a,x86,x86_64和mips.
3.res:
包含了没被编译到reasource.arsc的资源
4.META_INF
包含CERT.SF和CERT.RSA签名文件,也包含了MANIFEST.MF文件
5.class.dex
包含了能被Dalvik/Art虚拟机理解的dex文件格式的类。
6.resources.arsc
资源映射表
7.AndroidManifest.xml
注意:占用空间的主要是代码,图片,资源和lib和asset文件,主要方向精简代码,压缩图片,去除无用的库,减少asset里面文件。
二.瘦身维度01---资源选择
对于绝大数app来说,只需要去一套设计图就足够了。鉴于现在分辨率的趋势,建议去720p的资源,放到xhdpi目录。对于多套资源,只使用720p的一套资源,在视觉上相差不大,很多的公司的产品也是如此。但却能显著的减少资源占用大小,顺便也能减轻设计师的出图工作量。注意,这里不是说把不是xhdpi的目录都删除,而是强调保留一套设计资源就够了。
三.瘦身维度02---图片优化
1.各个图片格式之间的差异
a.jpg/jpeg
jpg格式中不能有透明区域(没有A通道),在保存时会自动保存为白色。
jpeg非常适合用来存储照片,用来表达更生动的图像效果,比如颜色渐变。
b.PNG
有更好的透明度支持,比jpeg图片大小大。
c.webp
相同质量的图片,webp具有更小的文件体积。在放大时,不会失真,所以非常适合用来绘制企业Logo,Icon等。
d.svg
使用XML来描述图片。SVG加载速度快于PNG,但是渲染熟读会慢于PNG,毕竟PNG有硬件加速,但平均下来,加载速度的提升弥补了绘制的速度缺陷。
四.瘦身维度03---无用资源剔除
AS给我们提供了一键移除所有无用的资源,但是这种方式不建议使用,因为如果某资源仅存在动态获取资源id的方式,那么这个资源会被认为没有使用过,从而会直接被删除。
shrinkResources true:去除无用资源
在打包的时候会自动清除掉无用的资源,但是经过实验发现打出的包并不会,而是会把部分无用资源用更小的东西替换掉。
五.瘦身维度04---(备用资源)国际化资源配置优化
android {
defaultConfig {
//只适配英语
resConfigs 'en'
}
}
六.瘦身维度05---动态库打包优化
1.只配置armeabi-v7a
android {
defaultConfig {
ndk {
abiFilters "armeabi-v7a"
}
}
}
2.通过productFlavors配置动态包
flavorDimensions "default"
productFlavors {
arm32{
dimension "default"
ndk {
abiFilters "armeabi-v7a"
}
}
arm64{
dimension "default"
ndk {
abiFilters "armeabi-v8a"
}
}
}
}
3.通过splits分包
splits{
abi{
enable true
reset()
include "armeabi-v7a", "arm64-v8a"
universalApk true
}
}
此时打包会输出三个包
image.png
4.远程so思路
a.网络挂载so库。
b.本地热加载。
image.png
七.瘦身维度06---代码压缩/代码混淆
将 minifyEnable设置为true即可。
八.Matrix-ApkChecker方案
ApkChecker 作为Matrix系统的一部分,是针对android安装包的分析检测工具,根据一系列设定好的规则检测apk是否存在特定的问题,并输出较为详细的检测结果报告.
1.执行命令:
java -jar /Users/zhouhao287/Desktop/apm/matrix-apk-canary-0.5.1.jar --config /Users/zhouhao287/Desktop/apm/apk_config.json
2.结果分析:
image.png3.文件解析:
结果中可以看到示例apk的相关全局信息如下图所示, so 库的大小和AS自带分析是一样的! image.png里面包括一些异常大小的资源文件,比如我们项目中的GIF图片很多都是500k左右,然后我自己在网上找了下免费压缩的效果看上去很不错,大小为12K,对你没看错,压缩后大小12K 明白什么了吗!!!
网友评论