我编译了应用并将其分发给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;
}
答案 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规则。