Android app兼容低版本Java环境
原文地址: 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环境的更多相关文章
- android 在使用ViewAnimationUtils.createCircularReveal()无法兼容低版本的情况下,另行实现圆形scale动画
ViewAnimationUtils.createCircularReveal()的简介: ViewAnimationUtils.createCircularReveal()是安卓5.0才引入的,快速 ...
- Fundebug前端JavaScript插件更新至1.8.0,兼容低版本的Android浏览器
摘要: 兼容低版本Android浏览器,请大家及时更新. Fundebug前端BUG监控服务 Fundebug是专业的程序BUG监控平台,我们JavaScript插件可以提供全方位的BUG监控,可以帮 ...
- [转]AppCompat 22.1,Goole暴走,MD全面兼容低版本
AppCompat 22.1,Goole暴走,MD全面兼容低版本 分类: Android2015-04-24 09:48 1354人阅读 评论(0) 收藏 举报 android 目录(?)[+] ...
- fragment基础 fragment生命周期 兼容低版本
fragment入门 ① 创建一个类继承Fragment 重写oncreateView方法 public class FirstFragment extends Fragment { @Overrid ...
- Vue2+Webpack+ES6 兼容低版本浏览器(IE9)解决方案
Vue2+Webpack+ES6 兼容低版本浏览器(IE9)解决方案 解决方式:安装 "babel-polyfill" 即可. 命令:npm install --save-dev ...
- 模拟实现兼容低版本IE浏览器的原生bind()函数功能
模拟实现兼容低版本IE浏览器的原生bind()函数功能: 代码如下: if(!Function.prototype.bind){ Function.prototype.bind=function( ...
- 兼容低版本IE浏览器的一些心得体会(持续更新)
前言: 近期工作中,突然被要求改别人的代码,其中有一项就是兼容IE低版本浏览器,所以优雅降级吧. 我相信兼容低版本IE是许多前端开发的噩梦,尤其是改别人写的代码,更是痛不欲生. 本文将介绍一些本人兼容 ...
- 使用VS2017开发APP中使用VUE.js开发遇到打包出来的android文件 在低版本的android(4.3)中无法正常使用
使用VS2017开发VUE的APP应用遇到的问题集合 1, 打包出来的apk文件在Android 6.0版本以上手机可以正常打开,在Android 4.3版本手机上无法打开 原因:一开始猜测是不是V ...
- android中导入低版本project可能会遇到的编译问题(转自: Victor@Beijing)
使用高版本的SDK后再导入以前用低版本的project时,会遇到一些兼容性的问题. (1)Unable to resolve target 'android-5' 因为本机中现在使用的是2.2的SDK ...
- [原创]多版本Java环境变量的配置
起因: 偶然突发兴致, 收拾下自己的老T500电脑, 用来做个家庭开发用机. 应为每次装系统都有GHOST备份的习惯, 所以需要提前搭建好开发环境. 而且新装系统的目的之一, 也是想研究下Andr ...
随机推荐
- webpack是如何处理css/less资源的呢
上一篇文章 体验了webpack的打包过程,其中js文件不需要我们手动配置就可以成功解析,可其它类型的文件,比如css.less呢? css-loader 首先,创建一个空文件夹,通过 npm ini ...
- 拖拽宫格vue-grid-layout详细应用及案例
目录 1.前言 2.安装 3.属性 4.事件 5.占位符样式修改 6.案例 1.前言 vue-grid-layout是一个适用于vue的拖拽栅格布局库,功能齐全,适用于拖拽+高度/宽度自由调节的布局需 ...
- ❤️ GitHub Copilot 读心术揭秘,Copilot 逆向工程笔记
总览 你是否好奇 GitHub Copilot 如何知道你想写的内容?有时候它聪明得甚至好像读过你项目里其他文件一样,不要怀疑,它确实读过.这篇文章记录了我阅读一个对 Copilot 的逆向工程的笔记 ...
- Kubernetes hostPort 使用
1.概述 在 Kubernetes 中,hostPort 是一种用于将主机上的特定端口映射到运行在 Pod 内部容器的端口的配置选项.通过使用 hostPort,你可以在主机上暴露容器的服务,从而允许 ...
- [ABC128E] Roadwork
2023-01-14 题目 题目传送门 翻译 翻译 难度&重要性(1~10):4 题目来源 AtCoder 题目算法 区间覆盖,线段树,双堆 解题思路 可以将问题转化为区间覆盖问题和单点查询问 ...
- PHP上传文件$_FILES, $_POST为空 empty 时, 文件上传大小限制
原因 今天在使用ci upload库时, 上传mp4发现表单为空, 上传png等类型却可以正常. 折腾一番后才恍然, PHP上传大小限制的问题. Make一下. 真是失策啊, 一开始我还不相信到处瞎折 ...
- mysql8关闭binlog并清空Binlog
编辑my.ini或者my.cnf文件 清空binlog信息 #查看现存的binlog文件列表 show master logs; #重置清空binlog文件 reset master; #重置清空后 ...
- 当开源项目 Issue 遇到了 DevChat
目录 1. 概述 2. Bug 分析与复现 3. Bug 定位与修复 4. 代码测试 5. 文档更新 6. 提交 Commit 7. 总结 1. 概述 没错,又有人给 GoPool 项目提 issue ...
- AnyLabeling标定及转化成labelmaskID
一.标定工具 在进行分割任务时,对分割工具进行预研和验证,现在AI辅助标定已经成熟,目标则是利用sam进行辅助标定.调研的三款标定工具情况如下: labelme:可以加载sam,但是在进行辅助标定后, ...
- 小米云原生文件存储平台化实践:支撑 AI 训练、大模型、容器平台多项业务
小米作为全球知名的科技巨头公司,已经在数百款产品中广泛应用了 AI 技术,这些产品包括手机.电视.智能音箱.儿童手表和翻译机等.这些 AI 应用主要都是通过小米的深度学习训练平台完成的. 在训练平台的 ...