使用混淆器时选取框工具栏标题不起作用
Marquee toolbar title not working when using proguard
我正在尝试在工具栏中选择选取框标题,但如果我在启用混淆器的情况下构建它,选取框不起作用。
Field f = toolbar.getClass().getDeclaredField("mTitleTextView");
f.setAccessible(true);
TextView titleTextView = (TextView) f.get(toolbar);
titleTextView.setEllipsize(TextUtils.TruncateAt.MARQUEE);
titleTextView.setMarqueeRepeatLimit(-1);
titleTextView.setSelected(true);
似乎 "mTitleTextView" 被 proguard 混淆了。
java.lang.NoSuchFieldException: mTitleTextView
at java.lang.Class.getDeclaredField(Class.java:631)
但是它不起作用,知道吗?
您可以使用以下语法指示混淆器不接触私有字段:
-keepclassmembers class android.widget.Toolbar {
private android.widget.TextView mTitleTextView;
}
对于来自支持库的工具栏:
-keepclassmembers class android.support.v7.widget.Toolbar {
private android.widget.TextView mTitleTextView;
}
有关详细信息,请参阅 this 问题。
避免反思。私有字段名可以随时更改,更何况使用反射很慢!另外,来自 Android 9 Pie (API 28),they're locking down API access 所以这不是一个长期的解决方案。
而是在布局中定义您自己的工具栏。参见 and 。
我正在尝试在工具栏中选择选取框标题,但如果我在启用混淆器的情况下构建它,选取框不起作用。
Field f = toolbar.getClass().getDeclaredField("mTitleTextView");
f.setAccessible(true);
TextView titleTextView = (TextView) f.get(toolbar);
titleTextView.setEllipsize(TextUtils.TruncateAt.MARQUEE);
titleTextView.setMarqueeRepeatLimit(-1);
titleTextView.setSelected(true);
似乎 "mTitleTextView" 被 proguard 混淆了。
java.lang.NoSuchFieldException: mTitleTextView
at java.lang.Class.getDeclaredField(Class.java:631)
但是它不起作用,知道吗?
您可以使用以下语法指示混淆器不接触私有字段:
-keepclassmembers class android.widget.Toolbar {
private android.widget.TextView mTitleTextView;
}
对于来自支持库的工具栏:
-keepclassmembers class android.support.v7.widget.Toolbar {
private android.widget.TextView mTitleTextView;
}
有关详细信息,请参阅 this 问题。
避免反思。私有字段名可以随时更改,更何况使用反射很慢!另外,来自 Android 9 Pie (API 28),they're locking down API access 所以这不是一个长期的解决方案。
而是在布局中定义您自己的工具栏。参见