Kotlin移行1

目的

  • Javaで書かれたプロジェクトを少しずつKotlinで書き直す
  • TestもKotlin化
  • 備忘録的にちょこちょこ完了まで続ける

条件

  • AndroidStudio3.1.4
  • Java1.8.0_152
  • Kotlin 1.2.70
  • gradle 4.9

今回の作業範囲

  • 某リリース済アプリのヘルプページ(単一Activity、他への影響度小さいと判断)をKotlin化

手順と具体的な作業

  • 必要なプラグインを追加

app/build.gradle

build.gradle

  • IDEの機能を用いて一括置換
    Code->Convert Java File to Kotlin Fileとすると開いているJava1ファイルがKotlinへ自動変換される

  • 一括置換で勝手に書き換わった他のファイルの内容確認
    今回の実行範囲では、Activity内のstaticメソッドにアクセスしていたクラスの呼び出しに、Companionがついていた(実装上の問題とか色々あるけど後述の@JvmStaticをつけることで消せる)

  • staticメソッドに@JvmStaticをつける
    上記であげている、KotlinとJavaでのstaticメソッドの呼び方において、まずKotlinへの自動変換でJavaのstaticメソッドはCompanion Objectに書き換わる。
    これをJavaからそのまま呼ぼうとすると、Companionが間に入ってしまうため、@JvmStaticをつけることでこれを回避(影響を受けたJavaファイルの修正は不要になる)

  • ButterKnifeで@BindStringとしていた箇所を撤廃
    strings.xmlの値をStringのクラス変数で定義できて便利だったが、同じものを同一クラス内で2度以上呼ぶのも稀だったため、Context経由で都度取得に変更。
    具体的には

  • 可能な限りvarをvalへ変更
    自動変換すると、ButterknifeによるBind系はinternal var hoge: Buttonとかになっていたので
    これらを初期化段階ですべてfindViewByIdでvalとして突っ込んだ