Android proguard 如何预防剥离阵列

Android proguard 如何预防剥离阵列,android-proguard,Android Proguard,我在布局文件中实现了gooeymenu: <com.mschwartz.dailyflightbuddy.ui.GooeyMenu android:id="@+id/gooeymenu" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_alignPar

我在布局文件中实现了gooeymenu:

<com.mschwartz.dailyflightbuddy.ui.GooeyMenu
    android:id="@+id/gooeymenu"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:layout_below="@id/btn_text_cockpit"
    android:layout_centerInParent="true"
    android:alpha="0.8"
    app:center_drawable="@drawable/ic_settings_white_48dp"
    app:hide_on_start="true"
    app:itemorientation="LEFT"
    app:menu_reference="@array/gooeymenu_command_array" />
在调试器中运行时,一切正常,但在剥离生产版本菜单中运行时,不会显示任何项目

我已尝试将多个命令添加到
proguard rules.pro
中,包括以下命令:

-keepclassmembers class com.mschwartz.dailyflightbuddy.R$array {
    *;
}

-keepclassmembers class **.R$* {
     public static <fields>;
}
-keepclassmembers类com.mschwartz.dailyflightbuddy.R$array{
*;
}
-keepclassmembers类**.R$*{
公共静态;
}
但到目前为止没有任何运气。因此,我的问题是:

  • 如何验证字段是否确实已从中剥离 生产apk或如何确保是否包含字段(或更常见的类/方法)
  • 如何命令proguard添加字段

问题在于我使用了一个
ObjectAnimator
,它通过按名称引用方法来更改对象的属性:

'ObjectAnimator animShowAlpha=ObjectAnimator.offload(圆圈点,“Alpha”,0.0f,1.0f);'

然而,proguard会损坏对象的名称,因此方法
CirclePoint.setAlpha(..)
被重命名为
a(..)
。因此,解决方案是向proguard添加一行,以防止重命名类
CirclePoint的方法:

-keep class com.mschwartz.dailyflightbuddy.ui.goeymenu$CirclePoint{*;}

就这样

顺便说一句,要查看proguard是否重命名了一个方法,文件“app/build/outputs/mapping/release/mapping.txt”非常有帮助(并且不言自明)

-keepclassmembers class com.mschwartz.dailyflightbuddy.R$array {
    *;
}

-keepclassmembers class **.R$* {
     public static <fields>;
}