我的主要来源集为src/main/java
。同样,名为src/heroes/java
的产品风味的heroes
来源集和名为src/villains/java
的产品风味的villains
来源集。
只有一个单独的构建类型debug
。意味着构建变体窗格将包含heroesDebug
和villainsDebug
。
现在,在Android Studio中,如果我选择构建变体heroesDebug
,则src/main
和src/heroes
会变为“活动”,而src/villains
会“停用”。这意味着我可以在那些“活动”源集上使用ALT +插入,代码完成以及IDE的其他此类功能。诸如语法突出显示之类的内容甚至都不会显示在“非活动”源集中的文件中。
那基本上没问题。但是,如果我重命名或移动src/main
中许多地方导入的src/villains
中的许多类,将会遇到很大的问题。我注意到重构的包或类名称反映在src/heroes
中,但是当我切换到villainsDebug
时,我会在Cannot resolve symbol
中看到红线和src/villains
错误,其中IDE应该已经更新了包或类的新名称或位置!
这也可以反向执行-如果villainsDebug
是活动的,并且我重新组合了src/main
中的某些代码,更改将传播到src/villains
,但是如果我再次切换到heroesDebug
,这些变化将无处可见。
编辑
那么我如何在src/main
中获得更改以传播到所有其他“无效”构建变体的源集?
答案 0 :(得分:1)
尝试将其添加到您的应用程序build.gradle中:
public static void openExcelSheet() throws IOException {
FileInputStream fileInputStream = null;
if(applicationSettings.class.getResourceAsStream("/files/Employees.xlsx") != null) {
System.out.println("File Found");
fileInputStream = new FileInputStream("/files/Employees.xlsx");
}else {
System.out.println("File Not Found");
}
XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream);
//int numberOfSheets = workbook.getNumberOfSheets();
System.out.println(workbook.getAllNames());
workbook.close();
}
这将使所有目录可见,并且您仅应在重构时执行此操作,然后再删除它,因为您将看到重复的类异常。同样,这将创建一个带有多个java文件夹的怪异的Android项目视图。可能不是最好的解决方案,但是它对我有用
答案 1 :(得分:1)
那么,无论我选择了哪种构建变体,如何使所有源集都处于“活动”状态?
从IDE的角度来看,在当前的Android Studio(3.1.4)版本中这是不可能的,我认为这是每个设计功能都合理的功能。因为,您的源集应该根据构建变体进行隔离,并且不会相互影响。
如果您只是想不时地重新分配那些“共享”源,可能可以添加独立于构建变体的其他源集,如下所示。
sourceSets {
String sharedSources = "$projectDir/src/sharedSources/java"
main {
}
heroes {
java.srcDirs += sharedSources
}
villains {
java.srcDirs += sharedSources
}
}
因此,您的目录结构将如下所示,但“ sharedSources”不是此处的构建变体。
app
├── src
│ ├── heroes
│ ├── heroesDebug
│ ├── heroesRelease
│ ├── villains
│ ├── villainsDebug
│ ├── villainsRelease
│ ├── sharedSources // NOT indicating a build variant. Move those classes out to here.
│ └── main