在构建过程中区分 Android app.gradle 文件中的 productFlavors

Differentiate between productFlavors in Android app.gradle file during build process

    android {
    final String analyticsJSON = "lite"
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.ralok.apps"
        minSdkVersion 10
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }

    productFlavors {
        findlostandroidphone {
            versionCode 1
            versionName 'v1.0'
            applicationId 'com.ralok.apps.findlostandroidphone'
        }
        findlostandroidphonepro {
            versionCode 1
            versionName 'v1.0'
            applicationId 'com.ralok.apps.findlostandroidphonepro'
        }
        if (analyticsJSON.equals("lite")) {
            println "--> FLPLite JSON copied!"
            copy {
                from 'src/findlostandroidphone/'
                include 'google-services.json'
                into '.'
            }
        } else {
            println "--> FLPPro JSON copied!"
            copy {
                from 'src/findlostandroidphonepro/'
                include 'google-services.json'
                into '.'
            }
        }
    }

    signingConfigs {
        lite_release {
            keyAlias 'ASDFGHJKL'
            keyPassword 'ASDFGHJKL'
            storeFile file('ASDFGHJKL.jks')
            storePassword 'ASDFGHJKL'
        }
        pro_release {
            keyAlias 'POIUYTREWQ'
            keyPassword 'POIUYTREWQ'
            storeFile file('POIUYTREWQ.jks')
            storePassword 'POIUYTREWQ'
        }
    }

    buildTypes {
        debug {
            minifyEnabled false
            debuggable true
        }
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

每次我必须手动更改最终字符串 analyticsJSON = "lite/pro" 以便 if 循环复制把右边的json文件复制到根目录下。无论如何我可以自动执行此操作并始终在 analyticsJSON 字符串中具有正确的 productFlavour 而不是我每次在 productFlavors 之间切换时手动更改值。我的 groovy 很糟糕,我已经尝试过但未能实现。

你不需要区分构建系统会为你做。只需将文件放在每个构建风格的正确路径中。例如。

findlostandroidphone 将您的 google-services.json 放在以下位置。

src/findlostandroidphone/google-services.json 构建文件将自动复制到该产品风味的最终位置。 pro 版本相同。

您现在拥有的将在配置阶段执行。这可能适用于...对于单一构建类型。如果您想同时构建这两种类型,那么您应该移动文件并完全删除 final String analyticsJSON = "lite"。然后在执行阶段 gradle 将复制文件并使用 productFlavor.

的正确文件执行构建

最终在版本 com.google.gms:google-services:2.0.0-alpha3

中实现了处理不同风格的解决方案

https://developers.google.com/android/guides/google-services-plugin#adding_the_json_file https://github.com/googlesamples/google-services/issues/54

另一种替代解决方案已启用

How do i keep different configurations for my android app with GCM 3.0