apk文件中有个resource.arsc,用于resource资源文件的映射表
每个资源都有一个ID:0x7f0f0001
0x7f:任意ID开头都是这个字段
0f:代表资源类型的种类,01,02,03等等 (anim,attr,color等等)
0001:代表资源的在该类的下标(0001,0002,0003排序下去)
- SVG图,适用于icon图,android studio自带一些默认的icon图。
svg图输出指定唯独的:
vectorDrawables.generatedDensities('xhdpi','xxhdpi')
用途:简单icon,复杂图不建议
瘦身等级:中
-
tint改变svg图片颜色
瘦身等级:低 -
非国际化的项目,可以省略非中文的其他语言资源
瘦身string.xml
//gradle中
//只保留默认和指定的资源
resConfig('zh-rCN')
瘦身等级:低
- 减少不同版本的so库
项目中存在各种:armeabi,arm64-v8a,x86,x86-64等等so库
在gradle中指定使用版本库
ndk{
abiFilters('armeabi')
}
瘦身等级:高
- 开启代码压缩(混淆)
minifyEnabled true //开启混淆
瘦身等级:低
- 开启资源压缩
shrinkResources true
资源的大图没有地方使用,用Lint的 unused resource 监测出来是无效资源,然而代码中其实是有反射技术获取该资源的。那么,使用这种方式监测出来,再移除资源是不安全的,就可以使用开启资源压缩的方式。把资源压缩,压缩的本质就是用一张空的占位资源替换原始图片,存放于apk中。资源还是能找到,不过就是张空的占位资源了。
其他:如果想要保存这个无效资源,不被占位,可以在res/raw下创建keep.xml文件,keep住该资源,相关链接:压缩代码和资源 | Android Developers
瘦身等级:中 (根据无效资源的大小,瘦身等级不定)
-
用压缩工具压缩UI给的图片
TinyPNG – Compress PNG images while preserving transparency -
WebP转换插件
右键资源,convert to webP瘦身等级:高
-
项目有用到了第三方库,其中有一些根本用不到的资源,可以用插件化的思路减少原始包的大小
瘦身等级:中(根据第三方包的大小)
-
资源的混淆
思路:修改resource.arsc文件中ResourceType,Name,default,文件名,变成混淆的资源。
参考:微信资源混淆瘦身等级:中
网友评论