Supportライブラリからandroidxに移行する

個人で作っているアプリを、SupportライブラリからAndroidxに移行した。
いくつかハマりどころがあった。

基本的には、

  1. Android Studioを3.2 Canaryに変更する
  2. Android Gradle Pluginを3.2.0-alpha17以降に上げる
  3. targetSdkVersioncompileSdkVersionを28に変更
  4. Android StudioでRefactor > Refactor to AndroidXでコード書き換え

でOK、らしい。

ただbuild.gradleで指定していたライブラリの依存関係が、変数使って外出ししていた関係か更新されなかった。
そこは公式の新旧アーティファクトID対応表を見て自分で修正する必要があった。

他にもいくつかあって、

  • ConstraintLayoutのパッケージ名がandroidx.constraintlayout.widget.XXXX(実際はandroidx.constraintlayout.XXXX)
  • androidx系のクラスがfully qualified nameでコード内に書かれてしまうので、importに変更する
  • 一部クラスがそもそもimport文消された上にfully qualified nameに更新されず、参照エラーになってしまうのでimport文追加する
    • 私の環境ではArchitecture ComponentsのViewModel系がこのパターンになっていた?

だいたいこんな感じ。

dagger-androidとかサポートライブラリに依存してるやつは勝手に修正してくれるらしく、そのまま使うことができた。

参考: Convert the project to androidx. by thagikura · Pull Request #436 · google/flexbox-layout

※2018/06/13追記

ConstraintLayout 1.1.2がリリースされ、上記のパッケージが違う問題は修正されました。