更新到Android Studio 2.2 / gradle插件2.2.0之后:“无法获取未知属性”assembleRelease“”

在将Android Studio更新至2.2版并将Gradle插件更新2.2.0后 ,出现以下错误:

“无法获取types为org.gradle.api.Project的项目”app:“的未知属性”assembleRelease“。

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

我的代码:

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是一个定义在其他地方的variables,包含一个内部版本号。 assembleRelease.doLast中的代码只需移动/重命名生成的apk文件。

感谢您的build议! tangens

  • Android Studio 1.0在dexDebug或dexRelease上构build失败
  • 在org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler_Decorated@397740e0上找不到属性'compile'
  • 从Android Studio中的Gradle项目提交到VCS的内容
  • 使用64位或32位版本的Android Studio时,Gradle会陷入'build'或'assembleDebug'
  • 使用Gradle在多个Android应用程序之间共享Android库
  • 带有gradle和Google Maps v2的Android Studio
  • com.android.builder.testing.api.DeviceException:com.android.ddmlib.InstallException:无法安装全部
  • 如何在android studio中用gradle替换buildvariant的字符串?
  • 你可能会重写你的任务,并尝试这样做:

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

    你也可以检查这个问题,以获得更好的理解。

    编辑

    正如@tangens在评论中所言:

    当我用例如gradle renameBuildTaskreplace调用gradle组装时,它工作。 谢谢! 答案包含错误。 正确的是:任务renameBuildTask()<< {…}

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

    也许包装代码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

    详细信息: 无法获取未知属性“assembleDebug”(2.2-beta)

    将Android Studio升级到2.2和Gradle到2.2后,我遇到了同样的问题。 我有任务copyApk需要在build设结束时运行。 为了简洁,让我跳过以前的工作,只发布现在正在工作的内容:

     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之前运行。 “官方”是应用程序的味道。 我从这个SOpost得到了解决方法。 为了您的方便,我从本质上复制了答案。 所有学分都发送到该post的作者。

    里面的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' } } 

    你可以这样做:

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