【问题标题】:Gradle executing dex Error command line too longGradle 执行 dex 错误命令行太长
【发布时间】:2014-06-10 14:54:30
【问题描述】:

我正在使用 gradle 在 Windows 上构建一个 Android 应用程序,当涉及到最后一个模块时,我遇到了以下错误:

* What went wrong:
Execution failed for task ':client:test:dexApiPhoneDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
        C:\adt-bundle-windows\sdk\build-tools\19.1.0\dx.bat --dex --num-threads= 
.....
Error Code:
    1
Output:
        The command line is too long.

我正在使用命令行来构建。我知道如果使用 Maven,可以通过将项目映射到此处描述的磁盘号来解决类似的问题:The command line is too long. in java project with maven

您知道如何使用 Gradle 解决该问题吗?

【问题讨论】:

标签: android windows command-line gradle dex


【解决方案1】:

我想出了一个解决方法,它并不完美,但至少可以完成工作。

基本上我的项目在一个很长的目录下,比如: C:\Development\cloud\my.cloud\main\mycompany\android。

因此,作为一种解决方法,我将此文件夹映射到网络位置,您可以使用 SUBST MS-DOS 命令或在计算机下的资源管理器中使用 GUI“映射网络驱动器”。 实际上我将它映射到一个字母 Z: 并从那里运行我的 gradle 命令,它就像一个魅力。

正如我所说,它并不完美,但至少让我能够继续前进。

【讨论】:

    【解决方案2】:

    制作网络驱动器可以,但似乎速度较慢。

    与此相反,我发现创建一个指向真实目录的链接会更好。在 Windows 中是这样的:

    mklink /j "D:\myshortname" "D:\my\long\directory\name\causing\trouble\but\its\not\my\fault\leave\me\alone"
    

    然后我只是从符号链接目录而不是真正的目录中打开项目。

    【讨论】:

      【解决方案3】:

      我设法通过在 gradle 中更改 Dex 任务的配置来修复它。 在我们的项目中,我们发现 Dex 基本上将“preDex”任务的输出文件作为输入。 由于 Dex 接受一个文件夹作为输入,用该文件夹覆盖 jars 列表对我们来说很有效。

      这是我们在根 build.gradle 中添加的代码

      task (configureDex) {
        gradle.taskGraph.beforeTask { Task task ->
            if (task.name.contains("dex") && !task.name.contains("predex")) {
              task.libraries = findPredexTask().outputFolder
            }
        }
      }
      
      def findPredexTask(){
        gradle.taskGraph.getAllTasks().findAll{ task ->
          task.name.toLowerCase().contains('predex')
        }
      }
      

      此解决方案的缺点是,如果您禁用 pre-dexing,它将失败,但它可以很容易地调整。

      另外请注意,您不能直接搜索“dex”或“predex”,因为 android gradle 插件会自动将执行的变体添加到任务名称中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-24
        • 2018-01-13
        • 2018-11-25
        • 2011-09-16
        • 1970-01-01
        相关资源
        最近更新 更多