Gradle文件路径在Windows上太长

9

好的,我看到了类似的问题,但是我还没有找到一个令人满意的解决方案,所以我要开一个新的问题。问题在于Gradle生成的文件路径非常长,在Windows上超过了240个字符的限制。问题是,一旦运行arm-linux-androideabi-ar,我会得到像这样的错误:

arm-linux-androideabi-ar: C:/tmp/ATC/intermediates/ndkBuild/debug/obj/local/armeabi-v7a/objs-debug/[redacted]/D_/[redacted]/android/[redacted]_ATC/src/main/jni/__/__/__/__/[redacted]/src/main/jni/__/__/__/__/__/source_code/app/missions/mission_utils/mission_data/mission_difficulty.o: No such file or directory
make: *** [C:/tmp/ATC/intermediates/ndkBuild/debug/obj/local/armeabi-v7a/lib[redacted].a] Error 1

我已经将gradle项目的buildDir更改为C:/tmp,并尽可能简化了它。我还将项目本身移动到驱动器根目录,并启用了Windows 10长路径,这是我找到的唯一建议。但是,从路径上看,Gradle似乎将..转换为__而不是将其转换为实际路径,因此文件的路径也可以是:

C:/tmp/ATC/intermediates/ndkBuild/debug/obj/local/armeabi-v7a/objs-debug/[redacted]/D_/[redacted]/android/[redacted]_ATC/source_code/app/missions/mission_utils/mission_data/mission_difficulty.o

仍然是一个让我感到疯狂长的字符串,但目前可以解决我的问题。有办法说服Gradle生成这种类型的路径吗?还有其他什么我可以做的吗?Windows 10长路径支持已经启用了。


有一个特殊的任务失败并显示路径过长的错误吗?如果是例如JavaExec任务,那么这个Gradle论坛条目可能会有所帮助:https://discuss.gradle.org/t/how-to-use-wildcards-in-javaexec-classpath/8501 如果不是,提供有关您项目设置和系统设置的更多详细信息可能会有所帮助。但从这个评论中看来,这似乎是一个已知的限制:https://discuss.gradle.org/t/filename-too-long-in-windows/9222/2 - mascha
@mascha 我发布了失败的具体命令。 请注意,这是NDK的问题,而不是Java的问题。 类路径不是我的问题,我遇到的问题是Android归档程序无法打开编译器生成的.o文件。 - JustSid
1个回答

3

Windows长路径支持已经存在(Win10,甚至在Win7上),但工具尚未准备好。

这个字符串仍然让我感到非常长,但它可以暂时解决我的问题。有可能说服Gradle生成这种路径吗?

据我所知,没有这样的方法。我认为路径本身不是问题,而是前缀的问题,如果您使用长路径。

还有其他什么我可以做的吗?Windows 10长路径支持已经启用。

我认为Windows 10长路径支持对您的情况没有帮助。问题在于您使用 arm-linux-androideabi-ar 构建的任何内容都没有被 \\?\ 前缀,这是Windows识别它是长路径所需的。

甚至为您的问题打开了票号#711。解决方案与clang++类似。

我的解决方法:

这不是“纯”的Windows解决方案。其中一个是使用Windows 10 Linux子系统。第二个选项是使用MSYS2,并专门为Gradle


WSL 也是我的想法,但不幸的是,Android Studio 不支持远程构建和在 WSL 上运行 Android Studio,同时基于 Windows 的 X-Server 也无法工作。我想我得等待直到 #711 票问题解决。 - JustSid
@JustSid 哎呀,真遗憾 :(. 我不太了解工具的深度,无法创建补丁。在 llvm.org 上有一个准备好的补丁 - https://reviews.llvm.org/rL311382,但你可能还需要调整 binutils - tukan
是的,看起来我只能在我的速度较慢的 Mac 上工作了。哦,没关系,总有一天这个问题肯定会解决的。感谢你们的所有帮助和努力挖掘 :) - JustSid
@JustSid 没关系。谢谢你:)。我很乐意为您提供更多帮助,但显然连维护者都在考虑如何处理它。 - tukan

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