私は自分のプロジェクトをgradleに移行するようにしています。私のプロジェクトの1つには複数の製品フレーバーがあり、それぞれのリリースバージョンで異なるsigningConfig
で署名する必要があります。だから、これは私がこれまで試したものです:
buildscript {
...
}
apply plugin: 'Android'
Android {
compileSdkVersion 17
buildToolsVersion '17'
signingConfigs {
flavor1 {
storeFile file("keystore")
storePassword "secret"
keyAlias "aliasForFlavor1"
keyPassword "secretFlavor1"
}
flavor2 {
storeFile file("keystore")
storePassword "secret"
keyAlias "aliasForFlavor2"
keyPassword "secretFlavor2"
}
}
productFlavors {
flavor1 {
signingConfig signingConfigs.flavor1
}
flavor1 {
signingConfig signingConfigs.flavor2
}
}
}
dependencies {
...
}
gradle build
を実行すると、groovy.lang.MissingFieldException
と次のエラーメッセージが表示されます。
No such field: signingConfigs for class: com.Android.build.gradle.internal.dsl.GroupableProductFlavorFactory
したがって、GradleスクリプトのproductFlavors
。*部分は、コード署名構成を配置する適切な場所ではないと想定しています。
ユーザーガイド ごとに、フレーバーのsigningConfigsがサポートされています。
ここでの問題は、signingConfigsオブジェクトのスコープに関係しています。 productFlavors
ブロック内の変数に割り当てましたが、flavor1
フレーバーブロックで問題を修正します。
productFlavors {
def flavor1SigningVariable = signingConfigs.flavor1
flavor1 {
...
signingConfig flavor1SigningVariable
...
}
flavor
の各buildType
に対してsigning config
を宣言できます。ここに、異なるキーストアを使用したリリース署名フレーバー用の私のgradleファイルがあります。
Android {
signingConfigs {
configFirst {
keyAlias 'alias'
keyPassword 'password'
storeFile file('first.keystore')
storePassword 'password'
}
configSecond {
keyAlias 'alias'
keyPassword 'password'
storeFile file('second.keystore')
storePassword 'password'
}
}
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
minSdkVersion 14
targetSdkVersion 23
}
productFlavors{
flavor1 {
applicationId "com.test.firstapp"
}
flavor2 {
applicationId "com.test.secondapp"
}
}
buildTypes {
release {
productFlavors.flavor1.signingConfig signingConfigs.configFirst
productFlavors.flavor2.signingConfig signingConfigs.configSecond
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-Android.txt'),
'proguard-rules.pro'
}
}
}
buildTypes
ブロックはproductFlavors
ブロックの後に配置する必要があります。順序が重要です。
Androidのgradleプラグインは、フレーバーごとではなく、ビルドタイプごとの署名のみをサポートします。この理由は、variant(ビルドタイプ+フレーバー)たとえば、フレーバーグループはcpu(x86/arm)とバージョン(free/paid)であり、4つの異なるバリエーションがあります。
探しているソリューションは、リリースバージョンごとに個別のビルドタイプを作成することです。たとえば、ビルドタイプはdebug
、release
、release-beta
、 このような:
...
Android {
...
buildTypes {
debug {
signingConfig signingConfigs.debug
}
release {
signingConfig signingConfigs.release
}
release-beta {
initWith release
signingConfig signingConfigs.release-beta
}
}
}
上記のinitWith
はgradleにrelease-beta
は、release
ビルドタイプのコピーであり、異なるキーでのみ署名される必要があります。