Unterzeichnung von Produktaromen mit Gradle

Ich bin bestrebt, meine Projekte zum Graduieren zu migrieren. Eines meiner Projekte hat mehrere Produkt-Aromen und jeder von ihnen muss mit einer anderen signingConfig in seiner Release-Version signiert werden. Also habe ich so weit versucht:

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 { ... } 

Wenn ich gradle build bekomme ich eine groovy.lang.MissingFieldException und die folgende Fehlermeldung:

  • SyncAdapter läuft Animation - wie man weiß, ob SyncAdapter aktiv synchronisiert
  • Wie kann ich Icons für Menüpunkte in Android ListView erstellen?
  • Adb nicht finden mein Gerät / Telefon (MacOS X)
  • Android.content.res.Resources $ NotFoundException: String Ressource ID # 0x0
  • ImageView Skalierung TOP_CROP
  • Android CheckBoxPreference - un / check alle Einstellungen
  •  No such field: signingConfigs for class: com.android.build.gradle.internal.dsl.GroupableProductFlavorFactory 

    Also nehme ich die Produkt-Aromen an. * Ein Teil des Graduierten-Skripts ist nicht der richtige Ort, um Code-Signing-Konfigurationen zu setzen.

  • Wie bekomme ich einen Artikel in der Listenansicht in android?
  • Wie mache ich YouTube-Video-Thumbnails in Android?
  • Wie mache ich eine benutzerdefinierte TextView?
  • ScrollView alawys scrolling nach unten
  • Jacoco Android createDebugCoverageReport nicht gefunden
  • Paket com.google.android.maps existiert nicht (IntelliJ)
  • 3 Solutions collect form web for “Unterzeichnung von Produktaromen mit Gradle”

    Nach dem Benutzerhandbuch werden signingConfigs für Aromen unterstützt.

    Das Problem hat hier mit dem Bereich des SigningConfigs-Objekts zu tun. Ich habe es einfach einer Variablen innerhalb des productFlavors Block zugeordnet, aber außerhalb des Geschmacks flavor1 Geschmack Block, um das Problem zu beheben:

     productFlavors { def flavor1SigningVariable = signingConfigs.flavor1 flavor1 { ... signingConfig flavor1SigningVariable ... } 

    Sie können die signing config für jeden flavor in buildType . Hier ist meine gradle-Datei für die Freigabe unterzeichnende Aromen mit verschiedenen Keystores.

     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 Block sollte nach productFlavors Block platziert werden, ich meine Ordnung ist wichtig.

    Das gradle Plugin für Android unterstützt nur die Signierung pro Build-Typ, nicht pro Geschmack. Der Grund dafür ist, dass jede gegebene Variante (Build-Typ + Aromen) nur von einem Schlüssel signiert werden kann, aber eine Kombination aus mehreren Geschmacksgruppen sein kann. Zum Beispiel könnten deine Geschmacksgruppen cpu (x86 / arm) und Version (frei / bezahlt) sein, das sind vier verschiedene Varianten genau dort.

    Die Lösung, die Sie suchen, ist, separate Build-Typen für Ihre verschiedenen Release-Versionen zu erstellen. Zum Beispiel könnten Ihre Build-Typen debug , release , release-beta , wie folgt sein:

     ... android { ... buildTypes { debug { signingConfig signingConfigs.debug } release { signingConfig signingConfigs.release } release-beta { initWith release signingConfig signingConfigs.release-beta } } } 

    Die initWith oben nur erzählt gradle, dass release-beta sollte eine Kopie der release Build-Typ, nur mit einem anderen Schlüssel signiert werden.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.