apk瘦身7步曲
1:图片格式转换为webp格式
AS自带转换工具
webp对图片的压缩,效率可以达到99%,比libjepg使用哈夫曼压缩效率还高,(libjepg使用的是哈夫曼对rgb元素进行变频压缩,webp使用预测技术压缩,利用关键帧 对四面预测 )
选中需要转换的图片所在的文件夹,鼠标右键选择convert to webp, 工具就会把可以转换的图片批量转换为webp,有些图片占用内存很小转换不能减少内存就会不转换。如果想单独转换某种图片可以选择这张图片,鼠标右键选择convert to webp。
//安卓4.2后才支持webp,使用libwebp库兼容全版本
打包好动态库(只支持arm)的demo https://github.com/zhudaihao/WebpDemo
2 :去除多过语言
//去除多语言 只保留英文和中文资源
resConfigs 'en','zh'
3:如果项目使用了第三方库或者自己使用了ndk,配置只需打包支持armeabi-v7的,不配置默认支持全平台,占用内存比较大
//设置支持so库的架构
ndk {
abiFilters "armeabi-v7a"
}
4:使用lint工具删除无用的资源
使用lint:点击AS的AnalyZe选择Run Inspection by Nmae
搜索unused resources
回车后,选择删除资源的范围,是整个工程 还是一个项目(下面图是对一个工程范围删除无用资源)
点击OK后显示无用的资源 (包括xml文件 和图片等);建议备份下,对每个资源核实后一个个删除
5:开启混淆(对代码压缩 优化 混淆 :删除未使用的代码,优化字节码 混淆类 属性 方法名成难读懂的字母)
buildTypes {
release {
//开启代码混淆
minifyEnabled true
//混淆文件配置(会在下面括号文件 Proguard-rules.pro文件 找混淆规则)
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
//注意在proguard-rules.pro文件里面配置混淆
具体配置混淆规则 https://mp.csdn.net/postedit/90575529
6:压缩没有的资源
buildTypes {
release {
//开启代码混淆
minifyEnabled true
//混淆文件配置(会在下面括号文件 Proguard-rules.pro文件 找混淆规则)
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//无用资源压缩(注意minifyEnabled为true才有效)
shrinkResources true
//签名配置
signingConfig signingConfigs.config
}
}
//注意如果你在res -》raw --》新建个keep.xml 文件自己定义删除规则,就需要配置所有需要不被删除的资源
(如果没有配置keep文件,那么系统会处理使用反射的资源)
配置keep.xml文件
如何开启严格模式
<?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_*,@mipmap/tp"
tools:discard="@layout/unused2" />
7:使用AndResGuard微信资源压缩方案
Andresguard是什么
AndResGuard是一个apk压缩工具,它会把原本长的资源路径变短,例如res/mipmap/tb 变成r/m/t
为什么使用AndResGuard
以往开发中,我们通常只对代码混淆,没有对资源文件混淆,res下的文件夹可读性太强,
具体使用 https://mp.csdn.net/postedit/97785182
注意 项目中使用反射获取的资源 需要添加到 白名单 (and-res-guard.gradle),
demo源码:https://github.com/zhudaihao/WebpD