もやもやエンジニア

IT系のネタで思ったことや技術系のネタを備忘録的に綴っていきます。フロント率高め。

手持ちのアプリをAndroidX対応したメモ

特に知見というほどのものでもないのですが、AndroidX対応したやつをStoreに載せたので作業ログなど。ASは3.2.1、対応するアプリはKotlin製です。

読むべきページ

Migrating to AndroidX  |  Android Developers 移行の手順と旧ライブラリ群がどのようにAndroidXにmappingされるのかが書いてあります。

事前準備

Refactor -> Migrate to AndroidXでガツンと変えてくれるらしいのですが、build.gradleが3.2.0より小さいと実行できないと言われるので、まず上げます。このときは3.2.1に上げました。

Migrateする

改めてASのメニューからRefactor -> Migrate to AndroidXします。すると今までSupportライブラリを使っていたファイルのパスがandroidx.XXXまたはcom.google.android.material.XXXに置き換わります。ただ、一部うまく変換できてないところがあったので変換後の差分はちゃんと見たほうがいいです。僕のやつだとimportしてる部分が変換されてるのに引数の型がFQDNで指定されてたりしました。

つまづきポイント1

ビルドするも通らず。。。原因はDataBindingが生成するActivityXXXBinding系のファイルでDataBindingComponentが見つからないと言われました。generatedJavaを見ても確かに見つかりません。gradle.propertiesのenableJetifierが怪しいかなと思い、フラグをfalseにすると生成されました。ただ、このフラグ自体は旧supportライブラリとAndroidXをつなぐために必要な設定なのでfalseにはできません。

似たような事例をさがすとバージョンは微妙に違うものの同じ問題でDagger16に戻すと解消するというPostがあり、戻してみると該当の問題は解消しました。

stackoverflow.com

つまづきポイント2

ビルドするもまだ通らず。。。原因はSQLiteのORMにOrmaを使っていて、Ormaが生成するスキーマのファイル内で旧Support系のライブラリを使っていて、それの参照エラーになっていました。AnnotationProcessorで生成される分についてはgradle.propertiesのenableJetifierは面倒を見てくれないということですね。こちらはちょうど作業中にAndroidX対応のバージョンがリリースされたので、バージョンを更新したことで事なきを得ました。

まとめ

  • Migrate to AndroidXで楽に移行できるけど、完璧ではないので差分は確認したほうがいいです
  • 自分の環境(DaggerでDI、DataBinding使用)だとDagger2.17はビルドエラーとなり、Dagger2.16に落とすとビルドできました。コードを追えていないので(というかAnnotationProcessor系でこけるとどこが問題なのか追うのがつらい)はっきりとした原因とはいえないのですが。。。
  • AnnotationProcessorでサードパーティのライブラリが生成するファイル内で旧supportライブラリが使われているとビルドできませんでした。こちらは生成されるファイル内の旧supportライブラリ系のパスがandroidx対応になっている必要があります。