経緯
Android Plugin for Gradle をバージョンアップ (*1) したところ、これまで通っていたビルドスクリプトが掲題のエラーを出力するようになってしまった。(Sync が通らない)
どうやら、assembleRelease
の定義タイミングが変わった(後回しになった)ようである。
build.gradle (Module: app)
assembleRelease << { println 'after assembleRelease' }
Error:(99, 0) Could not get unknown property 'assembleRelease' for project ':app' of type org.gradle.api.Project.
*1 Stack Overflow の question 39590549 によると、プラグインのバージョン 「2.1.3」と「2.2.0」との間で、当該挙動に変更があった模様。
解決方法 その1
assembleRelease
が定義された後のコールバック内で、必要な処理を追加する。
※Android Plugin for Gradle の バージョン 2.3.1 (w/ Gradle 3.3) で動作確認済
tasks.whenTaskAdded { task -> if (task.name == 'assembleRelease') { task.doLast { println 'after assembleRelease' } } }
解決方法 その2
ビルドスクリプトが一通り評価された後に、必要な処理を追加する。
※Android Plugin for Gradle の バージョン 2.3.1 (w/ Gradle 3.3) で動作確認済
afterEvaluate { assembleRelease.doLast { println 'after assembleRelease' } }
素朴な疑問
Q.
「task.doLast
」や「assembleRelease.doLast
」の部分を、これまで通り
「task <<
」や「assembleRelease <<
」と書いたらだめなのか?
A.
だめではない (= 現状、正常動作する) が、推奨されない。今後は「doLast
」を使っていくべき。
理由: 左シフト演算子「<<
」 (Task.leftShift(Closure)
) は、Gradle のバージョン 5.0 で廃止される予定のため。
The Task.leftShift(Closure) method has been deprecated and is scheduled to be removed in Gradle 5.0. Please use Task.doLast(Action) instead.
0 件のコメント :
コメントを投稿