Android工作室不识别源文件夹

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

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下的文件夹显示为普通文件夹实际上这些文件夹中没有错误检查

在这里输入图像说明

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

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

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

它似乎工作正常。

在这里输入图像说明

…直到我与我的gradle文件同步 – 删除上面的行。

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

您必须在构build变体列表中进行切换,然后AS将select适当的源集。 构建变体

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

如果这不起作用,那么你可以尝试这个“强制它”。 检查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) } 

只需将其放在android部分之外的build.gradle文件中即可。 来自此源的描述 :

Android Studio自动从gradle构build文件生成.iml项目文件。 此任务编辑Android Studio项目文件app.iml并添加testing目录。 每当Android Studio重新扫描gradle文件时,这些更改都会丢失,但是之后它会运行一个构build,并且任务被locking,所以这一切都很好。 这个版本有一些调整,如将新任务添加到正常的构build周期有点不同,并优雅地处理缺less.iml文件。

这对我来说有一定的作用:IDE现在认为它是一个src树,但不想将它与任何其他的src树连接起来。

在我的情况下,只有文件 – >无效caching/重新启动已经帮助了我,所以如果上面的解决scheme不适合你 – 试试这个。

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

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