【问题标题】:How to have 2 flavors and 2 different key-configuration for debug&release for each?如何为每个调试和发布提供 2 种风格和 2 种不同的密钥配置?
【发布时间】:2023-02-13 19:49:21
【问题描述】:

背景

我认为 Google 登录存在一个问题,这与我们对我们开发的 2 种不同风格的应用程序使用相同的密钥配置这一事实有关。原因是两者似乎在调试和发布时具有相同的 SHA1。

该问题仅存在于第二种版本的发行版中。在第一种风格的构建和调试以及第二种风格的调试中,它工作正常。

问题

我可能应该在使用相同的发布密钥库(使用现有密钥库生成)的同时生成一个新的密钥配置,但我不确定如何在 gradle 文件上进行设置。

假设这两个包名是“com.free”和“com.paid”(不是真名,只是为了简化问题)。

这就是我现在所拥有的,简化且没有真正的价值

defaultConfig {
    applicationId "com.free"
    ...
}

signingConfigs {
    debug {
        storeFile file('debug.keystore')
        storePassword "storePassword1"
        keyAlias "keyAlias1"
        keyPassword "keyPassword1"
    }

    release {
        storeFile file('release.keystore')
        storePassword "storePassword2"
        keyAlias "keyAlias2"
        keyPassword "keyPassword2"
    }
}

buildTypes {
    release {
        signingConfig signingConfigs.release
        ...
    } 

    debug {
        ...
    }
}

flavorDimensions.add("default")

productFlavors {
    free {
        dimension "default"
        applicationId "com.free"
        ...
    }

    paid {
        dimension "default"
        applicationId "com.paid"
        ...
    }
}

namespace 'com.free'

因此,这会在 Android Studio 的“构建变体”窗口中生成 4 个构建变体:

  1. 免费调试
  2. 免费发布
  3. 付费调试
  4. 付费发布

    我想继续使用这些,但是对于“付费”的密钥配置不同,因为它使用的是相同的“免费”密钥配置。

    我发现并尝试过的

    我找到了有关此主题的下一个问题和教程:

    所以,我尝试的是在“signingConfigs”中拆分“release”(不需要调试,因为这个可以很好地用于无调试组合),从“buildTypes”->“release”中删除“signingConfig” ,并且有 4 个 productFlavors 而不是 2 个:

    signingConfigs {
        //unchanged:
        debug {
            storeFile file('debug.keystore')
            storePassword "storePassword1"
            keyAlias "keyAlias1"
            keyPassword "keyPassword1"
        }
    
        //using new keystore file, split for 2 different flavors, and have new keyAlias and keyPassword for "paid" :
        releaseFree {
            storeFile file('new_release.keystore')
            storePassword "storePassword2"
            keyAlias "keyAlias2"
            keyPassword "keyPassword2"
        }
        releasePaid {
            storeFile file('new_release.keystore')
            storePassword "storePassword2"
            keyAlias "keyAlias3"
            keyPassword "keyPassword3"
        }
    }
    
    buildTypes {
        release {
            //commented this as it can't be used anymore (split and not shared)
            //signingConfig signingConfigs.release
            ...
        } 
    
        debug {
            ...
        }
    }
    
    flavorDimensions.add("default")
    
    productFlavors {
        //split to 4 : free-debug, paid-debug, free-release, paid-release
    
        freeDebug {
            dimension "default"
            applicationId "com.free"
            //identical debug key configuration should work fine for both
            signingConfig signingConfigs.debug
            ...
        }
    
        paidDebug {
            dimension "default"
            applicationId "com.paid"
            //identical debug key configuration should work fine for both
            signingConfig signingConfigs.debug
            ...
        }
    
        freeRelease {
            dimension "default"
            applicationId "com.free"
            signingConfig signingConfigs.releaseFree 
            ...
        }
    
        paidDebug {
            dimension "default"
            applicationId "com.paid"
            signingConfig signingConfigs.releasePaid 
            ...
        }
    }
    
    

    IDE 接受了这些更改,但我在“Build Variants”窗​​口中看到的不是计划的 4 个项目,而是 8 个:

    1. 免费调试调试
    2. 免费调试发布
    3. 免费发布调试
    4. 免费发布发布
    5. 付费调试调试
    6. 付费调试发布
    7. 付费发布调试
    8. 付费发布发布

      很确定这里发生的是,对于每种口味,它都生成了调试和发布,并且正如我定义的 4 种口味,它是 4*2=8 ...

      问题

      1. 我在这里做错了什么?我怎样才能按计划拥有 4 件物品? 也许可以为每种口味设置一个 buildType? 或者我可能需要设置 2 个维度值,一个用于“免费”,一个用于“付费”?

      2. signingConfigs 项的设置是否正常?对于每个不同的文件,它使用相同的 storePassword 值,并且对于每种风格,它应该使用不同的 keyAlias 和 keyPassword 。正确的?

【问题讨论】:

    标签: android gradle android-build-flavors android-build-type


    【解决方案1】:

    您不需要创建 4 种产品风格,您可以使用构建类型来区分调试和发布构建。

    productFlavors {
        free {
            applicationId "com.free"
        }
    
        paid {
            applicationId "com.paid"
        }
    
    }
    

    使用构建类型进行发布/调试以设置您的 签名配置。

    buildTypes {
        release {
            productFlavors.free.signingConfig signingConfigs.releaseFree
            productFlavors.paid.signingConfig signingConfigs.releasePaid
            ...
        }
        debug{
            productFlavors.free.signingConfig signingConfigs.debug
            productFlavors.paid.signingConfig signingConfigs.debug
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-04-28
      • 2013-08-29
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多