JavaからKotlinに書き換えてハマる話

494a2760dceccc31c4bcdb689041c614?s=47 Koji Wakamiya
September 09, 2019

 JavaからKotlinに書き換えてハマる話

494a2760dceccc31c4bcdb689041c614?s=128

Koji Wakamiya

September 09, 2019
Tweet

Transcript

  1. 2.

    自己紹介 Name : Koji Wakamiya Work : Studyplus, inc. Github

    : @koji-1009 Twitter : @D_R_1009 Blog : https://blog.dr1009.com/ Kotlin歴は2年ちょっと 2
  2. 10.

    2つのインスタンス化メソッドとNonNull 状況: AFragment.newInstance(Hoge hoge); AFragment.newInstance(Hoge hoge, Fuga fuga); 問題: 1.

    hogeがNonNull/Nullableのケースが存在する 2. fugaをNonNullとして扱わなければならないが、 レアケースでしか利用されない 10
  3. 17.

    onActivityResult どう対応するか: 1. あらかじめJavaのonActivityResultメソッドを アノテーション付きのメソッドに書き換えてから Kotlin化する 2. Kotlin化されたコードのonActivityResultメソッドを 置換機能で全て修正する ※

    support lib 27.1.1のDiffUtil.ItemCallbackを、support libのpathがおかしい状態で追加した時にも同じような 問題が発生することがある (28.0.0以降ではNonNull扱いとなっているため問題なし ) 17
  4. 18.

    R8 状況: R8対応が必要になるケースが増えた (AGP3.4以上でデフォルト有効化、 Kotlin Coroutines 1.3系やOkHttp4系などのビルドクラッシュ) 問題: 1. Gson使っていると(そのままでは)ダメ

    a. https://r8.googlesource.com/r8/+/refs/heads/master/compatibility-faq.md b. ビルド時ではなく実行時に問題が見つかるため、発見が難しい 18
  5. 19.

    R8 どう対応するか: 0. 対応しない(各種ライブラリ対応を待つ) 1. .proファイルの指定を頑張る 2. データクラスのKotlin化 + Moshi-Codegenへ移行する

    ※なおKotlin Coroutinesを利用している場合には、 Dispatchers.Main初期化遅延問題のためR8移行が望ましい 19