我正在使用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解决该问题?
答案 0 :(得分:2)
我想出了一个解决方法,它并不完美,但至少可以胜任这项工作。
基本上我的项目是在一个很长的目录下,如: C:\发展\云\ my.cloud \主\ myCompany中\机器人
因此,作为解决方法,我将此文件夹映射到网络位置,您可以使用SUBST MS-DOS命令或在计算机下的资源管理器中使用GUI"映射网络驱动器"。 实际上我将它映射到一个字母Z:并从那里运行我的gradle命令,它就像一个魅力。
正如我所说,它并不完美,但至少让我继续前进。
答案 1 :(得分:2)
使网络驱动器工作但看起来更慢。
而不是那样,我发现创建一个指向真实目录的链接会更好。在Windows中,它是这样的:
mklink /j "D:\myshortname" "D:\my\long\directory\name\causing\trouble\but\its\not\my\fault\leave\me\alone"
然后我只是从符号链接目录而不是真实目录中打开项目。
答案 2 :(得分:0)
我设法通过在gradle中更改Dex任务的配置来修复它。 在我们的项目中,我们发现Dex基本上将" preDex"的输出文件作为输入。任务。 由于Dex接受一个文件夹作为输入,覆盖包含该文件夹的jar列表对我们来说是个窍门。
以下是我们在root 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')
}
}
这个解决方案的缺点是如果你禁用预先解除它会失败,但它可以很容易地适应。
另请注意,您无法搜索" dex"或" prex"直接作为android gradle插件自动将执行的变体添加到任务名称。