Android性能优化之---apk瘦身
2020-04-24 本文已影响0人
小程序猿一枚
背景
- 随着业务的发展app体积越来越大,由刚开始的几M到后来的几十M。APP越来越大会导致用户使用成本会上升,进而导致用户的流失等等。。。。
压缩APP,减小app体积刻不容缓!!! -
随着Android studio 3.0 发布,也随之提供了 Analyser 来分析apk
image.png
apk结构分析
apk有lib、classes.dex、assets、resources.arsc、res等文件组成
- lib/:存放so文件
- classes.dex:Dalvik字节码
- assets /:可以存放一些配置文件,这些文件的内容在程序运行过程中可以通过相关的API获得。
- resources.arsc:编译后的二进制资源文件的索引(apk文件的资源表索引)
- res/ :资源文件目录,包括图片、字符串等等。
结构详细介绍请移步
image.png
以上面截图为例我们apk瘦身的主要目标有了,主要是lib、res、classes.dex。话不多说,开始步入正题;
apk瘦身开始
1、lib
so文件与cpu的关系或者联系
可以看到,该目录下主要存放so文件的,so文件包括:armeabi、armeabi-v7a、arm64-v8a、mips、mips64、x86、x86_64等。
目前市面上的兼容市面是的手机主要保留armeabi-v7a和arm64-v8a就可以了
或者把so文件放在服务器上动态获取
buildTypes {
release {
//省略其他配置
ndk {
//选择要添加的对应cpu类型的.so库。
abiFilters 'arm64-v8a', 'armeabi-v7a'
}
}
}
2、classes.dex
classes.dex中包含了所有的java代码,当你打包时,gradle会将所有模板力的.class文件转换成classes.dex文件,当然,如果方法数超过64K的话,需要多个classes.dex来存放。换句话说,就是减少代码量。我们可以通过以下方法来实现:
- 减少不必要的第三方库的引用
- 避免使用枚举
- 避免引用重复功能的库(如glide,picasso,fresco,image_loader,只需引用一个就好)
- 尝试自己造轮子
- 开启minifyEnabled混淆代码
等等
3、res
该目录下存放各种图片、布局文件以及资源文件等,优化步骤主要有
图片资源
- 保真压缩图片
可以使用一些图片压缩网站或者工具压缩你的资源文件吧,例如TinyPng、智图等。 - 保留一套图片(xxxhdpi)
- 使用webp格式
- 合理的服用图片资源
- 避免使用帧动画
- 清除不使用的图片
- 开启压缩
release {
//省略其他配置
minifyEnabled true //混淆代码
zipAlignEnabled true
shrinkResources true //资源瘦身
}
}
等等
语言资源
根据app使用范围,删除不一样的语音资源
defaultConfig {
//隐藏其他配置
resConfigs "zh-rCN"//只保留中文简体
}
其他方面优化
合理使用lint工具,删除不在使用的资源文件和代码等等