2016-09-20 79 views
25

更新Android Studio中版本2.2摇篮,插件后2.2.0 ,我得到以下错误:更新到Android Studio 2.2中/ gradle这个插件2.2.0后: “无法获得未知属性 'assembleRelease'”

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

当我将插件版本更改回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是定义otherwhere变量并包含一个版本号。 assembleRelease.doLast中的代码只需移动/重命名生成的apk文件。

谢谢你的建议! tangens

+0

你能否提供更多的代码? –

+0

我做了一些更改,使其更清楚我想要做什么。 – tangens

+2

看看这个:http://stackoverflow.com/a/38569576/2652124 要找到任务,您可以使用查找路径选项,作为答案的评论说。 –

回答

15

你可以重写你的任务了一下,尝试这样的:

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() << { ... }

+1

它可以在我通过例如代码来替换call * gradle assemble时使用。 * gradle renameBuildTask *。 谢谢! 答案包含错误。正确的是: 'task renameBuildTask()<< { ... }' – tangens

+1

你把这个放在** app **的build.gradle文件中的位置?我得到一个错误:'没有方法java.lang.String.dependsOn()的签名适用于参数类型' –

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

你把这个放在** app **模块或顶级项目目录中的位置? –

+0

@IgorGanapolsky应用程序模块 – HalZhang

+0

按下绿色的运行按钮时,它不会为我做任何事情。 –

5

我有同样的问题,升级过Android Studio 2.2和摇篮到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' 
    } 
} 

摇篮控制台显示copyApk附近被packageOfficialRelease,assembleOfficialRelease后结束运行,最后的任务assembleRelease之前。 “官方”是应用程序的味道。 我从this SO post得到了解决方法。为了您的方便,我从本质上复制了答案。所有学分都发给该帖子的作者。

+0

你将这些任务放到哪个gradle文件中? –

+1

在应用程序的build.gradle中。 – Hong

0

,你可以这样做:

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

它不起作用 –

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' 
      } 
     } 
相关问题