原文地址: Android app兼容低版本Java环境 – Stars-One的杂货小窝
起因是修复一个Bug遇到的问题,找到了一个可以让app兼容低版本java的方法
众所周知,Android版本更新后,其内置的JRE环境也随之更新了
假如我们在app中用到了JDK8的特有的属性,而用户的手机设备系统还是比较低,而没有JRE8环境,自然运行的时候就会提示类不存在了
问题说明
项目中使用到的一个库kizitonwose/Calendar: A highly customizable calendar view and compose library for Android.
但是由于其内置使用的是Jdk8的对应的日期类,但是低版本的Android并不是jdk8的运行环境,所以会导致在低版本运行出现类未定义的错误,如下错误:
Fatal Exception: java.lang.NoClassDefFoundError: Failed resolution of: Ljava/time/temporal/WeekFields; at com.kizitonwose.calendar.core.ExtensionsKt.firstDayOfWeekFromLocale(Extensions.kt:5) at com.kizitonwose.calendar.core.ExtensionsKt.daysOfWeek$default(Extensions.kt:5)
实际上,开源库文档已经提供了低版本适配对应说明(但这个项目之前是组长写的,而他是直接将库代码复制过来了,没注意那个文档,所以导致后面线上环境低版本的android设备报错了)
解决方法
这里说的问题的解决方法,也是本文提到的兼容低版本的方法
我们需要可以使用google的一个库
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
最新版本可以在此链接找到
并在app模块的gradle文件里配置以下信息即可:
android { defaultConfig { // Required ONLY if your minSdkVersion is below 21 multiDexEnabled true } compileOptions { // Enable support for the new language APIs coreLibraryDesugaringEnabled true // Set Java compatibility (version can be higher if desired) sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { // Also add this for Kotlin projects (version can be higher if desired) jvmTarget = "1.8" }}dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:'}
最后,如果以后我们需要使用到JDK高版本的特性,可以使用上面的方法,让低版本的Android系统也能使用上高版本JDK特性
提问之前,请先看提问须知点击右侧图标发起提问或者加入QQ群一起学习TornadoFx学习交流群:1071184701<!––>