2016-09-20 78 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' 
      } 
     } 
相關問題