2017-10-06 11 views
0

onCreateOptionsMenuのカスタムSearchViewクラスへの参照を取得しようとするとクラッシュするようです。通常これは正常に動作しますが、リリースapkを読み込むとクラッシュします。私は私のProGuardのに以下の行を追加してみましたが、そのはまだクラッシュ:リリースビルドでカスタムSearchViewクラッシュが発生する

# Android support 
-keep public class com.mine.mobile.mypackage.usercontrol.SearchViewCustom 
-keep class android.support.v7.** { *; } 
-keep interface android.support.v7.** { *; } 

ここではコードです:ここでは

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     mMenu = menu; 
     getMenuInflater().inflate(R.menu.menu_invest, menu); 
     final MenuItem searchItem = menu.findItem(R.id.action_invest_search); 

     if (searchItem != null) { 
      mSearchView = (SearchViewCustom) MenuItemCompat.getActionView(searchItem); 

      SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
      mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
     } 

     mPresenter = new BaseActivityPresenterImpl(this,mSearchView,mMenu,searchItem); 
     mPresenter.setupActionBar(NONE,false); 

     return super.onCreateOptionsMenu(menu); 
    } 

ログは

java.lang.NullPointerException: Attempt to invoke virtual method 'void com.mine.mobile.mypackage.usercontrol.d.setSearchableInfo(android.app.SearchableInfo)' on a null object reference 
! 1 at com.mine.mobile.mypackage.activity.home.a.onCreateOptionsMenu(BaseActivity.java:94) 
2 at android.app.Activity.onCreatePanelMenu(Activity.java:3232) 
3 at android.support.v4.app.q.onCreatePanelMenu(FragmentActivity.java:362) 
4 at android.support.v7.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:98) 
5 at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.onCreatePanelMenu(AppCompatDelegateImplBase.java:335) 
6 at android.support.v7.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:98) 
7 at android.support.v7.app.ToolbarActionBar.populateOptionsMenu(ToolbarActionBar.java:454) 
8 at android.support.v7.app.ToolbarActionBar$1.run(ToolbarActionBar.java:61) 
9 at android.view.Choreographer$CallbackRecord.run(Choreographer.java:871) 
10 at android.view.Choreographer.doCallbacks(Choreographer.java:683) 
11 at android.view.Choreographer.doFrame(Choreographer.java:616) 
12 at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:857) 
13 at android.os.Handler.handleCallback(Handler.java:751) 
14 at android.os.Handler.dispatchMessage(Handler.java:95) 
15 at android.os.Looper.loop(Looper.java:154) 
16 at android.app.ActivityThread.main(ActivityThread.java:6247) 
17 at java.lang.reflect.Method.invoke(Native Method) 
18 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872) 
19 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762) 

menu.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/action_delete" 
     android:title="@string/delete" 
     android:icon="@drawable/ic_delete_white" 
     app:showAsAction="always" /> 
    <item 
     android:id="@+id/action_done" 
     android:title="@string/done" 
     android:icon="@drawable/ic_done_white" 
     app:showAsAction="always" /> 
    <item 
     android:id="@+id/action_refresh" 
     android:icon="@drawable/ic_refresh_white" 
     android:visible="false" 
     android:title="@string/refresh_menu" 
     app:showAsAction="always" /> 
    <item 
     android:id="@+id/action_invest_search" 
     android:icon="@drawable/ic_search_white" 
     android:visible="false" 
     android:title="@string/action_search" 
     app:actionViewClass="com.mine.mobile.mypackage.usercontrol.SearchViewCustom" 
     app:showAsAction="always|collapseActionView" /> 
</menu> 
です

これは、 NullPointerException、どうすれば修正できますか? ...その質問はあまりにも広いカテゴリーを網羅している

+0

は、あなたはそれが可能とhasnを期待するところ、カスタムクラスがあるかどうかを確認するためにAndroidのメーカー3でAPKプロファイラを使用してみてください –

+0

を追加しましたmenu.xmlを共有することができます別の名前に難読化されました – Mike6679

+0

に疑問をあなたのmenu.xml – Kuffs

答えて

0

私は正しい軌道にあったが、私のプロガードの構文は間違っていた(私はgoogleの例であるhere:を使用した)。これは、しかし働いていた:

-keep public class com.mine.mobile.mypackage.usercontrol.SearchViewCustom { 
    public *; 
} 
関連する問題