Android 缩小apk包体积的几步

1,195 阅读2分钟

第一 将项目中使用的图片转位webp格式,在AS中选择需要转的文件夹,右键选中convert to Webp就可以了

第二 由于第三方库中包含了大量的国际化资源,根据情况通过配置删除

可以参考这篇博客(https://blog.csdn.net/ouyang_peng/article/details/97646945)

第三 只保留armeabi-v7a

(如果项目中包含第三方SDK或者自己使用了ndk,如果不进行配置会打包全cpu架构的动态库进入apk。
对于真机,只需要保留一个armeabi(armeabi-v7a)就可以了)

第四 lint检查删除一些无用的代码,资源文件

第五 开启混淆

开启混淆(使用proGuard)

ProGuard的三大作用
压缩
    移除未被使用的类、属性、方法等,并且会在优化动作执行之后再次执行(因为优化后可能会再次暴露一些未被使用的类和成员。
优化
    优化字节码,并删除未使用的结构。
混淆
    将类名、属性名、方法名混淆为难以读懂的字母
    

第六 打包时使用shrinkResources = true,开启删除无用资源(与lint不同)

shrinkResources 用来开启压缩无用资源,也就是没有被引用的文件(经过实测是
drawable,layout,实际并不是彻底删除,而是保留文件名,但是没有内容,等等),但是因为需
要知道是否被引用所以需要配合mififyEnable使用,只有当两者都为true的时候才会起到真正的删
除无效代码和无引用资源的目的
与去除无用资源不同的是,比如 某个java类没有用到,被混淆时删除了,而该类引入了layout资
源 。此时会将这个资源也压缩掉


如何开启严格模式

<?xml version="1.0" encoding="utf-8"?>

<resources xmlns:tools="http://schemas.android.com/tools"

tools:shrinkMode="strict" />

如何手动保留xml

<?xml version="1.0" encoding="utf-8"?>

<resources xmlns:tools="http://schemas.android.com/tools"

tools:keep="@layout/base_*"

tools:discard="@layout/unused2" />

第七

AndResGuard微信资源压缩方案。关于andResCuard的相关介绍请参考这篇文章(https://blog.csdn.net/CG_Wang/article/details/70183864)