Android studio无法识别源文件夹

时间:2014-02-27 12:36:59

标签: android gradle android-studio

我正在使用标准的Android Studio目录结构,并创建了不同的构建类型:

buildTypes {
    debug {
        runProguard false
        packageNameSuffix ".debug"
        signingConfig signingConfigs.debug
    }
    preview.initWith(buildTypes.debug)
    preview {
        packageNameSuffix ".preview"
    }
    release {
        runProguard false
        signingConfig signingConfigs.release
    }
}

一切都编译好,但AS不识别所有源文件夹。 只有maindebug下的文件夹被标记为来源,previewrelease下的文件夹会显示为普通文件夹 实际上,这些文件夹中没有错误检查

enter image description here

我检查了.iml文件,并没有添加sourceFolder标签。

如果我手动编辑项目iml文件添加以下行:

 <sourceFolder url="file://$MODULE_DIR$/src/preview/java" isTestSource="false" />
 <sourceFolder url="file://$MODULE_DIR$/src/preview/res" type="java-resource" />

似乎工作正常。

enter image description here

...直到我与我的gradle文件同步 - 这会删除上面的行。

这是gradle插件中的错误,还是我做错了什么?

4 个答案:

答案 0 :(得分:125)

您必须在构建变体列表中切换它,然后AS将选择适当的源集。 build variants

答案 1 :(得分:3)

首先,尝试重新导入项目。删除所有构建目录,.iml文件和.idea文件夹。然后导入项目。

如果这不起作用,那么你可以试试这个“强迫它”。 Checkout this response from Bernd Bergler. 请注意,这是一个黑客攻击,理想情况下不是必需的

这是他的代码的略微修改版本。

task addPreview {
    def src = ['src/preview/java']
    def file = file("app.iml")

    doLast {
        try {
            def parsedXml = (new XmlParser()).parse(file)
            def node = parsedXml.component[1].content[0]
            src.each {
                def path = 'file://$MODULE_DIR$/' + "${it}"
                def set = node.find { it.@url == path }
                if (set == null) {
                    new Node(node, 'sourceFolder', ['url': 'file://$MODULE_DIR$/' + "${it}", 'isTestSource': "false"])
                    def writer = new StringWriter()
                    new XmlNodePrinter(new PrintWriter(writer)).print(parsedXml)
                    file.text = writer.toString()
                }
            }
        } catch (FileNotFoundException e) {
            // nop, iml not found
        }
    }
}

// always do the addPreview on prebuild
gradle.projectsEvaluated {
    preBuild.dependsOn(addPreview)
}

只需将其放在build.gradle部分之外的android文件中即可。 Description from this source

  

Android Studio会自动从gradle生成.iml项目文件   构建文件。此任务编辑Android Studio项目文件app.iml   并添加测试目录。每当Android都会丢失更改   Studio重新扫描gradle文件,但在此之后它会运行构建   并且任务与此挂钩,所以这一切都很好。这个版本有一个   几个调整,例如将新任务添加到正常构建中   循环不同,优雅地处理缺席   .iml文件。

这对我来说有一定的作用:IDE现在将其识别为src树,但不想将其与任何其他src树链接。

答案 2 :(得分:2)

仅在我的情况下文件 - &gt;无效的缓存/重启帮助了我,所以如果上面的解决方案不适合你 - 试试这个。

答案 3 :(得分:1)

将其添加到模块的build.gradle文件中:

sourceSets {
    main.java.srcDirs += 'src/preview/java'
    main.java.srcDirs += 'src/release/java'
}