こんにちは、Androidアプリ開発を担当している仲見川です。
日にちが開いてしまいましたが「Androidアプリを2年半ぶりにリリースするためにしたこと」との中で実施したAndroidXへの移行にフォーカスして見たいと思います。
背景
今回TargetSDKVersionを29としたことでサポートライブラリが廃止となっていますのでAndroidXに移行する必要がありました。
AndroidXへの移行
AndroidXへの移行自体はGoogleの移行ガイド(https://developer.android.com/jetpack/androidx/migrate?hl=ja)の通りで弊社ではAndroid Studioの自動処理実施して、うまくできなかったimportを手修正で直して行きました。
基本的にソースコードとしてはActivityと画面レイアウトのimportが変わるだけで済みます。
Gradleは以下の通り変更となっています。当時の安定版バージョンであるAndroidX1.1.0が適用されています。
サポートライブラリ | AndroidX |
---|---|
com.android.support:support-v4:25.2.0 | androidx.legacy:legacy-support-v4:1.0.0 |
com.android.support:appcompat-v7:25.2.0 | androidx.appcompat:appcompat:1.1.0 |
com.android.support:design:25.2.0 | com.google.android.material:material:1.1.0 |
com.android.support:recyclerview-v7:25.2.0 | androidx.recyclerview:recyclerview:1.1.0 |
android.support.multidex.MultiDexApplication | androidx.multidex.MultiDexApplication |
ハマったポイント
しかし、実際に動かして見たところLolipopでWebViewがクラッシュするという問題が発生しました。
調べて見るとAndroidXのappcompat1.1.0で発生した不具合のらしく(https://ticktakclock.hatenablog.com/entry/2020/02/25/131844)。appcompatを1.2.0-beta01とすることで解消しました。
Productionにbetaなライブラリを入れること自体に議論の余地はありますがコードでの対応は後々取り除く必要が出ることと、今回のアップデートではアプリ全体にわたってテストを行う前提のため、テストにて問題が無いことを確認し導入する事にしました。
これを書いている現在(2020/08/06)もまだ安定版の最新は1.1.0となっていますので同じ問題が発生します。AndroidXへの移行でLolipopもサポートしている場合は対策が必要になりますので参考になれば幸いです。
終わりに
リネットのアプリはまだ画面数が多くないこともありAndroidXの移行自体は難しくなく、ロジック変更は必要無かったのでコード修正はすんなりと終わりました。
変更自体は広範囲にわたるため全機能、複数バージョンでのテストを行っています。 UIの自動テストはできていないので全てのテストを手動でおこない、ライブラリ変更を安定的に行っていくためにもUIテスト自動化の必要性も感じました。