2017-03-06 98 views
4

我正在尝试使用这个类。它在调试版本上工作正常,但它从不在发布版本上工作。我知道proguard删除它,所以问题是如何保持该类?保留使用反射的类Android Proguard

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); 
     } 
    } 
} 

回答

5

这奏效了我。

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

您也可以使用Android支持注释'@ Keep'而不是修改proguard配置文件。 –

+0

'{*;}'做了什么? –

0

保持类

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

保持atrribute,

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

我想这没有运气 #底部导航帮助 -keep类android.support.design.widget.BottomNavigationView {*; } -keepclassmembers class android.support.design.widget.BottomNavigationView {*; } -keep class android.support.design.internal.BottomNavigationItemView {*; } -keepclassmembers class android.support.design.internal.BottomNavigationItemView {*; } -keep class com.maachla.android.utils.BottomNavigationViewHelper {*; } -keepclassmembers class com.maachla.android.utils.BottomNavigationViewHelper {*; } –

+0

而不是为每个类做,你可以做 - 维护类com.maachla.android.utils。** {*; } – sadat

+0

我试过了,它没有工作。 我认为问题出在支持库类中 –