首页 > 编程语言 >Android app兼容低版本Java环境

Android app兼容低版本Java环境

时间:2023-11-28 10:22:17浏览次数:35  
标签:Java 低版本 app 兼容 Android com

原文地址: 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:<latest-version>'
}

最后,如果以后我们需要使用到JDK高版本的特性,可以使用上面的方法,让低版本的Android系统也能使用上高版本JDK特性

标签:Java,低版本,app,兼容,Android,com
From: https://www.cnblogs.com/stars-one/p/17861271.html

相关文章

  • Java 第三方链接请求工具
    importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONObject;importorg.apache.http.Consts;importorg.apache.http.HttpEntity;importorg.apache.http.HttpResponse;importorg.apache.http.NameValuePair;importorg.apache.http.client.entity.Url......
  • Java8使用并行流(ParallelStream)注意事项
    本文转载自简书:https://www.jianshu.com/p/51c1d4f1bf84著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 Java8并行流ParallelStream和Stream的区别就是支持并行执行,提高程序运行效率。但是如果使用不当可能会发生线程安全的问题。Demo如下:1publics......
  • 用java写一个抽奖程序
    需求分析1)实现三个基本功能:登录、注册、抽奖。2)登录:用户输入账号密码进行登录,输入账号后会匹配已注册的用户,若输入用户不存在则退出,密码有三次输入机会,登录成功后主界面会显示已登录用户的账号信息。3)注册:用户首先输入账号名称,系统查询此名称是否存在,如存在则请求用户换一个名称,......
  • Java 实现统一社会信用代码有效性校验
    一、调用工具类:importcom.yf.utils.StringUtils;importjava.util.HashMap;importjava.util.Map;/***统一社会信用代码有效性校验**@authorFengQing*@programruoyi-vue-file*@description*@date2023/09/11*/publicclassTyshxydmVerificationUtil......
  • Java 将JSON数组转成List对象集合
     一、从对象列表中提取并组装JSON字段的数据:(工具类)publicclassJsonMsgUtils<T>{/***从对象列表中提取并组装JSON字段的数据。**@paramlogs包含对象的列表*@paramtargetClass目标对象类型,表示JSON消息的结构......
  • Make Lexicographically Smallest Array by Swapping Elements
    MakeLexicographicallySmallestArraybySwappingElementsYouaregivena 0-indexed arrayof positive integers nums anda positive integer limit.Inoneoperation,youcanchooseanytwoindices i and j andswap nums[i] and nums[j] if |nums......
  • Java并发编程:面向对象思想与并发编程思想的融合
    1.封装共享变量1.1识别可变化与不变的共享变量识别可变化与不可变化的共享变量。针对初始化后不再改变的变量,可以添加final修饰。不仅编译器编译更快,也对后续开发人员指明了变量属性,更防范了意想不到的修改行为。1.2针对可变化的共享变量,进行封装处理针对共享变量的访问,若......
  • Java实现并行功能
    Java8线程池异步处理-->针对小包大MyTask 类中的 compute() 方法首先检查任务的规模是否小于等于1。如果是,它直接返回任务的结果。否则,它将任务拆分成两个子任务(leftTask 和 rightTask),并使用 fork() 方法将它们提交到 ForkJoinPool 中执行。这里定义了一个名为 My......
  • java System
    packagenet.elaina.system;publicclassTest1{publicstaticvoidmain(String[]args){/*publicstaticvoidexit(intstatus)终止当前运行的Java虚拟机publicstaticlongcurrentTimeMillis()返回当前系统的时间毫秒值形式p......
  • 支持修改键值的优先队列(以C++,Java为例)
    #include<queue>#include<functional>template<typenameT1,typenameT2>classmutable_priority_queue;template<typenameT1,typenameT2>classmutable_priority_queue{private:std::function<bool(conststd::pair<T1,T......