Вкусы продуктов, наборы источников. Исключая файлы - android studio

У меня есть приложение с 4 вкусами продукта. build.gradle выглядит так:

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"
defaultConfig {
    applicationId "com.example.testing"
    minSdkVersion 23
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
productFlavors {
    flavor1 {
        applicationId "com.flavor1"
    }
    flavor2 {
        applicationId "com.flavor2"
    }
    flavor3 {
        applicationId "com.flavor3"
    }
    flavor4 {
        applicationId "com.flavor4"
    }
}
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'

}

Я добавил исходные наборы для ароматов и добавил несколько файлов для каждого конкретного аромата.

Более того, я хотел указать, какие файлы исключить в flav1 из основного набора источников.

Файлы для исключения в основном наборе исходных файлов находятся в main/java/com/example/testing/ там есть

  • file1.java
  • file2.java
  • file3.java
  • file4.java

В каждом аромате я хотел бы исключить 1 файл из них. Но я хочу, чтобы во вкусе было все остальное. Пример:

flavor1 должен иметь: file2, file3, file4.

Falvor2 должен иметь: файл1, файл3, файл4.

и т.п.

Как вы можете видеть, файлы являются общими для большинства разновидностей, поэтому я не хочу помещать их все во вкусы, потому что это будет реплика кода, и каждое изменение в каждом файле должно быть применено ко всем различным файлам вкуса.

Я видел это:

sourceSets {
    flavor1 {
        java {
            srcdir 'testing'
            exclude '/file1'
        }
    }

Но это не будет работать для меня. Я не могу разобраться.

Спасибо }

0 ответов

Немного поздно, но может быть полезно другим пользователям.

Я думаю, что хорошей альтернативой является размещение всего вашего общего кода (или ресурсов) в одной или нескольких конкретных папках, скажем так sharedfoo и используйте gradle, чтобы добавить их в любые вкусы, которые в этом нуждаются.

productFlavors {
    flavor1 {
      applicationId "com.flavor1"
    }
    flavor2 {
      applicationId "com.flavor2"
    }
    flavor3 {
      applicationId "com.flavor3"
    }
    flavor4 {
      applicationId "com.flavor4"
    }
}
sourceSets {
    flavor1 { java.srcDirs = ['src/flavor1/java', 'src/sharedfoo/java'] }
    flavor2 { java.srcDirs = ['src/flavor2/java', 'src/sharedfoo/java'] }
}