Android风味,Gradle sourceSets合并

时间:2015-04-01 12:16:44

标签: android gradle android-gradle build.gradle android-productflavors

我尝试为多个合作伙伴和每个合作伙伴制作一个测试和产品版本的应用程序。对于每种口味,我都会创建一个带有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

1 个答案:

答案 0 :(得分:2)

警告:此方法在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节目:

  

要构建应用程序的每个版本,构建系统将源代码和资源组合在一起:

     
      
  • src/main/ - 主要源目录(所有变体共有的默认配置)
  •   
  • src/<buildType>/ - 源目录
  •   
  • src/<productFlavor>/ - 源目录
  •   

修改:此用户指南是另一个帮助来源:http://tools.android.com/tech-docs/new-build-system/user-guide

编辑2:根据上面的链接:

  

还为每个变体创建了其他源集:

     
      
  • android.sourceSets.flavor1Debug   位置src/flavor1Debug/
  •   
  • android.sourceSets.flavor1Release   位置src/flavor1Release/
  •   
  • android.sourceSets.flavor2Debug   位置src/flavor2Debug/
  •   
  • android.sourceSets.flavor2Release   位置src/flavor2Release/
  •   

然后,您可以使用/src/partner1Test/来定义partner1 flavor和Test版本的资源细节,即partner1Test构建版本。