使用混淆器时选取框工具栏标题不起作用

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