在Android实验性Gradle插件中添加释放键

在Android实验性Gradle插件中添加释放键,android,android-studio,gradle,android-ndk,Android,Android Studio,Gradle,Android Ndk,嘿,我在添加我的发布版本变体时遇到了一些问题。目前,我正在使用实验性的Gradle2.5和新的android gradle插件版本0.1.0 build.gradle: apply plugin: 'com.android.model.application' model { android { compileSdkVersion = 15 buildToolsVersion = "22.0.1" defaultConfig.with

嘿,我在添加我的发布版本变体时遇到了一些问题。目前,我正在使用实验性的Gradle2.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'])
}
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle-experimental:0.1.0'
    }
}

allprojects {

    repositories {
        jcenter()
    }
}
My root 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'])
}
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle-experimental:0.1.0'
    }
}

allprojects {

    repositories {
        jcenter()
    }
}
运行
/gradlew assembleerelease
时出现的错误是:

> 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插件有过类似的问题?非常感谢您的帮助。:)

您应该能够使用如下脚本添加释放密钥:

model {
    android.buildTypes {
        release {
            signingConfig = $("android.signingConfigs.signed")
        }
    }

    android.signingConfigs {
        create("signed") {
            keyAlias = "meow"
            keyPassword = "**"
            storeFile = file("meow-key.keystore")
            storePassword = "**"
            storeType = "jks"
        }
    }
}
目前它似乎是插件中的一个bug。
运行gradle命令时,需要指定
-Dorg.gradle.model.dsl=true

你也应该对proguard有意见。
在这种情况下,您可以使用
新文件(“path/to/proguard rules.pro”)
而不是
文件(“proguard-rules.pro”)

此解决方案对我有效,不需要-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
        }
    }
}

但是,只有当您只有一个登录配置时,它才起作用。

使用最新版本的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中,声明的规则可以使用一种特殊的语法相互依赖:
$。
。诀窍是像往常一样创建签名配置,然后使用此语法将其分配给不同规则中的字段。Gradle会意识到签名配置是一个输入依赖项,并允许您访问它。

嘿,非常感谢您的帮助:)!我尝试了此操作,但出现错误:$()当模型{}块不是中的顶级语句时,无法使用语法script@canuc尝试将插件更新到
com.android.tools.build:gradle-experimental:0.2.1