背景
我认为 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 个构建变体:
- 自由调试
- 免费发布
- 付费调试
- 付费发布
我想保留这些,但对于“付费”的有不同的密钥配置,因为它使用相同的“免费”的密钥配置。
我发现和尝试过的
我找到了有关该主题的下一个问题和教程:
-
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 个:
- 自由调试调试
- 免费调试发布
- 免费发布调试
- 免费发布发布
- 付费调试调试
- 付费调试发布
- 付费发布调试
- 付费发布发布
很确定这里发生的事情是,对于每种风格,它都会生成调试和发布,并且由于我定义了 4 种风格,所以它是 4*2=8 ...
问题
-
我在这里做错了什么?我怎样才能拥有按计划和原来存在的 4 件物品?
也许可以为每种风格设置一个 buildType ?
或者也许我需要设置 2 个维度值,一个用于“免费”,一个用于“付费”?
-
signingConfigs 项的设置看起来不错吗?对于每个不同的文件,它使用相同的 storePassword 值,并且对于每种风格,它应该使用不同的 keyAlias 和 keyPassword 。正确的?