Android apk 体积优化方法总结

1. 大图使用WebP

使用WebP可以非常有效降低图片的大小,而且不会降低图片的质量。在Android Studio右击图片就可以转换了,非常方便。

2. 使用TinyPNG压缩

https://tinypng.com 是一个非常好的有损压缩工具,降低部分质量情况下可以大幅度降低图片大小,有对应的开放API,也有对应的IEDA插件也方便我们使用。

3. 去掉不必要的 so 库

实际上我们只需要支持armeabi-v7a即可。

android{
    ...
    defaultConfig{
        ...
            ndk {
            abiFilters "armeabi-v7a"
     }
}
4. so 动态下载

so文件是占据很大的体积,对于一些不常用的功能,我们可以考虑动态下载,就无需打包到apk中。

System.load(String filePath);

5. 去除无用资源

Android Studio提供了 Remove Unused Resource功能,可以方便我们去除无用的资源文件,但是使用的时候需要谨慎,如果代码中存在getIdentifier方式获取资源文件,切记不要删除,需要写入raw/keep.xml文件中,避免被删除,特别要注意第三方库的资源文件。

Refactor > Remove Unused Resource


下面是一个典型的案例 raw/keep.xml

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
    tools:keep="@style/rc_*,@style/RC*,@style/Rc*,@xml/rc_*,@drawable/rc_*,@array/rc_*,@layout/rc_*,@color/rc_*,@dimen/rc_*,@string/rc_*,@integer/rc_*,@drawable/u*">
</resources>
6. shrinkResources

shrinkResources 和Remove Unused Resource效果是差不多的。Remove Unused Resource 是物理移除,shrinkResources 是打包过程中去掉无用的资源文件,也是通过raw/keep.xml文件来避免没有直接引用的文件被误删。

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

AndResGuard 是微信团队开源的资源文件混淆工具,是一个帮助你缩小APK大小的工具,他的原理类似Java Proguard,但是只针对资源。他会将原本冗长的资源路径变短,例如将res/drawable/wechat变为r/d/a,不但可以降低apk体积,也可以避免资源文件被盗用。

8. Java 代码混淆

开启代码混淆也是降低apk体积的重要手段,可以删除没有使用的代码,并且可以对代码进行压缩。每一个都应该开启混淆,这是保证代码安全的非常重要手段。