【问题标题】:Adding release keys in the experimental Gradle plugin for Android在 Android 的实验性 Gradle 插件中添加发布密钥
【发布时间】:2015-11-13 13:54:23
【问题描述】:

嘿,我在添加签名我的发布版本变体时遇到了一些问题。目前我正在使用带有新的 android gradle 插件版本 0.1.0 的实验性 gradle 2.5。

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'])
}

我的根 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 插件有类似的问题吗?帮助将不胜感激。 :)

【问题讨论】:

    标签: android android-studio gradle android-ndk


    【解决方案1】:

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

    model {
        android.buildTypes {
            release {
                signingConfig = $("android.signingConfigs.signed")
            }
        }
    
        android.signingConfigs {
            create("signed") {
                keyAlias = "meow"
                keyPassword = "**"
                storeFile = file("meow-key.keystore")
                storePassword = "**"
                storeType = "jks"
            }
        }
    }
    

    目前它似乎是插件中的一个错误。
    您需要在运行 gradle 命令时指定 -Dorg.gradle.model.dsl=true

    另外,您应该对 proguard 有疑问。 在这种情况下,您可以使用new File("path/to/proguard-rules.pro") 而不是file('proguard-rules.pro')

    【讨论】:

    • 嘿,非常感谢您的帮助 :) !我尝试了这个并且得到了错误:当模型 {} 块不是脚本中的顶级语句时不能使用 $() 语法
    • @canuc 尝试将插件更新为com.android.tools.build:gradle-experimental:0.2.1
    【解决方案2】:

    此解决方法适用于我,不需要 -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
            }
        }
    }
    

    但是,它只有在您只有一个签名配置时才有效。

    【讨论】:

      【解决方案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 将意识到签名配置是一个输入依赖项,并允许您访问它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多