/var/log/messages

debugging with sixth sense

既存な Android プロジェクトを Kotlin 対応させてみる

以下な手順で単純に移植できるのかどうか。

とりあえず

  • build.gradle 修正して
  • sync して

の時点で不具合。どうも apply plugin は以下の順で書かなきゃ、なのと

1
2
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'

com.android.tools.build:gradle のバージョンが古かったのが原因でした。試したプロジェクトでは 1.0.0 という記述でした。エラーメッセージによれば 1.1.0 以上でないと駄目みたいですね。

基底クラスから変換してみた

ら、基底クラスで定義した変数が使えなくてぐぬぬ、ってなってたのですが継承してる方も Kotlin にしたら解決。つまらぬナニで時間を使っているなxD

つうか、既存実装から convert するにあたってほとんど問題ないのが凄いな。

Gradle build daemon disappeared unexpectedly

突然このメセジにて build が失敗するようになる。ps aux を gradle で grep してそのプロセス kill したら動くようになりました。何なのこれ。

変換ソース見つつ色々確認

してみます。簡単に列挙な形にて控える方向ス。

  • 結局 property は普通に定義しておけばサブクラスで使える模様
  • companion object て M11 で導入された class object にかわる記述の方法な模様
  • !! て何 (別途確認
  • (例えば) Runnable なオブジェクトの生成な記述
  • getIntent とか getSupportActionBar とかのメソド (これ、スーパークラスの属性の getter なのか)
  • instanceof は is らしい件
  • Activity.VIBRATOR_SERVICE ではなくて Context.VIBRATOR_SERVICE だった
  • javascript interface な内部クラスが inner class で定義されている

ぐぬ

何故か instanceof (Kotlin だと is) でもごもごしてる場所で NoClassDefFoundError という例外吐いてます。あ、これって class の宣言 open にしないと、なのかな。。

もひとつ

@Nullable なナニをきちんと変換してくれないケイス (ちょっと前のソースを変換した場合?) があり、実行時例外が出ちゃうことがあるみたいです。まぁ、きちんと試験しろってことなのでしょうが、なかなか厳しいス。

Comments