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:スタックトレースのちょっと上のほうのログにそれっぽいメッセージがでる

2018年に見たアニメ

毎年恒例のやつを今年もやります。タイトルの並び順は50音順です。カッコ[ ]つきのものは録画したけどまだ見てないというやつです。必ず見るのでいつかは外れると思います。

冬クール

ヴァイオレット・エヴァーガーデンとよりもいを見て毎週泣くおじさんと化したクールだった。

春クール

ウマ娘さんはアニメはものすごくよかったのでもっと頑張ってはやくゲームをリリースしてほしい。「スポ根ものいいやん」となったきっかけ。

夏クール

はねバドで試合中に顔つきが変わるやつ、僕は宝塚システムと勝手に呼んでいた。最終回のカタルシスは比類なきものだったと思います。ハ行のアニメ大杉。

秋クール

グリッドマンは男の子が好きなやつで完全に満たされていたのでとてもよかった。ひそまそJOJOリリスパは個人的にぺろぺろ三部作(三部作ではない)と呼んでいる。ア行のアニメ大杉。

劇場版

リズも若おかみもどちらも衝撃だったと思う。どの作品も全体的に美術が素晴らしく、よく動き、そして泣けた。

参考: 2018年度のおすすめアニメランキング【あにこれβ】

RobolectricでRecyclerView.smoothScrollToPosition()を呼ぶとテストが進まなくなる(未解決)

ViewPagerの代わりにRecyclerViewを使ってチュートリアルの紙芝居を実装したのだが、進むボタンをN回押してサインアップへ進む画面に行くテストがいつまで経っても終了しない現象が起きた。諸事情によりprintデバッグを使って二分探索的にどこで止まっているかを調べたところ、どうもDatabindingでRecyclerView.smoothScrollToPosition()を呼んでいるところが怪しいということになりぐぐった結果、次のissueを発見した。

github.com

私の環境ではRobolectricは4.0.2だが、issueが出たのがだいたい1年前で、他の人が4.1-SNAPSHOTでも起きていると言っているので根が深そう。EspressoのswipeLeft()を使ってみたがこれもハングした。しかし、RecyclerViewActions.scrollToPosition()を使うとページを送ってやることはできた。ただ、この方法ではスクロール位置がコールバックに渡って来ないので、「ページ番号が変わっているか」みたいなことはチェックできないかもしれない。

結局、いい回避策が思いつかなかったので棚上げしてしまった。アニメーションが絡むとなんかうまくいかないのかなとか、スクロールした量(xとかy方向の移動量)を計算できないのかなとかいろいろ想像してみるけど全然わからない。知っている人がいたら教えて欲しい。できれば直してくれるとありがたい。

以下は本件とは関係ないけどいい本なのでみなさん買ってください。

peaks.cc

peaks.cc