如何缩小APK包的尺寸
原文:https://developer.android.google.cn/topic/performance/reduce-apk-size.html#reduce-resources
安装包越大,用户等待下载的时间就越长。特别是用户使用2G、3G、或者在根据流量付费使用的时候。本文介绍如何缩小安装包的尺寸。
概述
从理解安装包的结构开始,一个APK包由以下组成:
META-INF/ 签名、证书
assets/ 安装包资源,用AssetManager管理
res/ 资源,不在resources.arsc的资源
lib/ armeabi, armeabi-v7a, arm64-v8a, x86, x86_64, and mips
resources.arsc 包含编译过的资源,包括res/values/文件夹
classes.dex classes编译进Dalvik/ART所能理解的DEX文件
AndroidManifest.xml xml格式,包含名字、版本号、要求的权限,对库的引用等等
缩小的方法可以有:
i、ProGuard压缩、移除无用的资源
在build.gradle中加入
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
例如:
android {
// Other settings
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
ii、最小化第三方库
如果第三方库是为服务器端或者桌面版而设计的,它可能会包含很多多余方法和对象。如果证书允许,你可以编辑下这些库。(现在比较多都有分android版,java版,服务器版,使用前注意下就行)
ProGuard压缩也可以清除部分无用的代码,但是不能清除内部的依赖。
iii、支持特定的分辨率
android有这么多个分辨率 ldpi, mdpi, tvdpi, hdpi, xhdpi, xxhdpi, xxxhdpi 只有极少部分会使用特定的尺寸。但是我们推荐每个APP最好包含xxhdpi的尺寸。
iv、减少Animation Frames动画的使用
一堆图片很占空间。推荐使用Drawable Objects、XML(shape)替代
v、压缩PNG图片
可以用aapt工具来减小在res/drawable的png的尺寸。aapt工具可以将不需要多于256种颜色的真彩色PNG转换为具有调色板的8位PNG。 这样做会产生质量相同但占用内存较小的映像。
有几个点需要注意:
1、aapt工具不会优化资源/文件夹中包含的PNG文件。
2、图像文件需要使用256个或更少的颜色的aapt工具来优化它们。
3、aapt工具可能会使已压缩的PNG文件膨胀。为了防止这种情况,可以在Gradle中使用cruncherEnabled标志为PNG文件禁用此过程。
aaptOptions {
cruncherEnabled = false
}