瘦身优势
- 下载转化率。
- 渠道合作商要求。
Apk组成
- 代码相关:classes.dex
- 资源相关:res、asserts、resources.arsc
- So相关:lib
Apk分析
-
AndroidStudio analyse apk功能
- 查看Apk组成、大小、占比
- 查看Dex文件组成
- 不同版本APK对比
-
nimbledroid.com/ App性能分析
- 文件大小及排行
- Dex方法数、SDK方法数
- 启动时间、内存等
-
jadx 反编译
-
android-classyshark:二进制检查工具
- github.com/google/andr…
- 支持多种格式:Apk、Jar、Class、So等。
Proguard代码混淆
- Proguard介绍:
Java类文件处理工具,优化字节码
- 代码中元素名称改短,移除冗余代码
- 增加代码反编译难度
- Proguard使用
- 配置minifyEnabled为true,debug下不要配置
- proguard-rules中配置相应规则
android{
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
三方库处理
- 基础库统一(图片加载等基础功能用一个库)
- 仅引入所需的部分代码:如Fresco的webp支持
- 选择更小的库,Android Methods Count 插件
冗余资源
- 启用shrinkResources,gradle在打包的时候会自动进行资源的清理。
android {
buildTypes {
release {
minifyEnabled true //是否开启混淆
shrinkResources true //压缩
zipAlignEnabled true ////去掉无用的resourse文件
}
}
}
- 右键,Refactor,Remove Unused Resource
这里需要注意,特别有使用第三方的SDK,有些代码是在jar包里面,但是资源独立拷贝进工程,这样也会被识别成无引用的资源。但是这类资源一般都有特定的命名格式。
图片压缩
- PNG压缩优化
- tinypng.com/ 和 TinyPngPlugin插件
- webp使用
- 即使PNG已经过其他的优化,也能达到28%。
- 缺点: 缺点,加载比PNG慢。
- Android Studio自带了对WebP的转换支持。选中资源,右键Convert to WebP。
- 图片格式选择
- 如果是纯色的icon,那么用svg
- 如果是两种以上颜色的icon,用webp
- 如果webp无法达到效果,选择png
- 如果图片没有alpha通道,可以考虑jpg
- 如果是纯色的icon,那么用svg
资源混淆
- AndResGuard是一个帮助你缩小APK大小的工具,他的原理类似Java Proguard,但是只针对资源。他会将原本冗长的资源路径变短,例如将res/drawable/wechat变为r/d/a。
- github.com/shwenzhang/…
So移除
- 一般选择armeabi
- so动态下载
- 根据手机的cpu来引入so
注意:
- 8月不支持 64 位,App 将无法上架 Google Play!
- 如果用到了renderscript,那么你必须包含v7,否则会出现模糊异常的问题。
- 如果用了RN,那么对于x86需要谨慎的保留,否则可能会出现用户找不到so而崩溃的情况。毕竟rn是一个全局的东西,稍有不慎就可能会出现开机崩的情况。
abiFilters:设置支持的So架构
defaultConfig {
...
ndk {
abiFilters "armeabi", "armeabi-v7a" ,"x86"
}
}