Подписывание ароматов продуктов с gradleиентом

Я использую tyring для переноса моих проектов на gradleиент. Один из моих проектов имеет несколько продуктов вкусов, и каждый из них должен быть подписан с другой signConfig в своей версии. Так вот что я пробовал до сих пор:

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 

Поэтому я предполагаю, что productFlavors. * Часть сценария gradleации не является подходящим местом для размещения конфигураций подписи кода.

В руководстве пользователя поддерживается поддержка подписи для ароматов.

Проблема здесь связана с объемом объекта signatureConfigs. Я просто назначил его переменной внутри блока productFlavors , но вне flavor1 аромата flavor1 чтобы исправить проблему:

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

Вы можете объявить buildType для каждого flavor в buildType . Вот мой файл 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 , я имею в виду, что порядок важен.

Плагин gradle для android поддерживает только подписи для каждого типа сборки, но не для каждого аромата. Причиной этого является то, что любой данный вариант (тип сборки + флейворы) может быть подписан только одним ключом, но может быть комбинацией нескольких групп вкуса. Например, ваши группы вкусов могут быть процессором (x86 / arm) и версией (бесплатно / оплачивается), это четыре разных варианта.

Решение, которое вы ищете, – это создание отдельных типов сборки для разных версий выпуска. Например, ваши типы сборки могут быть 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 , только подписанного с другим ключом.

  • Генерировать различные случайные числа в C #
  • Как испускать и выполнять байт-код Java во время выполнения?
  • Форматирование Литеральные параметры fragmentа кода C #
  • Как я могу тестировать графический интерфейс?
  • Когда использовать утверждение и когда использовать исключение
  • Что означает == $ 0 (double equals dollar zero) в инструментах разработчика Chrome?
  • Как определить неиспользуемые определения css
  • Отключение автоматического форматирования в Visual Studio
  • Отладчик Visual Studio - отображение целочисленных значений в шестнадцатеричном виде
  • «CompanyName.Foo» - это «пространство имен», но используется как «тип»,
  • Когда можно использовать обработку исключений для бизнес-логики?
  • Давайте будем гением компьютера.