【问题标题】:How to add a linked source folder in Android Studio?如何在 Android Studio 中添加链接源文件夹?
【发布时间】:2013-09-27 15:28:29
【问题描述】:

在 Eclipse 中,我可以将源文件夹作为“链接源文件夹”添加到我的 android 项目中。我如何在 Android Studio 中实现同样的目标?

或者是否可以添加一个外部文件夹以在 gradle 中构建?

【问题讨论】:

    标签: java gradle android-studio


    【解决方案1】:

    在您的 build.gradle 中将以下内容添加到 android 节点的末尾

    android {
        ....
        ....
    
        sourceSets {
            main.java.srcDirs += 'src/main/<YOUR DIRECTORY>'
        }
    
    }
    

    【讨论】:

    • 真的很有帮助。为什么要把sourceSets放在android的范围内?我的dependencies 不在了。
    • 但是这个解决方案只处理 Java 文件。 'src' 下的所有资源呢——drawable、布局、字符串等。如何将它们放在外部文件夹中?
    • 对于 appengine,sourceSets 必须位于根级别 - 不能嵌套在其中。很奇怪,这将是 android 模块的一种方式和 appengine 模块的另一种方式。
    • @Deckard 模块“app”的 build.gradle 中应该有一个 android 块,而不是根构建文件中。
    • @GyRo 您可以对资源文件执行相同操作:在 sourceSets 中添加行 main.res.srcDirs += '&lt;YOUR DIRECTORY&gt;'
    【解决方案2】:

    正确答案是:

    android {
        ....
        ....
    
        sourceSets {
            main.java.srcDirs += 'src/main/<YOUR DIRECTORY>'
        }
    }
    

    此外,如果您的外部源目录不在src/main 下,您可以使用这样的相对路径:

    sourceSets {
        main.java.srcDirs += 'src/main/../../../<YOUR DIRECTORY>'
    }
    

    【讨论】:

    • 关于相对路径 - 我想知道是否可以使用某种 gradle 变量,例如。 srcDirs += "$(ProjectDir)/mylib/src"?我是 Gradle 新手,不知道它是否支持这样的东西。
    • 您可以省略 src/main/../../ 前缀,因为点取消了路径组件。
    • @BrianWhite 如何在另一台机器上指定源集? sourceSets { main.java.srcDirs += 'src/main/\\10.51.70.21\me\myco\apps\myapp\src' }
    • 我不希望你可以,因为据我所知,它只是使用操作系统open() 来访问文件。您可以使用 nfssmb 之类的东西将远程目录直接挂载到文件系统中,但这并不特定于 Android Studio。
    • 虽然此解决方案有效,但我发现如果您的项目由多个模块组成,并且多个模块想要引用相同的外部源代码,则该解决方案将不起作用。似乎只有一个模块可以引用外部源文件。这是一种耻辱,因为我原本打算拥有一个通用的 src 文件夹,我可以使用它来共享常量,而无需创建 jar 或 aar 文件。
    【解决方案3】:

    您可以将源文件夹添加到构建脚本,然后进行同步。在此处的文档中查找 sourceSets:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Basic-Project

    我还没有找到添加测试源文件夹的好方法。我已将源手动添加到 .iml 文件中。当然这意味着每次同步构建脚本时它都会消失。

    【讨论】:

      【解决方案4】:

      虽然sourceSets 允许您包含整个目录结构,但无法在 Android Studio(从 1.2 版开始)中排除其中的一部分,如下所述:Android Studio Exclude Class from build?

      在更新 Android Studio 以支持 Android 源的包含/排除指令之前,Symlinks 工作得很好。如果您使用的是 Windows,则诸如 junctionmklink 之类的本机工具可以完成等效的 Un*x 符号链接。 CygWin 也可以通过一点强制来创建这些。请参阅:Git Symlinks in WindowsHow to make symbolic link with cygwin in Windows 7

      【讨论】:

      • 不幸的是,我在带有符号链接的 Android Studio 2.1.2 中得到以下行为:文件显示在项目文件旁边,并且通过干净的构建它可以工作。但是在符号链接目录中更改后的每个正常构建都会给出一个 gradle 错误:“无法找到源 java 类:'//MyClass.java',因为它不属于任何源目录:[src 目录列表,包括符号链接所在的包文件夹中的“.../src/main/java”]”。
      • @user905686 是的!天啊。我花了几个小时才找到遇到同样问题的其他人。就像你说的那样,符号链接在干净的“重建”上工作,但在随后的运行中不起作用。这太耗时了,所以我刚刚更新了我的设置以引用实际目录而不是符号链接。有点痛苦,但它使开发速度更快。
      • 我已经添加了错误报告issuetracker.google.com/issues/65343978,但我不确定它是否会被接受为错误。
      【解决方案5】:

      以防万一有人感兴趣,这里有一个完整的 Java 模块 gradle 文件,它可以正确生成和引用构建的工件 在 Android 多模块应用程序中

      buildscript {
          repositories {
              maven {
                  url "https://plugins.gradle.org/m2/"
              }
          }
          dependencies {
              classpath "net.ltgt.gradle:gradle-apt-plugin:0.15"
          }
      }
      
      apply plugin: "net.ltgt.apt"
      apply plugin: "java-library"
      apply plugin: "idea"
      
      idea {
          module {
              sourceDirs += file("$buildDir/generated/source/apt/main")
              testSourceDirs += file("$buildDir/generated/source/apt/test")
          }
      }
      
      dependencies {
      
          // Dagger 2 and Compiler
          compile "com.google.dagger:dagger:2.15"
          apt "com.google.dagger:dagger-compiler:2.15"
          compile "com.google.guava:guava:24.1-jre"
      
      }
      
      sourceCompatibility = "1.8"
      targetCompatibility = "1.8"
      

      【讨论】:

        【解决方案6】:

        如果您不使用 gradle(例如,从 APK 创建项目),可以通过 Android Studio UI(从 3.3.2 版开始)完成:

        • 右键项目根目录,选择Open Module Settings
        • 点击+ Add Content Root 按钮(右中)
        • 添加您的路径并点击OK

        根据我的经验(使用本机代码),只要您的 .so 是使用调试符号并从相同的绝对路径构建的,就会自动识别在源文件中添加的断点。

        【讨论】:

        • 在第 2 点迷路了...看不到任何添加内容根按钮。
        猜你喜欢
        • 2015-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-29
        • 2014-02-15
        • 2016-07-17
        • 1970-01-01
        相关资源
        最近更新 更多