随着应用业务功能的日益复杂,使用的第三方库和SDK也会日益增加,这样导致的直接后果就是安装包的体积日渐增加,除了使用插件化的手段,减少安装包的体积,我们还可以从以下几个方面着手,进行安装包大小的优化。

  代码混淆

  ProGuard是一个开源的Java代码混淆器,并且默认集成到Android SDK中,它具有以下功能:

  压缩:移除无效的类、属性、方法等。

  优化:移除没用的结构。

  混淆:把类名、属性名、方法名替换为一到两个字母

  Gradle配置

  开启minifyEnabled 开启混淆

  开启shrinkResources 我们在打包的时候默认会把没有用到的资源(比如图片)也打包成app,徒增了应用的大小。现在我们可以利用Gradle来优雅的去除没有用到的资源文件了!就是在gradle中配置shrinkResources true,这个依赖于minifyEnabled,所以mini fyEnabled也要为true才会生效。如下代码示例


buildTypes {
        debug {
            minifyEnabled true
            shrinkResources true
        }
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

  资源优化

  使用Android Lint删除冗余资源

  Step 1. 单击菜单栏中的Analyze -> Run Inspection by Name,弹出工具选择框

  Step 2. 在弹出的输入框中输入Unused resources,回车进入扫描前目录设置对话框

  Step 3. 选择需要扫描的目录或者整个工程,单击OK开始

  Step 4. 扫描完成后生成报告,可在Android Studio中直接查看并删除确认无用的资源文件。

注:Android Lint不会分析assets文件夹下的资源,因为assets文件可以通过文件名直接访问,不需要通过具体的引用,Lint无法判断资源是否被用到。


  资源文件最少化

  在这方面有以下一些建议:

  1. 尽量使用一套图片资源,遇到一些图片在不同分辨率手机上变化差异过大的情况时,再考虑在相应文件夹下放入这个特定的图片
  2. 使用一套图、一套布局、多套dimens.xml文件,在使用最小资源的情况下,解决多分辨率适配
  3. 使用轻量级的第三方库
  4. 减少项目中的预置图片,预置图片改成有服务器下发,尽可能将程序与资源分离。

  图片优化

  tinypng有损压缩

  png换成jpg

  jpg换成webp

其中安装jpg转webp工具: brew install webp

转换命令:cwebp -q 50(或者75) input.jpg output.webp

  大图缩小

  覆盖aar里一些默认的大图,主module(apk)会覆盖依赖module的资源文件,但是values会合并