ActionBarSherlockでNoClassDefFoundError(ただしGingerBread以下)

あるアプリケーションを作っていて、UIをActionBarで統一するためActionBarSherlockを導入しました。

ListView関連サポートがないとか(これはなんとか回避)、MapActivityサポートがないとか(これも無理矢理回避)困難を極めたのですが、普通に実装しているのにNoClassDefFoundErrorが出る事案が発生。

それまでGalaxy Nexusで動かしていたときは何とも無かったのに、NexusOneで急に出るようになってしまいました。これがAndroidの互換性の罠か…。

調査したところ、SearchViewをContexual Menuとして実装するところを外すと上手くいきました。
NoClassDefFoundErrorが何故出るかは不明なのですが、よくMapViewでGoogleAPIsを指定しないと同じような事象になるので、まあそういうもんだろうとあまり考えずに それっぽい実装をして終了。こんな記事では役に立たないこと請け合いのなので、ダメそうだった部分を記載しておきます。

 

@Override
public boolean onCreateOptionsMenu(Menu menu) {
	MenuInflater inflater = this.getSupportMenuInflater();
	inflater.inflate(R.menu.contexual, menu);
	SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
	〜〜〜〜〜〜