应用 dexguard 后 onClick() 不起作用。有什么办法可以解决这个问题吗?

onClick() does not work after appying dexguard. Is there any way to solve this?

我正在使用 dexguard 来保护我的应用程序。最近我更新了 dexgaurd 版本 从 8.0.18.2.15。更新前一切正常。但是当我应用 dexguard 版本 8.2.15 时,onCick 方法在片段 SettingsFragment[=30 之一中不起作用=],对于所有其他 Fragments,它工作正常。然而,实现 onClick() 的代码和方法对于所有 Fragments 都是相同的。但是对于 SettingsFragment 它不起作用。请帮忙。

这是我在 SettingsFragment

中的 onClick 方法
View.OnClickListener onClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            switch (view.getId()) {
                case R.id.relSignOut:
                    mCallback.doSignOut();
                    break;
//                case R.id.relEditProfile:
//                    loadManageProfile();
//                    break;
                case R.id.btn_edit_profile:
                    loadManageProfile();
                    break;
                case R.id.relDynamicFxRate:
                    parent.startSetExchangeAlertActivity();
                    break;
            }
        }
    };

提前致谢

您应该像这样排除 onClick 方法的混淆:

-keepclassmembers class * {
    public void onClick (android.view.View);
}

(将我的评论转换为答案)

请取消switch 语句,将其替换为if-else。可能看起来有点不科学和不合逻辑,但我为我工作了很多次。

我不知道这是否可能是编译器或 Android 中的错误,但有时仅拒绝 switch 语句无济于事。然后我必须用 view.getPosition() 替换 view.getId() 并按顺序或类似的方式检查以使其正常工作。

来自 T.Neidhart 的评论:它失败的原因可能是由于重新映射资源 ID 的资源优化。通常这些重新映射的资源 ID 在代码中的任何地方都会被替换,但在 switch 语句的情况下可能会出错。您可以像这样禁用资源优化:-optimizations resource/compaction –