BlankTar

about | blog | works | photo

RuuMusicの検索を開始出来ないという致命的なバグを修正しました。あとでAPKを公開します。
このバグなのですが、debugビルドだと再現せず、releaseビルドでだけ再現するというとてつもなく厄介なものでした。情報もあんまり無いので解決策を記録。

以下はRuuMusicのソースの抜粋です。

searchView = (SearchView)MenuItemCompat.getActionView(menu.findItem(R.id.menu_search));
if(searchView != null){
	searchView.setOnQueryTextListener(playlist);
	searchView.setOnCloseListener(playlist);
}

とくに面白みのない普通のコードだと思います。nullチェックは消しても良い気がする。
で、MenuItemCompat.getActionViewってやつがnullを返してくるのです。releaseビルドのときだけで、debugビルドだと正しく動作します。

問題はどうやらソースコードでもxmlでもなくて、ProGuardっていうのが悪さしているようでした。
proguard-rules.proってファイルを開いて以下の一行を追記します。

.keep class android.support.v7.widget.SearchView { *; }

あとは普通にビルドすれば多分大丈夫。

ProGuardというのはandroid標準搭載な難読化ツールらしいです。余計なクラスだと思い込んで消しちゃった、ということみたい。

参考:
Android - NullPointerException on SearchView in Action Bar - Stack Overflow
AndroidでのProGuard 使い方 | android manifest configChanges

< RuuMusicっていうandroid用の音楽プレイヤーを作った pythonのcontextlibでwith文を活用したい >