eaglesakuraの技術ブログ

技術的な話題とか、メモとか。

AndroidアプリのKotlin 1.4/1.5から1.6へのマイグレーション

AndroidX Roomのコンパイラが不正なJavaクラスを吐き出す

  • Entity(だいたいdata class)に複数のコンストラクタがある場合(Entityをnewする際のサポートのために作ったコンストラクタ)、Kotlin 1.6からRoom Compilerが不正なコードを吐き出すようになった
  • RoomのR/Wに使われないコンストラクタに @Ignore アノテーションをつければ良い
    • メッセージからして、多分1.4までが不正な状態で、1.6で想定通りに機能するようになったと思われる

String.toLowerCase(Locale)が非推奨になった

  • ガイドに従って String.lowercase(Locale) に書き換えれば良い

when分岐でに足りない候補がある場合に(seled classとか)警告が出るようになった

  • elseブロックを追加する
  • 丁寧にやるなら、全部の候補を列挙した方が将来自分が困らなくていいかもしれない(意図しないwhen分岐漏れを防ぐための警告なので)

Channel.offerがtrySendに変更された

  • 戻り値がObjectになり、詳細な結果が取れるようになった

Koinが内部で参照しているClassが消された

  • Time/Duration系の参照が一部変更されたらしい
  • KoinのLoggerレベルを下げてワークアラウンド
  • 追記: Square Wireライブラリ(Proto3のSquare実装)も同じくtime.Instantに関わる問題でクラッシュする
    • 3.7.1では対応済なのでバージョン更新

stackoverflow.com

改善策

  • Android Desugaringライブラリが古いとProguardかけた場合だけ問題が発生する場合がある
  • 1.1.5に更新したら治った

developer.android.com