如何在新 gradle 中配置产品风味

How to configure product flavor in new gradle

我正在配置我的应用程序的付费版和免费版,但出现以下错误。我已经在 android 3 之前进行了相同的配置,没有问题。

请问如何解决?

Gradle 脚本

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "capstone.nanodegree.udacity.com.mypodcast"
        minSdkVersion 16
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        targetCompatibility 1.8
        sourceCompatibility 1.8
    }

    //flavorDimensions "default"
    flavorDimensions "free", "paid"

    productFlavors {
        free {
            applicationId "capstone.nanodegree.udacity.com.mypodcast.free"
            dimension "free"
        }

        paid {
            applicationId "capstone.nanodegree.udacity.com.mypodcast.paid"
            dimension "paid"
        }
    }
}
def AAVersion = '4.4.0'
def GLIDEVersion = '4.3.1'
def supportVersion = '26.1.0'

检查你的 google-services.json 中是否有两个包的条目......另外,这可能是一个单独的问题,我相信你应该只需要定义一个维度(你的两种口味会有相同的dimension 值)

我使用的 Flavors 和你一样,为了简单比较,我将删除我的 2 个 flavor 并重命名:

compileSdkVersion 26
    buildToolsVersion googleBuildTools

    dataBinding {
        enabled = true
    }

    defaultConfig {
        applicationId "com.myapp"
        minSdkVersion 21
        targetSdkVersion 26
        multiDexEnabled true
        vectorDrawables.useSupportLibrary = true
    }
   signingConfigs {
        releaseMyApp {
            storeFile file("$projectDir/../myappkeystore.jks")
            storePassword System.getenv('MYAPP_STORE_PASSWORD')
            keyAlias System.getenv('MYAPP_KEY_ALIAS')
            keyPassword System.getenv('MYAPP_KEY_PASSWORD')
        }
    }

productFlavors {
    myapp {
        applicationId "com.myApp.one"
        buildConfigField "String", "SERVER_URL", '"https://api.myappone.com"'
        versionCode 24
        versionName "1.18"
        minSdkVersion 21
    }
    myappStaging {
        applicationId "com.myapp.one.staging"
        buildConfigField "String", "SERVER_URL", '"https://stg.api.myappone.com"'
        versionCode 24
        versionName "1.18"
        minSdkVersion 21
    }
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        productFlavors.myapp.signingConfig signingConfigs.releaseMyapp
        productFlavors.myappStaging.signingConfig signingConfigs.releaseMyapp
    }
}

没有问题,但我会 post 以防万一你注意到我没有注意到的不同之处,但你的错误可能与你的 firebase json 有关。您可以为所有风格使用相同的 json 文件,您只需要为每个应用程序标识符创建一个客户端部分。您可以通过 firebase 门户在线创建。

我错误地为每种风格制作了单独的 firebase json 文件,后来发现我不需要这样做,因为它们与其中的所有客户端都是相同的。

最初我只为两种不同的应用程序类型使用了 flavors,但后来不得不为 staging 制作 flavor 以在多个环境中支持 PUSH。祝你好运。希望这有帮助,但我猜你需要修复你的 firebase json 文件。