Jetifierを無効にするとビルドが速くなるらしい

2020/08/30

Android Dagashi の#133で紹介されていた「Disabling Jetifier • Adam Bennett」という記事を読んでみました。なんでも、Jetifierを無効にするとビルドが速くなるらしいです。

Jetifierとは

Support Libraryへの参照をAndroidXへの参照に置き換えてくれるツールです。

スタンドアロンでも使えますが、Androidのビルドプロセスにも組み込まれています。gradle.propertiesandroid.enableJetifier=true と指定すると有効になります。Support LibraryからAndroidXにマイグレーションしたアプリは大抵 true になっているんじゃないでしょうか。

無効化の条件は?

「Support Libraryへの参照がないこと」です。使っているライブラリも含めてなので、手作業で調べるのはちょっとシンドい。

ありがたいことにplnice/can-i-drop-jetifierというそのものズバリのGradle pluginがあるのでこれを使います。

セットアップ方法は公式サイトにある通りなので省略。

実際に調査してみる

とある自作アプリで試してみました。

> .\gradlew -Pandroid.enableJetifier=false canIDropJetifier
(snip)
========================================
Project app
========================================

Cannot drop Jetifier due to following external dependencies:

* com.github.Raizlabs.DBFlow:dbflow:4.2.4

* com.squareup.picasso:picasso:2.71828


BUILD SUCCESSFUL in 15s
1 actionable task: 1 executed

DBFlowとpicassoがSupport Libraryへの依存関係を持っているのでJetifierは無効にできない、という診断結果です。

ここからは

  • (a) 諦めてそのままにする
  • (b) AndroidXに対応したバージョンを導入する
  • (c) AndroidXに対応している別のライブラリに差し替える(or ライブラリの利用を止める)

という選択肢ですね。(b)が一番穏当な気がします。

調べてみるとpicassoは2.8で、DBFlowは5.0.0-alpha1でAndroidXに対応していました。試しにバージョンアップしてみましょう。

> .\gradlew -Pandroid.enableJetifier=false canIDropJetifier
(snip)
========================================
Project app
========================================

No dependencies on old artifacts! Safe to drop Jetifier.


BUILD SUCCESSFUL in 2s

Support Libraryへの依存関係がなくなりました。

こんな感じでSupport Libraryへの依存関係を解消していくと、晴れてJetifierを無効化できます。

まあ、このアプリの場合、実際問題としてはDBFlowの5.0.0-alpha1に開発途中感が漂っているので迂闊に実戦投入するのは厳しいんですけどね……

補足

元記事には前後比較のベンチマークを取る方法なんかも紹介されています。興味ある方はチェックしてみてください。

参考URL




関連(するかもしれない)記事


おススメ