如何为每个版本提供 2 种风格和 2 种不同的密钥配置以用于调试版本?

2023-12-29

背景

我认为 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 的“Build Variants”窗​​口中生成 4 个构建变体:

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

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

我发现和尝试过的

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

  • Gradle 中不同产品风格的不同 keyStore https://stackoverflow.com/q/36194748/878126

  • 如何使用单个密钥库签署多种风格的 APK https://stackoverflow.com/q/72240252/878126

  • https://medium.com/@chauyan/how-to-use-gradle-on-multi-keystore-flavors-project-297ec083150b https://medium.com/@chauyan/how-to-use-gradle-on-multi-keystore-flavors-project-297ec083150b

  • https://blog.tunebrains.com/2015/10/02/gradle-multi-flavors-signing.html https://blog.tunebrains.com/2015/10/02/gradle-multi-flavors-signing.html

  • https://developer.android.com/studio/publish/app-signing https://developer.android.com/studio/publish/app-signing

所以,我尝试的是将“signingConfigs”中的“release”分开(不需要调试,因为这个可以很好地用于免调试组合),从“buildTypes”->“release”中删除“signingConfig” ,并且有 4 个产品风味而不是 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 。正确的?


您不需要创建 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
    }
}

Note:buildTypes 块应放置在 ProductFlavors 块之后

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为每个版本提供 2 种风格和 2 种不同的密钥配置以用于调试版本? 的相关文章

随机推荐

  • Javadoc 无法识别文档标题选项/标志

    我通过 gradle 使用 doclet 运行 javadoc 当我运行 javadoc doclet 任务时 我收到下一个错误 error invalid flag doctitle 之后是下一个使用表 usage javadoc opt
  • 为什么 UILabel 没有初始化?

    代码来自斯坦福大学CS193p 我添加了一个 NSLog 来查看 标签似乎没有被初始化 任何想法 interface AskerViewController
  • 变量内部的 jQuery 选择器?

    您好 我正在尝试获取另一个 HTML 文件中具有特定类的所有 DIV 的 ID 要加载我使用的文件 get blocks html function data here I don t know how 现在我正在寻找这样的东西 data
  • 如何使用RelativeLayout实现以下结果?

    图片 http img838 imageshack us img838 1402 picse png http img838 imageshack us img838 1402 picse png 如何制作图中的布局 2 仅使用Relati
  • 按组从前一行减去值

    在 R 中 假设我有这个数据框 Data id date value 2380 10 30 12 21 01 2380 10 31 12 22 04 2380 11 1 12 22 65 2380 11 2 12 23 11 20100 1
  • Swing GroupLayout:调整大小和限制组件大小

    我在用着GroupLayout管理一些动态生成的数据输入表单中的组件 布局或多或少像这样 label A field A label B field B label C field C 我使用 2 个并行组进行水平布局 使用一个顺序组进行垂
  • UEFI引导加载程序

    我正在考虑开发一个简单的 首先 UEFI 引导加载程序来加载 ELF 映像 并且想知道是否有人有一个很好的切入点 可以进入任何现有项目 或者我可以用来开始使用的示例 另外 我想知道是否有人有让虚拟机运行 EFI 应用程序的经验 我已经设置了
  • 子进程会发生什么?

    如果子进程的父进程未经等待就突然终止 会发生什么情况 子进程也会死吗 孩子得到重新定义为init http en wikipedia org wiki Orphan process
  • linux Wayland 显示多用户

    我使用摇摆合成器 当我在控制台中更改用户时 我无法显示 wayland 图形界面 它与 X 应用程序一起使用 su otherUser myApplicationWayland error XDG RUNTIME DIR not set i
  • Windows 上的 Apache / PHP 因正则表达式而崩溃

    我发现以下 PHP 代码在 Windows Apache 服务器上运行时会崩溃
  • Google Firebase 功能部署失败 - 我该怎么办?

    错误信息 Error There was an error deploying functions firebase debug log 包含以下内容 debug 2021 11 16T12 12 16 165Z Error Failed
  • 如何在 NestJS 中提供静态图像

    我开始学习 MEAN 堆栈 当我访问 Express 时 我发现 Express 框架中存在一个额外的层 称为 NestJS 它拥有我想要的一切 并且具有类似 Angular 的语法 因此对我来说非常完美 但每一个新步骤都是一场噩梦 文档根
  • Android SurfaceView 的低 FPS

    我在使用 SurfaceView 时遇到了一些帧速率问题 我正在做我在一些教程中找到的典型内容 所有教程都说一样 但我无法在我的三星 Galaxy S 旧款 i9000 上达到像样的帧速率 这是我的循环线程的代码 FPS 初始化为 30 O
  • RESTSharp 无法找到位置标头

    我有一个 C 异步任务返回 Task
  • 无法将外部引用与 C# 控制台应用程序一起使用

    我已经尝试了下面的所有建议 但仍然没有喜悦 我现在正在尝试控制台应用程序 让我准确解释一下我在做什么 我在 VS 2010 中创建一个新的控制台项目 我添加了许多引用 dll 其中一些不是我的 例如 Castle Winsor 和 N2 C
  • Rails 开发人员如何与 Flex 前端对话?

    我将 Rails 开发视为 Flex 应用程序的后端 并试图找出 Rails 应用程序和 Flash Player 之间的通信层 我发现的所有内容都表明使用 SOAP Web 服务进行通信 然而 Flash 支持 AMF 它很好且快速 并且
  • 在 AFNETWORKING 中返回响应

    我正在关注this http www raywenderlich com 30445 afnetworking crash course在 IOS 中学习 AfNetworking 的教程 我正在使用以下函数来获取服务器的响应 1 NSSt
  • 仅更改图表一个区域的背景颜色[重复]

    这个问题在这里已经有答案了 我想仅更改图表的一部分的背景颜色 那可能吗 例如 使用下面的图表 我可能想表明我对重量在 2 到 4 吨之间的汽车特别感兴趣 因此希望使用粉红色背景突出显示该区域 更具体地说 我想覆盖一个透明的粉红色矩形 该矩形
  • 如何在 Swift 中检索对象的类型? [复制]

    这个问题在这里已经有答案了 我似乎无法在 Swift 中找到返回对象类型的函数或方法 如何在 Swift 中检索对象的类型或类 我尝试使用 Obj C 类 但显然不起作用 在Python中你有类似的东西type or isinstance
  • 如何为每个版本提供 2 种风格和 2 种不同的密钥配置以用于调试版本?

    背景 我认为 Google 登录存在一个问题 该问题与我们对我们开发的 2 种不同风格的应用程序使用相同的密钥配置这一事实有关 原因是两者在调试和发布时似乎具有相同的 SHA1 该问题仅存在于第二个版本的发行版本中 在第一种风格的构建和调试