2017年5月13日土曜日

Could not get unknown property 'assembleRelease' for project ':app' of type org.gradle.api.Project.

経緯

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.

2017年5月8日月曜日

Android の Support Library が、v4 や v7 でも Froyo (API レベル8) を切り捨てていた件 (minSdkVersion 8 の終焉)

総括

Android の Support Library は、「rev. 24.2.0」にて Android 2.2(API レベル 8)以下のサポートを廃止していた。(2016年8月時点)

つまり、「v4 Support Library」も「v7 Support Library」も「android:minSdkVersion="9"」となり、アプリ側が「minSdkVersion 8」だとビルドエラーになる。

※もはや「v4」や「v7」は、それぞれの minSdkVersion を意味しない。

各 Support Library の minSdkVersion
rev. 24.1.1rev. 24.2.0
support-v449
appcompat-v779

リアクション

下記のいずれか。基本は前者。

  • アプリ側も、「minSdkVersion 9」にする。(Froyo をサポートから外す)
    ※2016年8月時点で、Froyo (8) のシェアは 全体の「0.1%」
  • 使用する Support Library のリビジョンを、「24.1.1」以下にする。

情報源

注: リリース 24.2.0 では、Android 2.2(API レベル 8)以下のサポートが削除されました。これらのシステム バージョンだけに機能を提供するクラスやメソッドは廃止予定としてマークされ、使用できなくなります。廃止予定のクラスやメソッドは、今後のリリースで削除される可能性があります。


経緯

久しぶりに Support Library のリビジョンを上げたら、下記のビルドエラーに遭遇。

Error:Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed : uses-sdk:minSdkVersion 8 cannot be smaller than version 9 declared in library [com.android.support:support-v4:24.2.0]
Error:Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed : uses-sdk:minSdkVersion 8 cannot be smaller than version 9 declared in library [com.android.support:appcompat-v7:24.2.0]

参考情報