Android构建:Gradle中的Dex Jumbo模式

50

我正在Android Ant构建中使用以下行(project.properties):

dex.force.jumbo=true

现在我们正在从Ant迁移到Gradle。在Android Gradle构建中是否有可能激活jumbo模式?


将设置移动到gradle.properties是可以的,gradle.properties文件位于项目路径下。 - Ninja
6个回答

140
你可以修改你的 build.gradle 文件以包含以下内容:
android {
    dexOptions {
        jumboMode = true
    }
}
请注意,此选项仅由现已弃用的 DX 编译器支持。D8 编译器不支持此选项。从 AGP 7.0 开始(随附 Android Studio 2020.3.1 - Arctic Fox 发布),完全移除了对 DX 的支持。

4
在组装之前必须运行“gradlew clean”。 - ViliusK
这个 build.gradle 文件在哪里?在平台里吗?如果我不想弄乱平台文件夹怎么办? - Francisco Souza
1
虽然自AGP 7.0推出后,对DX的支持已经被移除,但“dexOption”中的“jumboMode”属性仍然可用,但没有任何效果。 d8编译器根据需要(如果字符串太多)使用巨型指令。由于没有任何文档记录,因此Google问题跟踪器上的这个答案似乎是唯一提到这一点的参考资料:https://issuetracker.google.com/issues/189354519 - Stanislav Shamilov
太棒了,@StanislavShamilov的指针非常有用,谢谢!看起来我们不再需要启用jumboMode,因为编译器会自动处理大型指令。 - Guykun

4

在您的模块中修改build.gradle文件,添加以下内容:

android {
    dexOptions {
        jumboMode = true
    }
}

接下来在您的项目根目录中运行gradle clean


0

我不确定在Gradle中是否可以设置强制使用Jumbo模式,但自从Android Studio 0.2.4版本以后,您可以在编译器 -> Android DX编译器 -> 强制Jumbo模式中启用它。


当然可以,但是我如何在没有IDE的情况下在构建文件中启用Jumbo模式呢? - endian

0
我能够在Windows上通过更改build-tools中的dx.bat并添加--force-jumbo参数作为默认值来实现这一点。尽管这只是一个权宜之计,但希望Gradle插件能够解决这个问题。

您可以在此处查看Android构建器的当前源代码:https://android.googlesource.com/platform/tools/build/+/master/builder/src/main/java/com/android/builder/AndroidBuilder.java。Jumbo标志不受支持。如果您有更好的解决方案来启用它,请提供该解决方案,而不是对可行的解决方法进行投票否决。 - Nick Caballero
为什么你说不支持巨型标志?在Android源代码中,我看到了command.add("--force-jumbo")。 - IgorGanapolsky
啊,你是对的。我会使用正确的Gradle配置更新答案。 - Nick Caballero

-1

检查您的构建工具。如果需要,请更新并重试。


-1
这个错误意味着你的方法已经超过了65536个。
只需要在build.gradle文件的默认配置中添加multiDexEnabled即可。
defaultConfig {
   ...
   multiDexEnabled true
   ... 
}

这种方式也可以使用: https://blog.csdn.net/H_O_W_E/article/details/77742907


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接