Добавление ключей release в экспериментальный плагин Gradle для Android
Привет, у меня возникли проблемы с добавлением подписи моего варианта сборки релиза. В настоящее время я использую экспериментальный gradle 2.5 с новым плагином Android версии gradle 0.1.0.
build.gradle:
apply plugin: 'com.android.model.application'
model {
android {
compileSdkVersion = 15
buildToolsVersion = "22.0.1"
defaultConfig.with {
applicationId = "com.testcom.test"
minSdkVersion.apiLevel = 14
targetSdkVersion.apiLevel = 14
versionCode = 1
versionName = "1.0"
}
compileOptions.with {
sourceCompatibility JavaVersion.VERSION_1_6
targetCompatibility JavaVersion.VERSION_1_6
}
}
android.ndk {
...
}
android.signingConfigs {
signed {
keyAlias = "meow"
keyPassword = "**"
storeFile = file("meow-key.keystore")
storePassword = "**"
}
}
android.buildTypes {
release {
isMinifyEnabled = false
proguardFiles += file('proguard-rules.pro')
signingConfig = signingConfigs.signed
}
debug {
isDebuggable = true
isJniDebuggable = true
}
}
// You can modify the NDK configuration for each variant.
components.android {
binaries.afterEach { binary ->
binary.mergedNdkConfig.cppFlags.add(
"-DVARIANT=\"" + binary.name + "\"")
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
My root build.gradle:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle-experimental:0.1.0'
}
}
allprojects {
repositories {
jcenter()
}
}
Ошибка, которую я получаю при запуске ./gradlew assembleRelease
:
> Exception thrown while executing model rule: model.android.buildTypes > named(release)
> Attempt to read a write only view of model of type 'java.lang.Object' given to rule 'model.android.buildTypes'
У кого-то была аналогичная проблема с экспериментальным плагином gradle? Помощь будет принята с благодарностью.:)
Ответы
Ответ 1
Это обходное решение работает для меня и не требует -Dorg.gradle.model.dsl = true
model {
def signConf
android.buildTypes {
release {
signingConfig = signConf
}
}
android.signingConfigs {
create("signed") {
keyAlias = "meow"
keyPassword = "**"
storeFile = file("meow-key.keystore")
storePassword = "**"
storeType = "jks"
signConf = it
}
}
}
Однако он работает только в том случае, если у вас есть только один файл подписи.
Ответ 2
Вы должны иметь возможность добавлять ключи освобождения с помощью script следующим образом:
model {
android.buildTypes {
release {
signingConfig = $("android.signingConfigs.signed")
}
}
android.signingConfigs {
create("signed") {
keyAlias = "meow"
keyPassword = "**"
storeFile = file("meow-key.keystore")
storePassword = "**"
storeType = "jks"
}
}
}
В настоящее время это похоже на ошибку в плагине.
Вам нужно указать -Dorg.gradle.model.dsl=true
, когда вы запустите команду gradle.
Также у вас должна быть проблема с proguard.
В этом случае вы можете использовать new File("path/to/proguard-rules.pro")
вместо file('proguard-rules.pro')
Ответ 3
Правильный способ сделать это с помощью последней версии Android-плагина (0.6.0-alpha3) выглядит следующим образом:
android.signingConfigs {
create("release") {
storeFile = file("../keys.keystore")
storePassword = "st0r3pa$$"
keyAlias = "SecretKey"
keyPassword = "k3ypa$$"
}
}
android.buildTypes {
release {
signingConfig = $.android.signingConfigs.get("release")
}
}
В Gradle 2.9, который используется этой версией плагина, объявленные правила могут зависеть друг от друга с помощью специального синтаксиса: $.<path-to-element>
. Трюк заключается в том, чтобы создать конфиг подписи как обычно, а затем назначить его в другом правиле, используя этот синтаксис. Gradle поймет, что конфигурация подписи является зависимой от входа и позволит вам получить к ней доступ.