Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

Avatar for Koji Wakamiya Koji Wakamiya
September 09, 2019

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

Avatar for Koji Wakamiya

Koji Wakamiya

September 09, 2019
Tweet

More Decks by Koji Wakamiya

Other Decks in Technology

Transcript

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

    : @koji-1009 Twitter : @D_R_1009 Blog : https://blog.dr1009.com/ Kotlin歴は2年ちょっと 2
  2. 2つのインスタンス化メソッドとNonNull 状況: AFragment.newInstance(Hoge hoge); AFragment.newInstance(Hoge hoge, Fuga fuga); 問題: 1.

    hogeがNonNull/Nullableのケースが存在する 2. fugaをNonNullとして扱わなければならないが、 レアケースでしか利用されない 10
  3. onActivityResult どう対応するか: 1. あらかじめJavaのonActivityResultメソッドを アノテーション付きのメソッドに書き換えてから Kotlin化する 2. Kotlin化されたコードのonActivityResultメソッドを 置換機能で全て修正する ※

    support lib 27.1.1のDiffUtil.ItemCallbackを、support libのpathがおかしい状態で追加した時にも同じような 問題が発生することがある (28.0.0以降ではNonNull扱いとなっているため問題なし ) 17
  4. 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. R8 どう対応するか: 0. 対応しない(各種ライブラリ対応を待つ) 1. .proファイルの指定を頑張る 2. データクラスのKotlin化 + Moshi-Codegenへ移行する

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