APK打包优化-瘦身思路

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,文件名,变成混淆的资源。
    参考:微信资源混淆

    瘦身等级:中

你可能感兴趣的:(APK打包优化-瘦身思路)