【性能篇3】APK瘦身思路总结

223 阅读3分钟

路漫漫其修远兮,吾将上下而求索

本文主要从优化思路的角度介绍APK瘦身,也参考了市面上目前通用的一些角度,告诉你有哪些角度可以进行apk瘦身。一直在追求方法论而不得,仍会继续长期思考下去,故该文将持续长期更新。

1 APK 分析

这里虽然有些生硬,但做瘦身,APK分析是必不可少的

取APK 进行分析

image.png

1 resources.arsc 分析

如下表所示,取一些未使用到的资源进行查看,可知release包中仍会打包上述资源

类别IDName状态
anim0x7f010065activity_out_left2right未使用到,但仍打包
drawable0x7f020755loading44_20未使用到,但仍打包
string0x7f05009dauthorize_dialog_msg未使用到,但仍打包
layout0x7f0d0033activity_preview未使用到,但仍打包

分析结论1:从上面资源的分析可知,此处应该删除未使用到的资源,避免打包,可以减少APK的大小

2 res分析 image.png 分析结论2:如上图可知,内置的res图片资源过大

2 优化方案

整体优化思路:

  1. 先资源
  2. 后代码

2.1 lint清除本地冗余资源

操作步骤:Refactor-->Remove Unused Resources-->Preview

通过清除本地冗余资源,可以减少APK大小620KB

2.2 assets目录筛查

1 assets目录筛查

操作步骤:shift键搜索assets目录,进入后全搜该资源是否有使用

2 组件筛查

操作步骤:通过工具扫描出未使用的组件,这里由于隐私原因,不便于将工具名介绍出来 通过清除本地废弃assets资源,及删除不用的组件,可以优化32KB

2.3 图片优化

1 图片压缩
官网:tinypng.com/

2 svg替换png 可以按照以下顺序选择图片 developer.android.com/topic/perfo…

image.png

3 去掉xxxhdpi、2010*1080内置图 增加440dpi分辨率目录

经过上述调整,优化约4716KB

2.4 findbugs 查找冗余代码

官网:findbugs.sourceforge.net/

2.5 sdk 优化

操作步骤:从目录C:/Users/(用户名)/.gradle/caches/modules-2/files-2.1中取gradle中配置的sdk信息,通过各owner进行优化 可以采取先优化大的sdk,再优化小的sdk的方法

2.6 代码混淆

R8 开启 Shrinking 压缩 Optimization优化 Obfuscation混淆

1 minifyEnabled混淆配置为true

2 移除无用的resource文件

操作:shrinkResources 配置为true

android {
    .........
    defaultConfig {
        resConfigs "zh-rCN", "zh-rTW", "zh-rHK", "en", "ja", 
    }

    buildTypes {
        
        release {
            minifyEnabled true

            // 开启zipAlign让安装包中的资源按4字节对齐,减少应用在运行时的内存消耗
            zipAlignEnabled true

            //config enable shrink unused resources
            shrinkResources true
        }
    }
}

通过清除无用资源,优化936KB

2.7 resConfigs配置想保留语言

操作:resConfigs 配置内销语言

android {
    .........
    defaultConfig {
        resConfigs "zh-rCN", "zh-rTW", "zh-rHK", "en", "ja", 
    }
}	

通过精简语言,优化2436KB

2.8 动画优化

webview_loading_anim.xml 使用图片过多,可以查找使用图片过多的动画,改为json动画或其他方式

2.9 签名优化

2.10 Redex

2.11 so最小化

2.12 release是否要集成

bugly等sdk release版本不用集成

2.13 功能裁剪

2.14 竞品分析