原文地址: 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特性

Android app兼容低版本Java环境的更多相关文章

  1. android 在使用ViewAnimationUtils.createCircularReveal()无法兼容低版本的情况下,另行实现圆形scale动画

    ViewAnimationUtils.createCircularReveal()的简介: ViewAnimationUtils.createCircularReveal()是安卓5.0才引入的,快速 ...

  2. Fundebug前端JavaScript插件更新至1.8.0,兼容低版本的Android浏览器

    摘要: 兼容低版本Android浏览器,请大家及时更新. Fundebug前端BUG监控服务 Fundebug是专业的程序BUG监控平台,我们JavaScript插件可以提供全方位的BUG监控,可以帮 ...

  3. [转]AppCompat 22.1,Goole暴走,MD全面兼容低版本

    AppCompat 22.1,Goole暴走,MD全面兼容低版本 分类: Android2015-04-24 09:48 1354人阅读 评论(0) 收藏 举报 android   目录(?)[+] ...

  4. fragment基础 fragment生命周期 兼容低版本

    fragment入门 ① 创建一个类继承Fragment 重写oncreateView方法 public class FirstFragment extends Fragment { @Overrid ...

  5. Vue2+Webpack+ES6 兼容低版本浏览器(IE9)解决方案

    Vue2+Webpack+ES6 兼容低版本浏览器(IE9)解决方案 解决方式:安装 "babel-polyfill" 即可. 命令:npm install --save-dev ...

  6. 模拟实现兼容低版本IE浏览器的原生bind()函数功能

    模拟实现兼容低版本IE浏览器的原生bind()函数功能: 代码如下: if(!Function.prototype.bind){   Function.prototype.bind=function( ...

  7. 兼容低版本IE浏览器的一些心得体会(持续更新)

    前言: 近期工作中,突然被要求改别人的代码,其中有一项就是兼容IE低版本浏览器,所以优雅降级吧. 我相信兼容低版本IE是许多前端开发的噩梦,尤其是改别人写的代码,更是痛不欲生. 本文将介绍一些本人兼容 ...

  8. 使用VS2017开发APP中使用VUE.js开发遇到打包出来的android文件 在低版本的android(4.3)中无法正常使用

    使用VS2017开发VUE的APP应用遇到的问题集合 1,  打包出来的apk文件在Android 6.0版本以上手机可以正常打开,在Android 4.3版本手机上无法打开 原因:一开始猜测是不是V ...

  9. android中导入低版本project可能会遇到的编译问题(转自: Victor@Beijing)

    使用高版本的SDK后再导入以前用低版本的project时,会遇到一些兼容性的问题. (1)Unable to resolve target 'android-5' 因为本机中现在使用的是2.2的SDK ...

  10. [原创]多版本Java环境变量的配置

    起因:   偶然突发兴致, 收拾下自己的老T500电脑, 用来做个家庭开发用机. 应为每次装系统都有GHOST备份的习惯, 所以需要提前搭建好开发环境. 而且新装系统的目的之一, 也是想研究下Andr ...

随机推荐

  1. 助力618-Y的混沌实践之路

    一.写在前面 1.混沌是什么? 混沌工程(Chaos Engineering)的概念由 Netflix 在 2010 年提出,通过主动向系统中引入异常状态,并根据系统在各种压力下的行为表现确定优化策略 ...

  2. Android13冻结进程分析:如何提高设备性能和用户体验

    Android13冻结进程分析:如何提高设备性能和用户体验 本文介绍了Android13中的冻结进程功能,它是一种重要的资源管理策略,可以提高系统性能和稳定性,同时最大限度地节省设备的资源和电池消耗. ...

  3. Qt安卓开发经验技巧总结V202308

    01:01-05 pro中引入安卓拓展模块 QT += androidextras . pro中指定安卓打包目录 ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android ...

  4. mac安装mysql8.0

    1.进入下载页 历史版本:https://downloads.mysql.com/archives/community/ 最新版本:https://dev.mysql.com/downloads/my ...

  5. ArcMap中矢量数据修改标注Label的方法

      本文介绍在ArcMap软件中,修改图层标签(Label)所显示字段与具体显示内容的方法.   在之前的文章中,我们看到了ArcMap中修改图层标签的重要性:可是,如何自定义图层的标签内容呢?    ...

  6. 对比 MyBatis 和 MyBatis-Plus 批量插入、批量更新的性能和区别

    1 环境准备 demo 地址:learn-mybatis · Sean/spring-cloud-alibaba - 码云(gitee.com) 1.1 搭建 MyBatis-Plus 环境 创建 m ...

  7. .NET C#基础(9):资源释放 - 需要介入的资源管理

    1. 什么是IDisposable?   IDisposable接口是一个用于约定可进行释放资源操作的接口,一个类实现该接口则意味着可以使用接口约定的方法Dispose来释放资源.其定义如下: pub ...

  8. 基于AvaSpe 2048测定物体的光谱曲线

      本文介绍基于AvaSpec-ULS2048x64光纤光谱仪测定植被.土壤等地物高光谱曲线的方法.   AvaSpec是由荷兰著名的光纤光谱仪器与系统开发公司Avantes制造的系列高性能光谱仪,广 ...

  9. 万字长文 | 泰康人寿基于 Apache Hudi 构建湖仓一体平台的应用实践

    文章贡献者 Authors 技术指导: 泰康人寿 数据架构资深专家工程师 王可 文章作者: 泰康人寿 数据研发工程师 田昕峣 摘要 Abstract 本文详细介绍了泰康人寿基于 Apache Hudi ...

  10. Python基础——字符编码、文件处理

    文章目录 字符编码 一 引入 二 知识储备 2.1 三大核心硬件 2.2 文本编辑器读取文件内容的流程 2.3 python解释器执行文件的流程 2.4 总结 三.字符编码介绍 3.1 什么是字符编码 ...