android-studio - 限制 Android Studio/Gradle 解析源路径(符号链接(symbolic link)问题)

标签 android-studio gradle symlink

这可能是一个 XY 问题,因为它涉及将文件符号链接(symbolic link)到源代码树中。我有时会在开发中使用许多应用程序项目通用的库来执行此操作。更常规地,它们将(以后将)只是 .aar 进口。不这样做会简化在应用程序代码上下文中对库的 API 调整——一个选项是自动打包和导入 aar,但这仍然更像是 PITA,意味着我要么在 IDE 中运行两个项目同时(未尝试)或在它们之间切换。
通常,符号链接(symbolic link)只是目录,但目前我正在处理单个文件,并且尝试构建涉及 的应用程序时出现了一个奇怪的问题。 《重新声明》错误。目录偶尔会发生这种情况,但通常通过 gradle re-sync 或 invalidate-and-restart 解决。
需要明确的是,这个问题不应该存在,而且闻起来很像一个错误:“重新声明”指的是符号链接(symbolic link)的位置,它们是 。不是 在构建树或项目文件夹中 - 即,重新声明涉及使用不同路径处理同一文件两次。1
令人沮丧的是,invalidate-and-restart 对单个文件不起作用,所以我删除了符号链接(symbolic link),只是将文件复制进去。没有更多的符号链接(symbolic link),但奇怪的是同样的问题发生了:

./gradlew assemble
> Task :app:compileDebugKotlin FAILED
e: /home/devel/Android/lib/droidutil/src/cogware/droidutil/Plexus.kt: (5, 8): Redeclaration: Plexus
e: /home/devel/Android/template/FooDemo/app/src/main/java/cogware/droidutil/Plexus.kt: (5, 8): Redeclaration: Plexus
(使用 IDE 也一样。)这里的项目文件夹是 /home/devel/Android/template/FooDemo . /home/devel/Android/lib/droidutil/src/cogware/droidutil/不是它的一部分——虽然公平地说还有其他符号链接(symbolic link),但 gradle 需要做的就是遵循为它设置的显式路径。现在似乎正在发生的事情是:
  • 它解析符号链接(symbolic link)路径并使用它们而不是符号链接(symbolic link)路径,而是使用它们。
  • 它甚至在解析的路径中搜索与正确树中名称匹配的文件!解释一下:删除符号链接(symbolic link)文件后,符号链接(symbolic link)目录(工作正常)仍然存在,但不在 droidutil 中。上面的目录。有,例如。一个 /home/devel/Android/lib/listfilterstack链接,它仍然设法在 /home/devel/Android/lib/droidutil/src/... 中找到“重新声明错误” .

  • 唯一没有意义的事情是它随机搜索整个文件系统。
    为什么它会保留这条路径,我该如何摆脱它?
    无效并重新启动没有任何区别。我尝试将其添加到 app/build.gradle:
    android { 
        ...
        sourceSets {
            main {
                java {
                    exclude '/home/devel/Android/lib/**'
                    srcDirs = [ 'app/src/main/java' ]
                }
            }
        }
    
    其中exclude显然那里没有语义值(value)——同样的错误。再次无效并重新启动——同样的错误。
    没有删除我的硬盘驱动器并在不同时区的另一台计算机上从头开始重新启动项目,唯一有效的方法是让我真正移动 /home/devel/Android/lib到完全不同的地方,这样路径就不再存在了。我不应该这样做。我应该能够明确设置构建工具搜索源的位置,而不是让它解开符号链接(symbolic link)并四处游荡。
  • 我想念包括 guard 。
  • 最佳答案

    似乎这是一个错误,但不幸的是,这种错误可能永远不会完全修复:
    https://github.com/gradle/gradle/issues/3982
    不完全相同的上下文或症状,但对我来说,没有实现 gradle 来以智能方式处理符号链接(symbolic link),因此:
    不要在 gradle 中使用符号链接(symbolic link)。

    关于android-studio - 限制 Android Studio/Gradle 解析源路径(符号链接(symbolic link)问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64035536/

    相关文章:

    android - 渲染期间引发异常 : Unable to locate mode 0

    android - 无法解析方法setReverseLayout和setStackFromEnd?

    gradle - JOOQ 代码生成给出错误 <generator/> 标签是强制性的

    macos - Symlink 生成空的别名文件?

    php - 如何在 php 中检查带有符号链接(symbolic link)的目录是否存在以及是否不存在

    android - 使用命令行和 Gradle 签名的 apk

    Android-Studio 设置中缺少 Android SDK 复选框

    configuration - 此工具 API 版本(1.6,协议(protocol)版本 4)不支持指定的 Gradle 安装 (..)

    gradle tar 任务未执行

    node.js - 无法将命令行参数传递给全局安装的 Node 包到 bin 快捷方式