错误:文件路径在Windows上过长,应保持在240个字符以下。

69

因此,我对我的build.gradle(app)文件进行了一些更改,但是android studio出现了以下错误(在新标签页中打开图像以获得更好的查看效果): 日志记录中的错误描述

这是我的build.gradle(app)文件(这不是编辑后的文件,我删除了代码的新行,但仍然没有解决问题): Build.gradle

在我改变build.gradle(app)文件后,一切都运作良好,但是当我删除那些新代码行时,android studio仍然持续给出错误信息。错误与compile 'com.google.android.gms:play-services:8.3.0'有关。我已经尝试删除/重命名该文件夹中的png图像,但是当我重新构建项目时,png图像会自动下载。我的build.gradle(project)文件包含classpath 'com.android.tools.build:gradle:1.5.0'。我想知道是什么导致了这个错误,以及如何解决?非常感谢。


1
Gradle使用相对路径并编译长项目路径。而Android Studio 2.2使用绝对路径。有没有办法告诉Android Studio 2.2使用相对路径? - k3b
14个回答

172

你也可以尝试更改项目的构建目录,因为这是大多数路径问题出现的地方。在你的根 build.gradle 文件中进行修改。

allprojects {
    buildDir = "C:/tmp/${rootProject.name}/${project.name}"
    repositories {
       ...
    }
}

Android Studio将会识别这些更改,并在项目视图中显示您的新构建位置,比移动整个项目要容易得多。

编辑

虽然Windows 10 Insider Preview现在提供了允许更长文件路径限制的功能,但目前只有特别启用了支持更长文件路径的应用程序才能实际使用这些限制。

目前看来,启用了扩展路径的这些应用似乎只有通过Windows商店安装的应用程序。

目前,Gradle没有并且可能无法启用此选项来利用增强的NTFS文件路径长度。


7
最好的解决方案!对我起了作用。仅更改构建目录,无需移动整个项目。 - Nigel Crasto
9
这应该是被接受的解决方案,非常有效并且不会对项目本身产生任何影响。 - Bruno Coelho
2
太聪明了!我更新gradle后突然遇到了同样的问题。(谷歌播放服务使用极长的文件/文件夹名称。)这个解决方案很简单,而且由于构建文件是自动生成的,所以不应该被任何人源代码控制。因此,这个答案通常应该是解决该问题的一种简单方法。谢谢! - Dave
1
我最好选择这个解决方案,因为它只会影响构建文件夹。 - Osify
太棒了!易于实现,完美运行。非常感谢分享! - Clive Sargeant
显示剩余6条评论

104

我遇到了同样的问题。对于您的确切问题,我不知道解决方法,但我找到了一个解决办法; 我看到你的项目有一个深层次的文件路径层次结构。为什么不将项目从较低级别向上移动?

例如:C:\Projects\YourProject

这对我解决了问题。


还有其他解决方案,但我认为将项目移动到根目录附近是最佳实践,因为这样更容易维护简单的文件层次结构。 - Vladimir Dimov
1
在我看来,使用单独的短构建路径可以更轻松地与他人共享项目。这将解决问题,无论其他团队成员存储其项目文件的位置在哪里。在具有严格文件层次结构规则的公司中,如果它们恰好使用深度较长或命名方案过长的膨胀路径,则可以提供帮助。然而,如果您自己的命名方案使用过长的包/文件名,则短构建路径将无法解决任何问题。如果是这种情况,您应该缩短根项目路径。不过,最终还是要选择最适合自己的方式。这只是我的 $0.025 的看法。 - lodlock
有时候,你没有办法调整文件层级结构,因为在项目中解压了一些归档文件等。那么,如果你想清理已解压的归档文件,该如何使用gradle删除呢?对于我的项目,在Windows下无法工作。 - Udo
补充我的上面的评论:我创建了一个Java类,其中包含这个单一的方法: public static void cleanDir(File dir) { File[] files = dir.listFiles(); if (files != null) { for (File f : files) { if (f.isDirectory()) { cleanDir(f); } f.delete(); } } } 然后在我的build.gradle任务中,我使用要删除的目录的文件引用调用此方法。该目录路径可能比Windows的240个字符限制更深。 - Udo

12

问题原因: 'C:\users...\commom_google_signin_btn_text_dark_normal.9.png' 图标路径长度超过了 Windows 操作系统的最大文件路径长度限制,该限制为240个字符。

解决方法:将您的项目移动到顶级目录,例如'C:\your_project',或缩短您的项目名称长度。

这是Windows路径长度限制图表 enter image description here


6

作为实际移动项目的非常可靠的替代方案,我建议使用硬链接。其语法如下:

mklink /J C:\AndroidProjects\ProjectName C:\MyVeryVeryVeryVery…VeryVeryVeryLongPath\ProjectName

现在你可以在C:\AndroidProjects\ProjectName上工作,修改会直接反映在项目所在的位置。

听起来是个好主意,但现在出现了堆内存错误的 JavaScript。很遗憾,因为这正是我建议的修复方法! - Jono Stewart

2
缩短项目路径是一种hack方法,Ivan Neeson的回应似乎是未来的方向。
如果你使用的是Android Studio,那么你将会看到一个有用的文件长度错误信息。但是,如果你通过命令行进行ionic build all操作,你可能会遇到某些png文件的crunch错误,这并不显而易见。
真正的问题在于Google Play Services有如此奢侈的文件名,例如common_google_signin_btn_text_light_normal_background.9.png,这对Windows并不友好。将其放置在Android构建中,路径就会膨胀到 platforms\android\build\intermediates\exploded-aar\com.google.android.gms\play-services-base\10.2.1\res\drawable-xhdpi-v4\common_google_signin_btn_text_light_normal_background.9.png,超出了我们的控制范围。

2

2
作为lodock答案的补充,如果您有许多同名项目,可以在项目路径上使用哈希值:
import java.security.MessageDigest

def hashString(String s){
    MessageDigest.getInstance("SHA1").digest(s.bytes).encodeHex().toString()
}

allprojects {
    buildDir = "C:/AB/${hashString(projectDir.getAbsolutePath())}"
}

1

您应该尽可能地保持项目目录尽可能浅。

例如:

D:/AndroidWorkSpace/ProjectName

因为Gradle仅支持240个字符长度的项目路径。

谢谢。


1
Gradle 是问题所在,而不是 Android Studio。 - Udo

1

1

我发现当我有两个重复的文件夹时出现了这个问题,就像这样:

E:\project-one\project-one

当文件夹名称较长时,例如:

E:\project-one-with-very-big-name

为避免这个问题,请创建一个简短明了的项目文件夹。

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