Добавление ключей 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 поймет, что конфигурация подписи является зависимой от входа и позволит вам получить к ней доступ.