fresh digitable

めんどくさかったなってことを振り返ったり振り返らなかったりするための記録

clearという名前のメソッドをもつViewModelのサブクラスをdalvikvm上で見つけられない人へ

年末、android-ktxをプロジェクトに入れようとして思わぬところで躓いたのでメモしておく。現象としては、Android 5.0以上が動いているエミュレータでは問題ないのに、4.4のエミュレータではアプリが起動するときにクラッシュしてしまうというもので、LogCatには特定のViewModelのサブクラスをロードするときにClassNotFoundExceptionが発生した旨のスタックトレースが出ていた。

以下、手短に:

  • 前提知識
  • クラッシュする理屈: clear()という名前のメソッドを持つViewModelのサブクラスは、dalvikvm上では親クラスのViewModel.clear()をoverrideすることになるが、ViewModel.clear()finalなのでoverrideできない*1。これによってViewModelのサブクラスは仮想マシンに読み込まれず、クラスが見つからない系のランタイムエラーが発生する。
  • 対応
    • サブクラスのclearメソッドの名前を変えました…
    • こういうのはAOSPに報告すべき?

*1:スタックトレースのちょっと上のほうのログにそれっぽいメッセージがでる