Android 风格、Gradle sourceSets 合并

标签 android gradle android-gradle-plugin 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')
}

我想要一个测试版本获取产品版本的 res 文件夹(像这样我不会为两个版本重复资源)并将其与测试版本合并。 问题是:

错误:错误:重复资源: 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

编辑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构建变体。

关于Android 风格、Gradle sourceSets 合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29390604/

相关文章:

Android 将 BluetoothSocket 传递给下一个 Activity

android - 单击Android Studio中的更新Gradle后无法进行Cant Gradle同步-错误:Gradle 2.14.1需要Android Gradle插件2.1.3(或更高版本)

android - Gradle构建文件的Freemarker模板

android - 持续性错误 - 任务 ':app:transformClassesWithJarMergingForDebug' 执行失败

android - gradlew 应用程序 :dependencies command is not working

android - 阻止移动网站打开我的应用程序 android deeplink - Google Chrome

android - 无法通过 `api` 方法从 Android 模块解析主题和样式

android - Gradle:无法将参数传递给插件中的类

android - 找不到 gradle 2.2.0-rc1

java - 如何拉伸(stretch)ImageView中的图像?