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


67

因此,我对build.gradle(app)文件进行了一些更改,android studio给了我这个错误(在新标签页中打开图像以更好地查看): Logcat的错误描述

我的build.gradle(app)文件(这不是经过编辑的文件,我删除了新的代码行,但仍然没有运气/解决方案。): Build.gradle

直到我在build.gradle(app)文件中进行了一些更改之前,一切工作都很好,但是随后我删除了这些新的代码行,而android studio仍然不断给我错误。该错误与编译'com.google.android.gms:play-services:8.3.0'有关。我尝试删除/重命名指定文件夹内的png图像,但是当我重建项目时,会自动下载png图像。我的build.gradle(project)文件包含类路径'com.android.tools.build:gradle:1.5.0'。我想知道导致此错误的原因以及如何解决?非常感谢。


1
gradle使用相对路径并编译长项目路径。android-studio-2.2使用绝对路径。有没有办法告诉android-studio-2.2使用相对路径?
2016年

Answers:


103

我只是遇到了同样的问题。我不知道可以解决您的确切问题的方法,但是我找到了解决方法。我看到您的项目具有深层的文件路径层次结构。为什么不将您的项目从较低级别上移呢?

例如: C:\Projects\YourProject

那为我解决了问题。


还有其他一些解决方案,但是我认为将项目移到更靠近根目录的位置是最佳做法,因为这样可以更轻松地维护更简单的文件层次结构。
弗拉基米尔·迪莫夫

1
我认为,使用单独的简短构建路径可以使项目与其他人更轻松地共享。无论其他团队成员将项目文件存储在何处,都可以解决该问题。在具有严格的文件层次结构规则的公司中,如果它们碰巧使用了深度较长或过长的命名方案的肿路径,则可以提供帮助。但是,如果您自己的命名方案使用过长的包/文件名,则较短的构建路径将无法解决任何问题。如果是这种情况,您当然应该缩短根项目的路径。在一天结束时,尽一切所能为您服务。我的$ 0.025美元
lodlock '16

有时您无需更改文件层次结构,因为在项目中解压缩了一些档案,等等。那么,如果您要清理解压缩的档案,如何用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任务中,使用要删除目录的文件引用调用此方法。该目录路径可能会超过240个字符,这是Windows的限制。
Udo

171

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

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

Android Studio将接管所做的更改,并仍在“项目”视图中显示新的构建位置。这比移动整个项目要容易得多。

编辑

尽管Windows 10 Insider Preview现在提供了允许更长的文件路径限制的功能,但是这些限制当前仅对专门启用了对更长文件路径的支持的应用程序实际可用。

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

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


7
最好的解决方案!为我工作。仅更改构建目录,而无需移动整个项目。
奈杰尔·克拉斯托

9
这应该是公认的解决方案,效果很好,并且对项目本身没有影响。
Bruno Coelho

2
天才!更新gradle后,我突然遇到了同样的问题。(Google Play服务使用长得离谱的文件/文件夹名称。)此解决方案很简单,并且由于生成了构建文件,因此不应将其放在任何人的源代码管理中。因此,此答案通常应该是解决此问题的简便方法。谢谢!
戴夫

1
我最好选择此解决方案,因为它只会影响构建文件夹
Osify

将buildToolsVersion更新到最新版本(24.0.2)时刚遇到此错误。突然无法构建项目,这比移动项目文件容易得多(这可能会破坏我的能力!)
WallyHale

12

问题原因: “ C:\ users ... \ commom_google_signin_btn_text_dark_normal.9.png”图标的路径长度大于240个字符,超过了Windows OS的“最大文件路径长度限制”

解决方法是:将您的项目移到“ C:\ your_project”之类的顶级目录中,或者减少项目名称的长度。

这是Windows路径限制图 在此处输入图片说明


6

作为实际移动项目的一种非常可靠的选择,我建议使用硬链接。的语法是这样的

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

现在,您可以在C:\ AndroidProjects \ ProjectName上处理项目,并在应该放置项目的位置进行更改。


听起来是个好主意,但现在出现了JavaScript堆内存不足错误。很遗憾,因为这正是我建议的解决方法!
乔诺·斯图尔特


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())}"
}

2

缩短项目路径确实有点麻烦,Ivan Neeson的回应似乎是前进的方向。

如果您有幸使用Android Studio,则会看到有关文件长度的有用错误消息。但是,如果您在执行命令行离子构建时遇到了相同的问题,那么您将看到png文件是否存在某种紧缩错误,并且这种情况不太明显。

真正的问题是Google Play服务具有如此奢侈的文件名,例如common_google_signin_btn_text_light_normal_background.9.png,这根本不适合Windows。将其转储到Android内部版本中,并且路径在我们控制范围之外爆炸至platform \ 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



1

当我有两个相同的重复文件夹时,我发现了这个问题,

E:\project-one\project-one

当它的文件夹名称长度很大时,

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

为避免此问题,请使项目文件夹简短明了。


1

您应该使项目目录的深度尽可能小,例如:-D:/ AndroidWorkSpace / ProjectName

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

谢谢


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

0

您可以使用NTFS交接点来创建较短的项目路径。要了解有关结的更多信息,请阅读: 硬链接和结

联结(也称为软链接)与硬链接的区别在于,它引用的存储对象是单独的目录,联结可以链接位于同一计算机上不同本地卷上的目录。否则,结点的操作与硬链接相同


0

对于Windows用户:

您可能很想在项目根文件夹中创建一个网络共享,然后映射到它。此技术将缩短整体路径长度,但由于难以检测到已修改的文件,因此会给Android Studio带来问题。更好的解决方案是使用Windows subst命令。这是避免该问题的示例脚本。根据需要调整名称,并进行修改以指向您的项目并安装目录。

文件:launchAS.cmd

subst P: "C:\private\java42\ide\42g\workspaces\AndroidStudioProjects"
cd "C:\private\java42\programs\android-studio-base\bin"
start studio64.exe

上面的命令将创建一个P:驱动器,并将其映射到项目根文件夹。这将减少项目文件的整体路径长度,并可能为您解决路径名过长的问题。使用P:\,就像打开项目时使用的长根名称一样。

要删除映射,请使用命令: subst P:/ d


0

我遇到了同样的问题,我的项目在C驱动器中,并且位于更深的路径位置,我所做的只是将项目移至其他较低的深路径位置,并且它可以正常工作,您只需要更改项目位置即可,在深层的位置。


0

我对这个问题有不同的经验。首先,我有此错误,但随后我注意到同一目录中的先前项目正在打开。这是路径:

C:\ Users \ koralis \ Documents \ extraction \ Ex_Files_Android_App_Dev_LDS_Upd \ Exercise Files \ Ch01 \ 01_06 \ ImageAssets

出乎意料的是,我将该gradle版本从“ com.android.tools.build:gradle:2.0.0”更新为“ com.android.tools.build:gradle:3.2.1”

这解决了我的问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.