APK打包优化-瘦身思路

作者: space0o0 | 来源:发表于2019-09-14 16:11 被阅读0次

    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打包优化-瘦身思路

        本文链接:https://www.haomeiwen.com/subject/sjdayctx.html