更新到 Android Studio 2.2 / gradle 插件 2.2.0 后:"could not get unknown property 'assembleRelease'"

After update to Android Studio 2.2 / gradle plugin 2.2.0: "could not get unknown property 'assembleRelease'"

Android Studio 更新到 版本 2.2Gradle 插件后2.2.0,我收到以下错误:

"Could not get unknown property 'assembleRelease' for project ':app' of type org.gradle.api.Project."

当我将插件版本改回 2.1.3 时,代码仍然有效,但这对我来说不是长期选择。

我的代码:

apply plugin: 'com.android.application'

dependencies {
...
}

android {
...
}

...    
assembleRelease.doLast {
  file('build/outputs/apk/app-release.apk').renameTo("AppName-1.0.0-${project.ext.androidVersionCode}.apk")
}

提示: project.ext.androidVersionCode 是在别处定义的变量,包含内部版本号。 assembleRelease.doLast 中的代码应该只是 move/rename 生成的 apk 文件。

谢谢指教! 切线

您可以稍微重写您的任务并尝试这样:

task renameBuildTask() << {
  file('build/outputs/apk/app-release.apk').renameTo("AppName-1.0.0-${project.ext.androidVersionCode}.apk")
  dependsOn 'assembleRelease'
}

您也可以检查 this 问题以获得更好的理解。

编辑

正如@tangens 在评论中所说:

It works when I replace the call gradle assemble by e.g. gradle renameBuildTask. Thank you! The answer contains an error. Correct would be: task renameBuildTask() << { ... }

tasks.whenTaskAdded { task ->
  if (task.name == 'assembleRelease') {
    task.finalizedBy 'yourRenameTasks'
  }
}

将 Android Studio 升级到 2.2 并将 Gradle 升级到 2.2 后,我遇到了同样的问题。 我有任务 copyApk 需要在构建结束时为 运行。为简洁起见,让我跳过之前有效的部分,post 只说明现在有效的部分:

tasks.create(name: 'copyApk', type: Copy) {
    from 'build/outputs/apk/myapp-official-release.apk'
    into '.../mobile'
    rename('myapp-official-release.apk', 'myapp.apk')
}

tasks.whenTaskAdded { task ->
    if (task.name == 'assembleRelease') {
        task.dependsOn 'copyApk'
    }
}

Gradle 控制台显示 copyApk 运行 在 packageOfficialRelease、assembleOfficialRelease 之后接近尾声,就在最后一个任务 assembleRelease 之前。 "Official" 是应用程序的风格。 我从 this SO post 得到了解决方法。为了您的方便,我基本上在此处复制了答案。所有学分归于 post.

的作者

你可以这样做:

task copyApk(dependsOn: "assembleRelease") << {
    file('build/outputs/apk/app-release.apk').renameTo("AppName-1.0.0-${project.ext.androidVersionCode}.apk")
}

也许在 afterEvaluate{} 中包装代码会起作用:

afterEvaluate {
    assembleRelease.doLast {
       file('build/outputs/apk/app-release.apk').renameTo("AppName-1.0.0-${project.ext.androidVersionCode}.apk")
    }
}

gradle-2.14.1 和 android gradle 插件 2.2.0

详情: Could not get unknown property 'assembleDebug' (2.2-beta)

在 buildTypes {} 方法中,我把这段代码:工作得很好

task setEnvRelease << {
            ant.propertyfile(
                    file: "src/main/assets/build.properties") {
                entry(key: "EO_WS_DEPLOY_ADDR", value: "http://PRODUCTION IP")
            }
        }

        task setEnvDebug << {
            ant.propertyfile(
                    file: "src/main/assets/build.properties") {
                entry(key: "EO_WS_DEPLOY_ADDR", value: "http://DEBUG IP TEST")
            }
        }
tasks.whenTaskAdded { task ->
            if (task.name == 'assembleDebug') {
                task.dependsOn 'setEnvDebug'
            } else if (task.name == 'assembleRelease') {
                task.dependsOn 'setEnvRelease'
            }
        }