androidでSearchView使おうと思ったらgetActionViewがnullを返してくる。releaseビルドのときだけ。
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標準搭載な難読化ツールらしいです。余計なクラスだと思い込んで消しちゃった、ということみたい。
参考: