前言
随着业务需求的不断增加,app的包体积会越来越大:一方面是为了实现相应的功能引入一些第三方库,一方面是对于一些资源的利用没有进行优化处理,等等~但是app体积越大,用户下载或更新的成本就越高,这会严重的影响app的用户体验以及推广。因此有必要对包体积进行优化。下边主要是整理了一些常见的优化手段
优化方案
需要对体积进行优化,首先得了解我们apk最后的构建成分,哪些文件相对较大,再针对性进行优化处理。Android Studio为我们提供了包大小分析工具:Android Studio→ Build→Analyze APK
选择需要分析的apk后,工具会自动分析包的各项资源占用并按大小排序
通过上边的分析,发现apk较大的资源都在res、lib和assets三个目录下,接下来就开始优化这三个文件夹的内容。
图片等资源的处理(res文件夹)
图片压缩
android的图片资源一般会有静态图和动态图两种,我们可以分别进行压缩处理:
当然,懒惰驱动技术的创新,哈哈~有些童鞋为我们提供了更便捷的方式,我们可以直接在android studio安装tinypng插件进行图片压缩:
通过Tools--TinyPNG,然后选择相应的文件夹,该插件会自动调用tinypng的服务进行图片压缩,一步到位~
图片精度保留
只保留drawable-xxhdpi一套超高精度图片,确保大部分机型都可使用而不会模糊
lib文件夹处理
lib文件夹主要存放了我们引用到的一些第三方so库。目前市面上绝大部分的CPU架构都是 ARMv7/ARMv8,可以在gradle中加入配置只保留这两种so库,具体配置如下:
android {
...
defaultConfig {
...
ndk {
abiFilters "armeabi-v7a", "arm64-v8a"
}
}
}
assets文件夹处理
该文件夹是存放不进行编译加工的原生文件,通常会用来存放一些一些图片、音视频、h5等资源文件。对于该文件夹的内容:
- 确保没有被使用到的资源被及时删除
- 音视频文件,可以进行压缩,或者更换更优编码的方式
配置优化
我们可以在build.gradle中开启代码混淆和资源缩减,这样子没有被使用到的资源就不会被打包进apk中,具体配置如下:
buildTypes {
release {
minifyEnabled true
shrinkResources true
}
}
对比分析
Analyze APK工具,除了可以分析某个apk的包大小信息外,还提供了一个【Compare with previous APK】,就在该工具的右上角处。选择之前的版本和我们通过上述流程优化后的版本进行对比,发现整体的包大小还是下降了不少~
其他方案的一些总结
微信开源工具AndResGuard的使用
AndResGuard是一个帮助你缩小APK大小的工具, 官方文档和地址在:AndResGuard:
- 将原本冗长的资源路径变短
- 使用7zip对apk进行压缩 当然它有自身的一些局限性,使用需要仔细参考官方文档的说明,以免出现资源查找不到导致的崩溃等问题。
插件化
目前市面上的插件化技术比较多,各有优劣。通过该技术可以让我们将一些附加业务以插件的形式提供给用户,让用户按需下载使用,减少主apk的包大小。这里就不进行细究~