2017-03-06 13 views
4

私はこのクラスを使用しようとしています。それは、デバッグビルドでうまく動作しますが、リリースビルドではうまく動作しません。私はプロガードがそれを取り除くことを知っているので、質問はそのクラスを維持する方法ですか?これは私のためにトリックをしたリフレクションを使用するクラスを維持するAndroid Proguard

-keepclassmembers class com.example.** { <fields>; } 

答えて

5

、atrributeを保つために

-keep class com.example.** { *; } 

をするクラスを維持する

import android.support.design.internal.BottomNavigationItemView; 
import android.support.design.internal.BottomNavigationMenuView; 
import android.support.design.widget.BottomNavigationView; 
import android.util.Log; 
import java.lang.reflect.Field; 

public class BottomNavigationViewHelper { 
    public static void disableShiftMode(BottomNavigationView view) { 
     BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0); 
     try { 
      Field shiftingMode = menuView.getClass().getDeclaredField("mShiftingMode"); 
      shiftingMode.setAccessible(true); 
      shiftingMode.setBoolean(menuView, false); 
      shiftingMode.setAccessible(false); 
      for (int i = 0; i < menuView.getChildCount(); i++) { 
       BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i); 
       //noinspection RestrictedApi 
       item.setShiftingMode(false); 
       // set once again checked value, so view will be updated 
       //noinspection RestrictedApi 
       item.setChecked(item.getItemData().isChecked()); 
      } 
     } catch (NoSuchFieldException e) { 
      Log.e("BNVHelper", "Unable to get shift mode field", e); 
     } catch (IllegalAccessException e) { 
      Log.e("BNVHelper", "Unable to change value of shift mode", e); 
     } 
    } 
} 
+1

proguard設定ファイルを変更するのではなく、Androidサポートアノテーション '@ Keep'を使用することもできます。 –

+0

'{*;}'は何をしますか? –

0

# Bottom Navigation Helper 
-keep class android.support.design.internal.BottomNavigationItemView{ *; } 
-keep class android.support.design.internal.BottomNavigationMenuView{ *; } 
+0

が、私は運でこれを試してみました #下部のナビゲーションヘルパー -keepクラスandroid.support.design.widget.BottomNavigationView {*; } -keepclassmembersクラスandroid.support.design.widget.BottomNavigationView {*; } -keepクラスandroid.support.design.internal.BottomNavigationItemView {*; } -keepclassmembers class android.support.design.internal.BottomNavigationItemView {*; } -keepクラスcom.maachla.android.utils.BottomNavigationViewHelper {*; } -keepclassmembersクラスcom.maachla.android.utils.BottomNavigationViewHelper {*; } –

+0

ではなく、すべてのクラスでそれを行う代わりに、-keep class com.maachla.android.utils。** {*; } – sadat

+0

私はそれがうまくいきませんでした。 問題はサポートライブラリクラスにあると思います –

関連する問題