【问题标题】:Can I shrink the 65k method limit in dex with Gradle?我可以使用 Gradle 缩小 dex 中的 65k 方法限制吗?
【发布时间】:2014-04-08 21:08:20
【问题描述】:

我正在开发一个大型应用程序,有多少库,我达到了 65k 方法的限制,我想清理一些库以缩小方法的大小。现在我正在使用 proguard,但这需要 5 分钟来编译!所以,我需要一种在 proguard 之前清理的方法(比如用 build.gradle 排除或类似的东西) 我正在尝试使用这样的东西:

compile ('com.google.android.gms:play-services:4.3.+'){
    exclude group: 'com.google.android.gms.drive'
    exclude group: 'com.google.android.gms.games'

}

但它不起作用,你知道吗?

【问题讨论】:

  • 我不知道exclude group 会从依赖项中删除单个类或命名空间。这里的“组”是指工件组 AFAIK。使用 Jake Wharton's shell script 确定 65K 方法引用的来源,并尝试用更紧凑的库替换库(例如,使用 Wire 或 micro-protobuf 代替 protobuf)。

标签: android gradle proguard


【解决方案1】:

如果您禁用 ProGuard 的优化步骤 (-dontoptimize) 和混淆步骤 (-dontobfuscate),ProGuard 的速度可能足以用于调试构建。缩小步骤可以大大减少方法的数量。

【讨论】:

    【解决方案2】:

    您会遇到GRADLE-2964,这是因为 Gradle 没有使用 Zip64 吗?根据 jira 的说法,这是已修复的,因此它可能适用于 Gradle 的快照。

    使用 Gradle 1.12 快照的示例:

    gradle-wrapper.properties:

    distributionUrl=http\://services.gradle.org/distributions-snapshots/gradle-1.12-20140327133732+0000-bin.zip
    

    然后在任何正在压缩的任务中(从 ZipTask 扩展)拍这个:

    {
        ....
        zip64 = true
        ....
    }
    

    【讨论】:

      猜你喜欢
      • 2013-03-06
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      • 2023-03-06
      • 2015-08-18
      • 1970-01-01
      • 2014-03-08
      • 1970-01-01
      相关资源
      最近更新 更多