【发布时间】:2017-12-20 10:28:14
【问题描述】:
面试时有人问我如何减小 APK 文件大小,我的回答是管理资源以及管理我正在使用的库并删除任何未使用的库,但他告诉我还有其他方法可以减少APK 文件大小
谁能告诉我这些方法是什么?
【问题讨论】:
-
阅读This。
面试时有人问我如何减小 APK 文件大小,我的回答是管理资源以及管理我正在使用的库并删除任何未使用的库,但他告诉我还有其他方法可以减少APK 文件大小
谁能告诉我这些方法是什么?
【问题讨论】:
您可以使用以下方式减小 APk 的大小。
【讨论】:
按照这些步骤来减小您的 APK 文件大小。
第一步:
确保您在release buildType in build.gradle 文件中启用了 minify:
buildTypes {
release {
minifyEnabled true
}
}
通过这样做,您还启用了 proguard,因此您需要添加 proguard 规则以在项目中使用库。例如,这是改造 2 的保护规则:
-dontwarn okio.**
-dontwarn javax.annotation.**
您可以在proguard-rules.pro 文件中添加这两条规则。
第二步:
确保您已在 build.gradle 文件中的 release buildType 中启用资源收缩:
buildTypes {
release {
shrinkResources true
}
}
所以build.gradle 文件中的最终release 范围应如下所示:
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
第三步:
您可能在项目中使用过的一些库包含一些针对不同国家和语言的额外资源。例如,一个库可能有两个 string.xml 文件,一个用于英语,一个用于日语。但是您的应用程序仅支持英语,因此您不需要那些日语字符串。
为此打开您的 build.gradle 文件并添加以下行:
resConfigs "en"
到你在 android 范围下的 defaultConfig 范围:
android {
...
defaultConfig {
...
resConfigs "en"
}
}
第四步:
【讨论】:
我只有这些方法!希望对你有帮助
minfyEnabled true【讨论】:
请按照以下步骤,
1.使用 .svg 格式图标集
是时候告别 PNG 并欢迎 矢量绘图了。使用它们有几个好处。我们不必担心不同的设备 DPI,它还有助于减小 apk 大小。使用支持库 23.2,我们现在可以使用 ImageView 的 app:srcCompat 属性而不是 android:src 来使其向后兼容。 当您从 Google 的 Material Design 图标库下载系统应用图标集时,请下载 .svg 格式而不是 .pngs。这帮助我们将应用大小减少了 1 Mb。
2。压缩 PNG
我们正在为所有屏幕密度的演练屏幕使用 PNG。 PNG 的质量和大小都非常高,这只会扩大我们的应用程序大小!在 Weather Stream v1.2 中,当我们开始优化我们的应用程序大小时,我们压缩了我们的演练屏幕和繁荣!演练屏幕的大小约为以前的 1/10! (是的!1/10)。太疯狂了!我们快速创建了一个版本并检查了不同屏幕密度下的图像质量,看起来都一样。快速的 Google 搜索将为您提供许多工具来帮助您压缩 PNG。看到谷歌设计团队分享的Device Metrics,我们也把ldpi资源去掉了。
3.仅使用特定的 Google Play 服务库。
在 Google Play Services 6.5 之前,我们必须编译整个包。但是现在我们可以有选择地将它编译到我们的应用程序中。我们现在只使用 Google Cloud Messaging、Google Maps 和 Google Location API。
4.使用 Proguard
Proguard 用于代码混淆,它还从依赖项中删除未使用的 Java 代码。使用 Proguard 后的结果是较小的 apk 文件大小,难以进行逆向工程。启用proguard:
build.gradle
android {
...
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
5.收缩资源
Android Gradle 插件支持在构建过程中使用 shrinkResources gradle 属性自动排除未使用资源的功能。仅此一项就将 apk 大小减少了约 0.5 Mb。要在您的发布版本中利用这一点,只需将 shrinkResources true 添加到您的发布配置中。
build.gradle
android {
...
buildTypes {
release {
shrinkResources true
minifyEnabled true
...
//Other parameters
debuggable false
jniDebuggable false
renderscriptDebuggable false
}
}
}
6. res Confing
“resConfigs” 属性将在构建应用程序时删除所有其他本地化资源。在我们的例子中,“防盗锁屏”只支持英文。虽然所有支持库都可能具有其他语言的本地化文件夹。我们不需要。因此,添加以下行以仅允许在 APK 文件中添加英文资源。
defaultConfig {
//...
//...
//...
//strip other than english resources
resConfigs "en"
}
【讨论】:
我能想到的还有 3 种方法:
minifyEnabled true,代码的混淆也会缩小你的apk大小
【讨论】:
将此添加到您的 gradle 文件中
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
【讨论】: