背景
内容は(タイトルも)ほぼ下記の既存記事とあまり変わらないのですが,仕様変更がされたのか上手く署名を切り換えることができませんでした.
[Android][Gradle]product flavorごとに署名する証明書を変えたい
環境
gradle plugin: 2.1.0
やりたいこと
各 product flavor および build type で署名を変えます.
今回の場合, (flavor x2) * (build type x2) で,4つの証明書を切り換えることになります.
- signingConfigs
- trialDebug
- trialRelease
- productDebug
- productRelease
各シーン毎にそれぞれの署名を行いたいというケースです.
signingConfigs ブロック
下記各ブロックに署名設定を記載します.
signingConfigs {
trialDebug{
// 略
}
trialRelease{
}
productDebug{
}
productRelease{
}
}
productFlavors ブロック
product flavorsには,flavorだけ書いておきます.
今回は署名を切り換えるだけですが,もちろん通常のflavor設定を書いてもかまいません.
productFlavors {
trial {
}
product {
}
}
signingConfigs ブロック
ここに罠が追加されていました.
上に紹介した記事や StackOverFlow を見る限り,以下の指定でイケそうな感じです.
buildTypes {
release {
debuggable false;
productFlavors.trial.signingConfig signingConfigs.trialRelease
productFlavors.product.signingConfig signingConfigs.productRelease
}
debug {
debuggable true;
productFlavors.trial.signingConfig signingConfigs.trialDebug
productFlavors.product.signingConfig signingConfigs.productDebug
}
}
しかし,これでビルドして keytool -list -printcert -jarfile app-trial-debug.apk
してみると…
署名者番号1:
署名:
所有者: CN=Android Debug, O=Android, C=US
発行者: CN=Android Debug, O=Android, C=US
デフォルトの debug.keystore によって署名されてしまっています.
解決
もう少し Stackoverflow を探っているとこんな記述を見つけました
http://stackoverflow.com/questions/29618363/signing-config-per-flavor-not-working
It seems that by default, Android has a signingConfig set on the debug build type (the android debug keystore),
and when the signingConfig is set for the build type, the signingConfig is ignored for the flavor.
The solution is to set the signingConfig to null on the debug build type.
Then the signingConfig given for the flavor will be used instead:
デフォルトでは debug.keystore を持っていてflavorのsigningConfig指定は無視される.
やりたいなら最初に signingConfig に null を詰めておけ
と,いうわけで
buildTypes {
release {
signingConfig null // ★ 追加
debuggable false;
productFlavors.trial.signingConfig signingConfigs.trialRelease
productFlavors.product.signingConfig signingConfigs.productRelease
}
debug {
signingConfig null // ★ 追加
debuggable true;
productFlavors.trial.signingConfig signingConfigs.trialDebug
productFlavors.product.signingConfig signingConfigs.productDebug
}
}
指定は単純だったのに,スゴく調査に時間かかった….