Конфигурация подписи варианта сборки Android
У меня есть следующее в моем модуле приложения Android файл build.gradle.
android {
defaultConfig {
...
}
signingConfigs {
if (System.getEnv()['CIRCLE-CI']) { /* CI System */
localMachine { /* CI System KeyStore file and properties. */
...
keyAlias = "ABC"
}
playStore { /* CI System KeyStore file and properties. */
...
keyAlias = "ABC"
}
} else { /* Local machine, not CI System. */
localMachine { /* debug.keystore local file and properties. */
...
keyAlias = "androiddebugkey"
}
playStore { /* debug.keystore local file and properties. */
...
keyAlias = "androiddebugkey"
}
}
}
productFlavors {
productOne {
...
}
productTwo {
...
}
}
buildTypes {
debug {
...
}
release {
...
}
}
}
/** This is where the problem is **/
android.applicationVariants.all { variant ->
if (variant.mergedFlavor.name == "productOne") {
if (variant.buildType.name == "debug") {
variant.signingConfig android.signingConfigs.localMachine
} else if (variant.buildType.name == "release") {
variant.signingConfig android.signingConfigs.playStore
}
} else if (variant.mergedFlavor.name == "productTwo") {
if (variant.buildType.name == "debug") {
variant.signingConfig android.signingConfigs.localMachine
} else if (variant.buildType.name == "release") {
variant.signingConfig null
}
}
}
}
Ожидаемый результат следующий.
productOneDebug -> Sign with signingConfigs.localMachine
productTwoDebug -> Sign with signingConfigs.localMachine
productOneRelease -> Sign with signingConfigs.playStore
productTwoRelease -> Unsigned.
Фактический вывод выглядит следующим образом.
productOneDebug -> Signed with signingConfigs.localMachine
productTwoDebug -> Signed with signingConfigs.localMachine
productOneRelease -> Unsigned.
productTwoRelease -> Unsigned.
Почему релиз apks всегда без подписи? Намерение состоит в том, чтобы ProductTwo Release apk оставался без подписи, но ProductOne Release apk должен быть подписан в зависимости от заданной конфигурации.
1 ответ
По-видимому, это то, что происходит во время Gradle Sync.
Variant.signingConfig
является Перезаписанным механизмом как Flavor, так и Build-type, в том же порядке, в зависимости от того, существует ли значение.
productOne.signingConfig = playStore
productTwo.signingConfig = null
debug.signingConfig = localMachine
release.signingConfig = null
И получившиеся варианты будут -
productOneDebug.signingConfig = productOne.signingConfig
переписано debug.signingConfig
productTwoDebug.signingConfig = productTwo.signingConfig
переписано debug.signingConfig
productOneRelease.signingConfig = productOne.signingConfig
переписано release.signingConfig
если существует.
productTwoRelease.signingConfig = productTwo.signingConfig
переписано release.signingConfig
если существует.