我编写了应用程序,并使用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是最好的方法,是否有更好的方法来做到这一点,或者遵循API?
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M)
{
return true;
}
else
{
return false;
}发布于 2016-07-01 13:57:51
NetworkStatsManager 需要API级别23.实际上,在Android中应该会看到相应的警告。您应该使用运行所选minSdkVersion API版本的模拟器或设备来测试应用程序,并注意由Android显示的警告。
发布于 2016-07-01 13:28:10
如果您在代码中的某个地方使用这个类:
android.app.usage.NetworkStatsManager然后将以下内容添加到proguard-rules.pro文件中:
-keep class android.app.usage.NetworkStatsManager还为您获得的其他-keep class规则添加NoClassDefFoundError规则,或标识正在使用该规则的库,并添加它们的保护规则。
正如您所说的,您已经将Firebase Crash Reporting集成到您的应用程序中,我建议您也为此添加保护规则。
https://stackoverflow.com/questions/38146470
复制相似问题