首页 > 解决方案 > Android 的 StrictMode 惩罚监听器给出 NoClassDefFoundError

问题描述

我正在将 StrictMode 添加到我的应用程序中,并且在添加自定义 ViolationListener 之前效果很好。

它似乎找不到我提供的回调并将其检测为错误。

你能帮我解决这个问题吗?

以下代码工作得很好:

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                    .detectAll()
                    .penaltyLog()
                    .build());

以下代码不起作用:

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                .detectAll()
                .penaltyListener(Executors.newSingleThreadExecutor(), new StrictMode.OnVmViolationListener() {
                    @Override
                    public void onVmViolation(Violation v) {
                        //DO MY CUSTOM STUFF LIKE LOG IT TO CRASHLYTICS
                        Crashlytics.logException(v);
                    }
                })
                .penaltyLog()
                .build());

这是 logcat 参考(对不起,Xs。这些涵盖了包名称......)

02-20 19:02:43.682 28793-28793/? W/System: ClassLoader referenced unknown path: /data/app/and.XXXXX.XXXXX.ib.qua-1/lib/arm64
02-20 19:02:43.696 28793-28793/? I/art: Rejecting re-init on previously-failed class java.lang.Class<and.XXXXX.XXXXX.ib.app.MyApp$CrashlyticsViolationListener>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/os/StrictMode$OnVmViolationListener;

提前致谢!

顺便说一句:已经做了一个干净/构建/重建/禁用的即时运行....

标签: androidcrashlyticscrashlytics-androidandroid-strictmode

解决方案


StrictMode.OnVmViolationListener在 Android API 28 中添加,如果您的设备或模拟器版本较低,则该类不存在,导致您看到的错误。


推荐阅读