【问题标题】:Android proguard enabled APK size increases on adding a new libraryAndroid proguard 启用 APK 大小在添加新库时增加
【发布时间】:2018-03-25 05:22:14
【问题描述】:

我们的 APK 中有几个依赖库,并启用了 proguard 和 multi dex。 我们有 3 个 dex 文件我们打算使 APK 大小尽可能小。

我们目前正在尝试集成“新广告 SDK”。

在集成时,我们发现在包含依赖库后,APK 的大小异常增加。

在示例应用中,库的内存占用约为 ~280 KB。但是当我们在应用中添加相同的依赖项时,我们的 apk 大小会增加 595 KB。他们的proguard规则保留了他们所有的课程。

在 android studio 和 classyshark 中使用 APK 分析器进行调试时,我们观察到 dex 文件中其他包和类(如 facebook、google、glide 等)的大小正在增加。

但是,它们的方法计数保持不变。这只能意味着 proguard 压缩受到损害。因此,APK 大小增加 等于 280 KB (ads sdk) + X [315 KB]我们正在努力消除不必要的 APK 大小增加 315 KB。

任何有关投资导致这种异常增加的原因的线索将不胜感激。

请分享在这种情况下可能有帮助的任何 dex 选项/proguard 优化。

更新: 相关 SDK 的 proguard 规则如下所示:

-keep class com.example.** { *; }

-dontwarn com.example.**

谢谢。

【问题讨论】:

  • 你是用consumerProguardFiles 'consumer-proguard-rules.pro'代替默认的吗?
  • 不,我们不使用 consumerProguardFiles。我们将每个库的 proguard 规则添加到我们的主要 proguard 规则文件中。
  • 你能分享你的build.gradle吗?
  • 我们的项目及其商业应用程序中有多个库模块(超过 10 个)。不幸的是,我不能分享源代码。但如果您有任何想法/问题,我绝对可以分享更多信息。
  • “他们的 proguard 规则保留了他们所有的课程。”,-我建议您使用该规则的确切内容编辑您的问题。如果您不想透露具体的广告 SDK,可以小心地将真实的包名替换为 com.example。库本身的 aar 文件中是否也有消费者 proguard 文件?如果是这样,也将其发布。

标签: android apk proguard android-multidex classyshark


【解决方案1】:

我可以从您的帖子中推断出很可能是在 proguard 中添加的一些规则作为新的 lib 配置的一部分导致 lib 的代码收缩减少,例如 facebook、google。很难避免 3rd 方 sdk 规则,但是如果您的应用尚未采用其他方法,您仍然可以使用其他方法缩小您的 apk。如果您的图形资源仍然使用 PNG 将它们更改为 webP,它将减少 apk 的大小。

如果作为 ads sdk 的一部分存在,还要检查公共库。一旦我们在我们的应用程序中看到了两个版本的 google play 服务,我们必须通过 gradle config 排除 sdk 依赖项中存在的一个。

【讨论】:

  • 感谢您的意见。我们已经涵盖了减少 APK 大小的大部分基础,例如将我们的资源转换为 webp 和 svg、消除未使用的资源、字符串优化、proguard 等。但这是我们最近观察到的一个奇怪问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
  • 1970-01-01
  • 2016-06-15
  • 2015-05-14
  • 2016-03-23
  • 1970-01-01
相关资源
最近更新 更多