在我的应用程序示例中,调试apk为20Mbs(升级Gradle版本和Gradle插件版本后为13Mbs),而发布apk仅为5Mb。这是为什么?
在build.gradle文件中,buildTypes
部分保持不变,因此R8编译器或ProGuard没有进行任何优化/缩小。
android {
...
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
释放:
调试:
您可以在
lib
文件夹中看到大小上的巨大差异。
最佳答案
除了ProGuard和R8之外,在发行版本期间还会进行更多优化。根据文档https://developer.android.com/studio/build/shrink-code.html
When you build you project using Android Gradle plugin 3.4.0 or higher, the plugin no longer uses ProGuard to perform compile-time code optimization. Instead, the plugin works with the R8 compiler to handle the following compile-time tasks:
代码收缩(或摇树):从应用程序及其库依赖项中检测并安全删除未使用的类,字段,方法和属性(使其成为解决64k引用限制的有值(value)的工具)。例如,如果仅使用几个具有库依赖关系的API,则收缩可以识别您的应用程序未使用的库代码,并仅从您的应用程序中删除该代码。要了解更多信息,请转到有关如何缩减代码的部分。
资源缩减:从打包的应用程序中删除未使用的资源,包括应用程序库依赖项中的未使用资源。它与代码缩减结合使用,以便一旦删除了未使用的代码,就可以安全地删除不再引用的所有资源。要了解更多信息,请转至有关如何缩减资源的部分。
混淆:缩短了类和成员的名称,从而减小了DEX文件的大小。要了解更多信息,请转到有关如何混淆代码的部分。
优化:检查并重写代码,以进一步减小应用程序的DEX文件的大小。例如,如果R8检测到从未使用给定if / else语句的else {}分支,则R8删除else {}分支的代码。要了解更多信息,请转到关于代码优化的部分。
关于android - 为什么发行版.apk小于调试.apk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60529016/