今天把代码放到设备上去调试的时候报: java.lang.NoClassDefFoundError: java.util.Objects 的错误。
(现有的设备很多都还是 Android 4.2,API 17 的,很多函数都不支持很是蛋疼)
通过在报错的地方打上断点进行调试,F7进入函数。可以发现当走到这一步后,接着按F8执行下一步函数,立马就跳到 ActivityThread.java 页面,然后抛出异常。
Objects.requireNonNull 这个静态方法,支持在 API 21 (Android 5.0.+)以上,Android 4.2.2(即 Android 17)并不支持该方法(此外 Objects.equals 也不支持)
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
WebViewCacheInterceptorInst.getInstance().init(builder);
}
Caused by: java.lang.IllegalStateException: Expected Android API level 21+ but was 19
总结:如果你的手机要兼容 Android 5.0 以下的设备
不支持的库 | 最低API版本 | 代替方案 |
---|---|---|
com.squareup.retrofit2:retrofit | 21 | MyUrlConnection |
com.squareup.okhttp3:okhttp | 21 | MyUrlConnection |
ren.yale.android:cachewebviewlib | 21 | webview原生cache |
不支持的方法 | 最低API版本 | 代替方案 |
---|---|---|
window.setStatusBarColor | 21 | 不设置状态栏 |
System.lineSeparator() | 19 | 使用\n |
webView.evaluateJavascript | 19 | 使用 loadUrl 替代,但 loadUrl 最多支持2M |
popupWindow.showAsDropDown(anchor, xoff, yoff, gravity) | 19 | 使用showAsDropDown(anchor, xoff, yoff) 代替 |
不支持的路径 | 最低API版本 | 指代的路径 |
:– | :– | :– |
context.getDataDir() | 24 | /storage/emulated/0/Android/data/包名/cache |
context.getCodeCacheDir() | 21 | /data/user/0/包名/code_cache |
context.getNoBackupFilesDir() | 21 | /data/user/0/包名/no_backup |
context.getExternalCacheDir() | 14 | /storage/emulated/0/Android/data/包名/cache |
context.getDownloadDir() | 14 | /storage/emulated/0/Android/data/包名/files/Documents |
腾讯信鸽推送(由于在某些小众设备兼容性没处理好,会崩溃)
samsung SM-G9350,API24 加载大于10KB图片就崩溃的问题