Android的极致瘦身

Android的极致瘦身

删除无用代码

代码也是占用apk的大小,而且有部分代码引用一些无关的资源,然而你想删除这部分资源必须删除特定的代码

资源压缩

  1. 第一个压缩是通过TinyPNG网站进行压缩的。这里的压缩也有个好处,当你图片格式选择
BitmapFactory.decodeByteArray(b, 0, b.length, opt);
opt.inPreferredConfig = Bitmap.Config.RGB_565;

或者inPreferredConfig不填时,占用内存会小3/4.这个会对通道有影响,但是在大部分图片的现实没有问题

  1. 图片格式的选择,大图可以选择使用webp的格式,可以很好的压缩图片大小,但是有个兼容性的问题:Android4.0到Android4.2.1之间的版本不支持无损压缩和透明格式的WebP图片的编解码,这个需要也可以解决使用通用自己的webp格式decode,但是这也会增加包大小,当图片很多时,可以采取这种方式。我打的so有82K,自己权衡吧,我觉得值的。
  2. .9图之坑,apk打包的时候会把.9图转成png,这时会无形中增加3倍图片大小.如果一张很大的.9图,最好放在网上,能不用大的.9图就不用.9图,放在外网时需要对.9图做特殊处理。
  3. 合并项目中一样的图,如关闭按钮等,删除一样的图
  4. 将一些不是很重要的图放服务器下载,有可能的话使用webp,放网上也能节省流量。我这里是剔除了所有大于10K的图。
  5. 使用cocosjs的朋友,可以将打成的图集过下TinyPNG,能节省不少。
  6. 资源尽量放在drawable-xhdpi中,一些适配的资源可以单独抽出来放,大部分资源没必要放很多
  7. 如果支持的so的版本不多的话尽量放在armeabi中,不使用其他的so,如果不能的话,会有一个压缩的库供大家选择,下面会具体介绍的,so可以使用7Z再次压缩。有compile的包使用如下的代码放gradle
  ndk {
            // 设置支持的SO库架构
            abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
        }

gradle优化和工具使用

  1. 在gradle使用minifyEnabled进行Proguard混淆的配置
android {
    buildTypes {
        release {
            minifyEnabled true
        }
    }
}
  1. 开启shrinkResources去除无用资源
android {
    buildTypes {
        release {
            shrinkResources true
        }
    }
}
  1. 清理无用资源
    通过Android Studio自带的 “Remove Unused Resources”小插件来实现了,但是在某些大型项目上这个是不好使的。删除后很大概率编译失败或部分页面挂死、无图等问题。
  2. 删除无用的语言资源
android {
    defaultConfig {
        resConfigs "zh"
    }
}
  1. 微信资源压缩打包工具通过短资源名称,采用7zip对APP进行极致压缩实现减小APP的目标,效果非常的好。建议开启7zip,注意白名单的配置
  2. 针对so的7z压缩方案,如果项目so多的话,可以节省很多空间。
    https://github.com/liyuming1978/NativeLibCompression
  3. 支持插件化,这个需要拆分代码,我们还在努力拆分中。

插件化技术支持动态的加载代码和动态的加载资源,把APP的一部分分离出来了,对于业务庞大的项目来说非常有用,极大的分解了APP大小。
因为插件化技术需要一定的技术保障和服务端系统支持,有一定的风险,如无必要(比如一些小型项目,也没什么扩展业务)就不需要了,建议酌情选择

  1. 清理第三方库和冗余代码,比如httpclient4.3 jar等等公共基础库
  2. Facebook的redex优化字节码

另外,据反应redex后会有崩溃的现象,这个要留意一下,我这里压缩之后都是可以正常运行的

综上:我们原来49M左右大小的包 优化后大约34.27M

你可能感兴趣的:(Android的极致瘦身)