バージョン過渡期の混乱

Androidは新機能のバックポートが充実しているので古いAPIでも新OSの目玉機能は同様に使えたりして好感なのですが、その時ターゲットとするバージョンの選択に応じて複数方法が用意されており、逆に何を使ったらいいんでしょうか?という混乱があります。そしていま現在、Androidは5.0が出て端末に行き渡り始めたところですがRobolectricの現行2.4ではAPI18までの対応だったようにエコシステムすべてが切り替わってません。まさに過渡期の状況となっているようです。

後進にやらせるならRobolectricの3.0が出てからAPI21以降だけで入門ってのが面倒くさいことなく薦めるのにベストだと思いますが、そもそもいま関わってる大型案件ではなんとGingerbread (API10)です。これは例外としますが。。。

Dashboards | Android Developers

上記URLで発表されているシェア情報は今日時点でJelly Bean(API16-18)が44.5%、KitKat(API19)が39.7%ということであわせて9割。なので今後しばらくは対応バージョンとして5.0(API21)だけってわけにもいかないけど、API16まで広げればさすがにいいでしょう。そんな中で私の混乱の事例は。。。

  • Fragmentの取り扱いに、support-v4を使うか、API11以降の本体android.appを使うか。API11からっていうんだから当然本体でいいじゃんと思いつつも、そこそこ有用なViewPagerはv4のFragment前提だったりするために今に至るまで生き残っている。ViewPagerだけの問題であればAdapterだけ本体Fragmentに対応したsupport-v13を使えばいいとなってますがこれもsupport-v4を継承して提供という対応で、暫定対応臭がします
  • ActionBarはsupport-v7なのか、やはりAPI11以降の本体android.appなのか。でもこれと連携するDrawerLayoutやActionBarDrawerToggleはv4で提供されていてToggleの方だけDeprecatedになったうえで代替はsupport-v7-appcompatで提供ということになっており、さらに名前は一緒なのにちょっとだけAPI替えていたりして惑わされます。差し替えToolbarはv7提供で本体取り込みはAPI21から

こんなのは星の数ほどありそう。ググってでてくるブログ等の情報が書かれた時期と、その人が前提とするバージョンと、やりたいことがしっかりと明確にされた上で、複数の実装方法がある中で考察したベストの選択を説明している。。。ということはほとんど無い。よって先人に大変感謝しつつも惑わされます。結果としてハマることが多く、サンプル書いて後にコード読まないとクリアできない問題も多い。でもコード読ませてくれるんでiOSと違ってクリアできるのですけど。

こんな状況でもRobolectricとGenymotionがあるために調査コード書くのが捗り、相当たすけられている。ビバRobo!ビバGeny!