在主源集中进行重构不会传播到无效的构建变体

时间:2018-08-16 20:33:23

标签: android android-studio android-studio-3.0

我的主要来源集为src/main/java。同样,名为src/heroes/java的产品风味的heroes来源集和名为src/villains/java的产品风味的villains来源集。

只有一个单独的构建类型debug。意味着构建变体窗格将包含heroesDebugvillainsDebug

现在,在Android Studio中,如果我选择构建变体heroesDebug,则src/mainsrc/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中获得更改以传播到所有其他“无效”构建变体的源集?

2 个答案:

答案 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