15
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ProductFlavorごとに署名する証明書を変えたい

Last updated at Posted at 2016-05-26

背景

内容は(タイトルも)ほぼ下記の既存記事とあまり変わらないのですが,仕様変更がされたのか上手く署名を切り換えることができませんでした.

[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
    }
}

指定は単純だったのに,スゴく調査に時間かかった….

15
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?