有人在采访中问我如何减少APK文件大小,我的答案是管理资源,管理我正在使用的库并删除任何未使用的库,但他告诉我还有其他方法可以减少APK文件大小
谁能告诉我这些方法是什么?
答案 0 :(得分:5)
您可以使用以下方式减少APk大小。
答案 1 :(得分:2)
按照以下步骤减少APK文件大小。
第一步:
确保您在release
文件中的build.gradle
buildType中启用了缩小:
buildTypes {
release {
minifyEnabled true
}
}
通过执行此操作,您还启用了 proguard ,因此您需要添加proguard规则以在项目中使用库。例如,这是retrofit2的预备规则:
-dontwarn okio.**
-dontwarn javax.annotation.**
您可以在proguard-rules.pro
文件中添加这两条规则。
第二步:
确保您已在release
文件的build.gradle
buildType中启用资源缩减:
buildTypes {
release {
shrinkResources true
}
}
因此release
文件中的最终build.gradle
范围应如下所示:
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
第3步:
您可能在项目中使用过的某些库为不同的国家/地区和语言提供了一些额外的资源。例如,一个库可以有两个string.xml文件,一个用于英语,一个用于日语。但是你只在你的应用程序中支持英语,所以你不需要那些日语字符串。
执行此操作打开build.gradle文件并添加以下行:
resConfigs "en"
到android scope下的defaultConfig范围:
android {
...
defaultConfig {
...
resConfigs "en"
}
}
第4步:
答案 2 :(得分:1)
请按照以下步骤进行操作
<强> 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)。太疯狂了!我们快速创建了一个构建并检查了各种屏幕密度的图像质量,看起来一样。快速谷歌搜索将为您提供许多工具,帮助您压缩您的PNG。在看到Google Design团队分享的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 :(得分:1)
我只有这些方法!我希望它可以帮到你
minfyEnabled true
答案 4 :(得分:0)
我还有3种方法可以想到:
minifyEnabled true
答案 5 :(得分:-1)
将此内容添加到您的gradle文件中
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}