更新到Android Studio 2.2 / gradle插件2.2.0之后:"无法获得未知属性' assembleRelease'"

时间:2016-09-20 09:33:06

标签: android gradle android-studio-2.2

Android Studio 更新为版本2.2 并将 Gradle-plugin 更新为 2.2.0 后,我获得了以下错误:

"无法获得未知财产' assembleRelease'对于项目':app'类型为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中的代码只需移动/重命名生成的apk文件。

感谢您的建议! tangens

6 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:15)

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

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

您也可以查看this问题以便更好地理解。

修改

正如@tangens在评论中所说:

  

当我用例如替换呼叫gradle汇编时它起作用gradle renameBuildTask。谢谢!答案包含错误。正确的是:task renameBuildTask()&lt;&lt; {...}

答案 2 :(得分:7)

可能在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)

答案 3 :(得分:5)

将Android Studio升级到2.2并将Gradle升级到2.2后,我遇到了同样的问题。 我有任务copyApk需要在构建结束时运行。为简洁起见,让我跳过之前正在工作的内容,并仅发布现在正在发挥作用的内容:

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之前运行。 &#34;官方&#34;是应用程序的味道。 我从this SO post得到了解决方法。为了您的方便,我基本上复制了答案。所有学分都归该帖子的作者所有。

答案 4 :(得分:0)

你可以这样做:

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

答案 5 :(得分:0)

在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'
            }
        }