异常java.lang.NoClassDefFoundError:Landroid / app / usage / NetworkStatsManager

时间:2016-07-01 13:16:57

标签: android exception

我编译了应用并将其分发给Google Play的用户。我在那里集成了Firebase Crash,现在我在控制台中看到了很多错误。

Exception java.lang.NoClassDefFoundError: Failed resolution of: Landroid/app/usage/NetworkStatsManager;

Caused by java.lang.ClassNotFoundException: Didn't find class "android.app.usage.NetworkStatsManager" on path: DexPathList[[zip file "/data/app/com.xxx.yyy/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]

我使用默认设置ProGuard。有什么办法可以解决这个问题吗? 我用Android Studio 2.2 Preview 4编译了它。

感谢您的帮助。

修改

我重新检查了我的代码,我很惭愧,我问过这个问题:)为什么?

正如你的建议,我应该检查API版本,我做了,但因为我开发了多版本的应用程序(基于API版本以不同的方式工作),我不得不"禁用"关于API版本的警告。

我犯了愚蠢的错误,因为我在检查之前实现了所需的功能API23,是否有API23。

有什么更好的方法可以做到这一点,或者如果API 是最好的方法,那么如何做?

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M)
        {
            return true;
        }
else
        {
            return false;
        }

2 个答案:

答案 0 :(得分:3)

NetworkStatsManager requires API level 23。您应该在Android Studio中看到相应的警告。您应该使用运行所选minSdkVersion API版本的模拟器或设备测试您的应用,并注意Android Studio显示的警告。

答案 1 :(得分:0)

如果您在代码中的某处使用此类:

android.app.usage.NetworkStatsManager

然后将以下内容添加到您的proguard-rules.pro文件中:

-keep class android.app.usage.NetworkStatsManager

还为您正在获取的其他-keep class添加NoClassDefFoundError规则,标识正在使用此功能的库并添加其proguard规则。

正如您所说,您已在应用中集成Firebase Crash Reporting,我建议您也为此添加proguard规则。