Android 种口味,Gradle 种 sourceSets 合并
Android flavors, Gradle sourceSets merging
我尝试为多个合作伙伴制作一个应用程序,并为每个合作伙伴制作一个测试和生产版本。对于每种口味,我都创建了一个特定的文件夹,其中包含 res/values,如文档所述。
我的 gradle 文件如下所示:
apply plugin: 'com.android.application'
android {
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
}
compileSdkVersion 14
buildToolsVersion "21.1.2"
defaultConfig {
versionCode 1
versionName 1
minSdkVersion 14
targetSdkVersion 19
}
productFlavors {
prodPARTNER1 {
applicationId "com.PARTNER1"
}
testPARTNER1 {
applicationId "com.PARTNER1.test"
}
prodPARTNER2{
applicationId "com.PARTNER2"
}
testPARTNER2{
applicationId "com.PARTNER2.test"
}
}
sourceSets {
testPARTNER2 {
res.srcDirs = ["testPARTNER2/res", "prodPARTNER2/res"]
}
}
}
dependencies {
compile project(':ViewPagerIndicatorLibrary')
compile 'com.android.support:support-v4:19.0.0'
compile 'com.google.android.gms:play-services:+'
compile files('libs/achartengine-1.1.0.jar')
compile files('libs/android-async-http-1.4.4.jar')
compile files('libs/jackson-annotations-2.2.3.jar')
compile files('libs/jackson-core-2.2.3.jar')
compile files('libs/jackson-databind-2.2.3.jar')
compile files('libs/urlimageviewhelper-1.0.4.jar')
}
我想要一个测试版本获取 prod 版本的 res 文件夹(像这样我不会为两个版本复制资源)并将其与测试版本合并。
问题是:
Error:Error: Duplicate resources:
C:\...prodPARTNER2\res\values\strings.xml:string/app_name,
C:\...testPARTNER2\res\values\strings.xml:string/app_name
有什么想法吗?不能为相同的口味合并太多 res 文件夹吗?
编辑:我也使用 gradle v 1.1.0 和 android studio v 1.1.0
警告: 这种方法在 Android Plugin for Gradle 3.0.0
上有所改变
为每个合作伙伴应用程序使用 productFlavors
并为测试版本定义构建类型 test
。
productFlavors {
partner1 {
applicationId "com.partner1"
}
partnerN {
applicationId "com.partnerN"
}
}
buildTypes {
debug {
// use defaults
}
release {
// the 'prod' version, use defaults
}
test {
// config as you want!
applicationIdSuffix ".test"
versionNameSuffix " Test"
debuggable true
minifyEnabled false
signingConfig signingConfigs.debug
}
}
您可以使用混合和匹配源文件夹,如 Android Plug-in for Gradle 所示:
To build each version of your app, the build system combines source code and resources from:
src/main/
- the main source directory (the default configuration common to all variants)
src/<buildType>/
- the source directory
src/<productFlavor>/
- the source directory
编辑: 本用户指南是另一个帮助来源:http://tools.android.com/tech-docs/new-build-system/user-guide
根据上面的link编辑2::
Additional sourcesets are also created for each variants:
android.sourceSets.flavor1Debug
Location src/flavor1Debug/
android.sourceSets.flavor1Release
Location src/flavor1Release/
android.sourceSets.flavor2Debug
Location src/flavor2Debug/
android.sourceSets.flavor2Release
Location src/flavor2Release/
然后,您可以使用 /src/partner1Test/
定义特定于 partner1
风格和 Test
构建的资源,即 partner1Test
构建变体。
我尝试为多个合作伙伴制作一个应用程序,并为每个合作伙伴制作一个测试和生产版本。对于每种口味,我都创建了一个特定的文件夹,其中包含 res/values,如文档所述。
我的 gradle 文件如下所示:
apply plugin: 'com.android.application'
android {
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
}
compileSdkVersion 14
buildToolsVersion "21.1.2"
defaultConfig {
versionCode 1
versionName 1
minSdkVersion 14
targetSdkVersion 19
}
productFlavors {
prodPARTNER1 {
applicationId "com.PARTNER1"
}
testPARTNER1 {
applicationId "com.PARTNER1.test"
}
prodPARTNER2{
applicationId "com.PARTNER2"
}
testPARTNER2{
applicationId "com.PARTNER2.test"
}
}
sourceSets {
testPARTNER2 {
res.srcDirs = ["testPARTNER2/res", "prodPARTNER2/res"]
}
}
}
dependencies {
compile project(':ViewPagerIndicatorLibrary')
compile 'com.android.support:support-v4:19.0.0'
compile 'com.google.android.gms:play-services:+'
compile files('libs/achartengine-1.1.0.jar')
compile files('libs/android-async-http-1.4.4.jar')
compile files('libs/jackson-annotations-2.2.3.jar')
compile files('libs/jackson-core-2.2.3.jar')
compile files('libs/jackson-databind-2.2.3.jar')
compile files('libs/urlimageviewhelper-1.0.4.jar')
}
我想要一个测试版本获取 prod 版本的 res 文件夹(像这样我不会为两个版本复制资源)并将其与测试版本合并。 问题是:
Error:Error: Duplicate resources:
C:\...prodPARTNER2\res\values\strings.xml:string/app_name,
C:\...testPARTNER2\res\values\strings.xml:string/app_name
有什么想法吗?不能为相同的口味合并太多 res 文件夹吗?
编辑:我也使用 gradle v 1.1.0 和 android studio v 1.1.0
警告: 这种方法在 Android Plugin for Gradle 3.0.0
上有所改变为每个合作伙伴应用程序使用 productFlavors
并为测试版本定义构建类型 test
。
productFlavors {
partner1 {
applicationId "com.partner1"
}
partnerN {
applicationId "com.partnerN"
}
}
buildTypes {
debug {
// use defaults
}
release {
// the 'prod' version, use defaults
}
test {
// config as you want!
applicationIdSuffix ".test"
versionNameSuffix " Test"
debuggable true
minifyEnabled false
signingConfig signingConfigs.debug
}
}
您可以使用混合和匹配源文件夹,如 Android Plug-in for Gradle 所示:
To build each version of your app, the build system combines source code and resources from:
src/main/
- the main source directory (the default configuration common to all variants)src/<buildType>/
- the source directorysrc/<productFlavor>/
- the source directory
编辑: 本用户指南是另一个帮助来源:http://tools.android.com/tech-docs/new-build-system/user-guide
根据上面的link编辑2::
Additional sourcesets are also created for each variants:
android.sourceSets.flavor1Debug
Locationsrc/flavor1Debug/
android.sourceSets.flavor1Release
Locationsrc/flavor1Release/
android.sourceSets.flavor2Debug
Locationsrc/flavor2Debug/
android.sourceSets.flavor2Release
Locationsrc/flavor2Release/
然后,您可以使用 /src/partner1Test/
定义特定于 partner1
风格和 Test
构建的资源,即 partner1Test
构建变体。