我有一个有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'
}
我添加了各种风格的sourceSets,并为每种特定风味添加了一些文件。
此外我想指定哪些文件 在flavor1中从
主要sourceSet中要排除的文件位于main/java/com/example/testing/
中
在每种口味中,我想排除 1个文件。但我希望这种味道能够得到所有其他的。例如:
flavor1应该具有:file2,file3,file4。
falvor2应该具有:file1,file3,file4。
等
正如你所看到的那样,文件是由大多数版本共享的,所以我不想把它们全部放在口味中,因为它是代码复制品,每个文件中的每个更改都必须应用于所有不同的flavor文件
我见过这个:
sourceSets {
flavor1 {
java {
srcdir 'testing'
exclude '/file1'
}
}
但这对我不起作用。我无法理解。
由于 }
答案 0 :(得分: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'] }
}