androidx.appcompat 升级到1.5.1 趟过的坑
APP 要上google play,Android SDK 版本要升级到32;接了一个第三方SDK,不巧的是这个SDK引用appcompat是1.5.1,顺手把appcompat 包升级到1.5.1,这草率的一升,带来的不止一地鸡毛,还有精神上被残忍无情的蹂躏,心情上躁动不安,以及快要上线的APP给心理上带来的惴惴不安;再次吐槽android这种碎片化的诟病,当时RN SDK升级的痛苦仿佛瞬间又要扑面而来,而且这一次来的貌似更猛烈些。
一时的心血来潮
androidx.appcompat 版本: 1.3.1 ---> 1.5.1
在https://developer.android.google.cn/jetpack/androidx/releases/appcompat?hl=zh-cn查询到 1.5.1 会有如下依赖:
好家伙,Lifecycle 版本也要升级到 2.5.1,再查:
同时修改项目依赖版本到 2.5.1:
可以在Maven上面继续查询一下,androidx.appcompat 的依赖如下:
把对应的项目中依赖修改成对应版本,例如我的:
场面逐渐失控
本以为版本升级到此结束,编译轻轻click,起身打水,品一口我的西湖龙井;回来一看,我去!新的报错:appcompat-1.5.1-api.jar!/META-INF/appcompat_release.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.7.1, expected version is 1.5.1;截图如下:
顿时感觉不妙啊,这是要升级kotlin版本呐,思前想后一番纠结之后,都折腾到这份上了也不能停啊,于是开始了 kotlin 版本升级: 1.5.20 ----> 1.7.10
Sync 之后果然果然代码里出现各种语法错误提示,查看kotlin 官方文档:https://book.kotlincn.net/text/whatsnew17.html 看到了好多新语法特性,此时灰头土脸的还来不及细品这些,此间不小心看到了看到Gradle的字眼,瞬间感觉不太妙,编译报错gradle 版本过低,仔细一看:
好家伙,果然要升级Gradle,我的Android Studio好久没更新了,既然要gradle 7.0,那我就升级到最新版本Android Studio,免得好多kotlin 代码有语法高亮提示错误,一顿操作猛如虎,升级到了最新版本Android Studio;在官网:https://developer.android.google.cn/studio/releases/gradle-plugin?hl=zh-cn#kts查了一下Grandle对应插件版本:
于是把gradle版本升级到了:7.1.2,过程中还有gradle 要求运行java版本为11,自行搜索修改了一下Studio 设置,至此 Kotlin、 Android Studio、Gradle 都做了升级,语法错误高亮提示少了许多,点击运行依旧会提示语法错误,那就是苦力活了,各种when必须添加else分支、一些个判空操作的lamda表达式需要修改;
柳暗花明
看着几十上百个kotlin语法错误,无法编译,when必须添加else分支、一些个判空操作的lamda表达式语法糖需要修改,剩下的就是苦力活了,不断地修改语法错误,编译再修改,再编译,花了半天功夫总算是可以顺利编译通过了,再次短期我的茶杯,此时那茶已然凉透了,倒掉再泡一杯。。。
总结
代码虽然都修改完了,也能顺利运行起来,但如此大动干戈的修改代码,带来的不只是架构上的风险,业务层代码也进行了很多修改,虽然都是些语法适配修改,但毕竟是动了代码,作为码农我们敢拍胸脯保证百分之百的正确吗?我心里是惴惴不安的,这个样的改动,测试同学是不是又能全部覆盖呢,我想测试同学也是惶恐万分,我们开发是不是能把每一处修改都覆盖测试,以及交付测试时能够准确的告诉测试范围呢?对于这样的疑问我大底是要沉默了的。我想这样的改动若是最终引发了线上故障怕也只有开发去默默地背起这口锅了。
Android 的碎片化,每过一段时间就会给我们带来一次阵痛,也许一个简单API升级就会引发一系列的升级改造,我想不只是Android、Kotlin、RN、Flutter、Swift; 其实这种升级的兼容性是难以避免的,因为这是思想的变化、技术的革新,我们能做的就是拥抱变化,追随技术时代的步伐,不断学习新的架构,不断升级调整我们代码,这样我们才能始终守护住自己的那份麦田。That's All
相关文章:
androidx.appcompat 升级到1.5.1 趟过的坑
APP 要上google play,Android SDK 版本要升级到32;接了一个第三方SDK,不巧的是这个SDK引用appcompat是1.5.1,顺手把appcompat 包升级到1.5.1,这草率的一升,带来的不止一地鸡毛,还有精神上被残忍…...
[C++]反向迭代器
目录 前言: 1 对反向迭代器的构造思想 2 实现反向迭代器 3 完整代码 前言: 本篇文章主要介绍了STL容器当中的反向迭代器,可能有朋友会说:“反向迭代器有什么好学的?不一样还是迭代器吗,我正向能写出来&…...
解析Python编程中的包结构
假设你想设计一个模块集(也就是一个“包”)来统一处理声音文件和声音数据。通常由它们的扩展有不同的声音格式,例如:WAV,AIFF,AU),所以你可能需要创建和维护一个不断增长的各种文件格…...
【前端】深入浅出缓存原理
缓存的基本原理 对于前端来说,缓存主要分为浏览器缓存(比如 localStorage、sessionStorage、cookie等等)以及http缓存,也是本文主要讲述的。 当然叫法也不一样,比如客户端缓存大概包括浏览器缓存和http缓存 所谓htt…...
单调栈图文详解(附Java模板)
🍏🍐🍊🍑🍒🍓🫐🥑🍋🍉🥝 啥是"单调栈",它能解决什么样的问题? 文章目录🦩单调栈的概念&a…...
彻底理解Session、Cookie、Token,入门及实战
文章目录Session Cookie的使用Token的使用Session Cookie的使用 1. Session存储数据 HttpSession session request.getSession(); //Servlet底层通过的SESSIONID,获取Session对象。 session.setAttribute("loginTime",new Date()); out.println(&q…...
为什么运营商大数据可以精准获客?
“获客难”,“获客成本高”,一直是困扰企业的大问题,身边的许多朋友在吐槽客户的意向度不高,总是无法成交,员工非常积极主动去跟踪客户了,但始终事倍功半,这就像是老人们常说的一句老话“热脸贴…...
【数据结构】栈的实现
💯💯💯 本篇主要利用数组来实现栈,对于栈的各种操作都作详细介绍,压栈,出栈以及获取栈中元素的操作都是学习栈的必备知识,快来学起来吧!!!©Ⅰ.栈的概念及…...
【链表OJ题(六)】链表分割
📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:数据结构 🎯长路漫漫浩浩,万事皆有期待 文章目录链表OJ题(六)1. 链表…...
C++类中的三大函数(构造,析构,拷贝)
下面一段话与大家共勉:每个人的一生都会遇到很多边界,有些边界可以突破,有些则不能。那些无法突破的边界就是你的极限,而划分边界的标准就是“阈值”。每次突破阈值之后,人生轨迹就会发生剧烈变化,其间需要…...
【2024考研】计算机考研,4轮复习时间安排
文章目录🎨第1轮复习(暑假前&系统课)英语1/2数学1/2专业课408🎨第2轮复习(开学前&真题)英语1/2试卷数学1/2试卷专业课408试卷🎨第3轮复习(报名前&政治)政治试…...
(十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
系列文章: python网络爬虫专栏 目录 序言 本节学习目标 特别申明 4.7 使用BeautfulSoup解析h...
【经验】项目管理:瀑布式、Scrum
1、瀑布式开发 流程关键词关键人员输出立项简述、周期、预算领导立项申请表、立项评审表策划计划项目经理、QA、CM各种计划书(项目、配置、测试等),评审需求功能项目经理功能列表、需求规格书、需求开发计划等,评审设计UML开发设…...
Learning C++ No.17【STL No.7】双端队列
引言: 北京时间:2023/3/17/7:18,刚刚快乐的早锻炼回来(不对 ,应该说回来有一会了),因为此时我已经吃完早饭,洗过澡了;现在回想起上学期,就算是第二天需要晨跑…...
Snackbar
1.简介 位于底部的提示View 支持侧滑消失 同一时间只有一个 不支持跨Activity展示 国内使用率很低 2.基础使用 2.1 基本展示 Snackbar.make(view, "Content", Snackbar.LENGTH_LONG).show()2.2 设置点击事件 注意不设置点击事件回调,点击按钮的文字不…...
HummerRisk 使用教程:主机检测
1. 概述 HummerRisk 是开源的云原生安全平台,以非侵入的方式解决云原生环境的安全和治理问题。核心能力包括混合云的安全治理和容器云安全检测。 本文将介绍HummerRisk中的主机检测部分功能,包括如何管理主机、管理凭证,以及使用主机检测规…...
【Arduino无线气象站项目】
【Arduino无线气象站项目】 1. 概述2. Arduino无线气象站电路图3. 定制设计电路板4. Arduino无线气象站代码5. 总结1. 概述 使用DHT22传感器测量室外温度和湿度,并使用NRF24L01收发器模块将这些数据无线发送到室内机。在室内机,还有另一个用于测量室内温度和湿度的DHT22传感…...
HTTP详解
一,什么是HTTPHTTP(全称为“超文本传输协议”),是一种应用非常广泛的应用层协议,之前在《初识网络原理》的博客(初识网络原理_徐憨憨!的博客-CSDN博客)中,有详细讲解过TCP/IP五层模型,其中应用层描述了数据…...
cpufreq--处理器功耗控制
cpu 功耗控制 参考框架: cpufreq 框架。 cpufreq 框架提供 cpu 功耗管理接口,以及功耗管理方案。 用户可以通过功耗管理接口(以文件形式提供)来选择管理方案,并设置相关参数。 管理方案的实现则由具体的驱动来完成。…...
做技术,最忌讳东张西望
又好长时间没更新,研二了,忙着做实验、写论文、发论文,再加上给我导做一些事情(都习惯了,以前很不爽的事情,现在居然能这么平静的说出来)。 但这不是我今天说的重点,而是另外一件事…...
Oracle 常见报错问题汇总
Oracle 常见报错问题汇总 报错:ORA-01017: invalid username/password; logon denied报错:ORA-01031: insufficient privileges报错:"ORA-01034: ORACLE not available" 和 "ORA-27101: shared memory realm does not exist"报错:“ORA-00119: invalid…...
单片机连接有人云上传数据
首先采用有人物联网的模块 ,连接有人云平台服务器 看云平台相关配置配置连接设备在线后 添加设备添加设备完成后 添加变量模板 变量模板的添加方式如下 :本次采用的是标准的MODbus 协议添加一个温度变量温度变量如下显示云平台 下发数据 采集01 03 00 00…...
系统集成项目管理工程师:第18章项目风险管理学习笔记
第18章项目风险管理 一、目录 18.1 风险概述 18.1.1 风险的定义 18.1.2 风险的分类 18.1.3 风险的性质 18.2 项目风险管理 18.3 规划风险管理 18.3.1 规划风险管理的输入 18.3.2 规划风险管理的工具与技术 18.3.3 规划风险管理的输出 18.4 识别风险...
【笔试强训选择题】Day3.习题(错题)解析
文章目录 前言一、Day3习题(错题)解析二、Day3习题(原题)练习总结前言 今天我们将进入到第三天的练习,希望能一直坚持下去,不断反思总结错误,得到进步; 一、Day3习题(错…...
基于GPT-4的免费代码生成工具
大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...
Android开发的这一年里,Jetpack的Room源码是怎么狠狠奖励我的?
简述 Android Jetpack的出现统一了Android开发生态,各种三方库逐渐被官方组件所取代。Room也同样如此,逐渐取代竞品成为最主流的数据库ORM框架。这当然不仅仅因为其官方身份,更是因为其良好的开发体验,大大降低了SQLite的使用门槛…...
推荐一款卸载软件的小工具-《UninstallToo》
目录 UninstallToo介绍 UninstallToo下载 UninstallToo使用 总结 UninstallToo介绍 Uninstall Tool 是一款可以用来替代“添加/删除程序”的工具。它允许您显示隐藏的安装程序,按名称过滤已安装程序的列表,强行写在程序,浏览注册表项目&a…...
线程池——JUC随记8
线程池使用方式 1、一池N线程(Executors.newFixedThreadPool(n)) import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;public class ExecutorDemo {public static void main(String[] args) {ExecutorService execu…...
SpringCloudAlibaba微服务调用组件-Feign
SpringCloudAlibaba微服务调用组件-Feign 本项目代码与笔记已存放在Gitee仓库 地址: 代码,笔记 文章目录SpringCloudAlibaba微服务调用组件-Feign1. 什么是Feign1.1 优势2. Spring Cloud Alibaba快速整合OpenFeign1)引入依赖2)编写…...
高效学习方法论
2023.03.17 《程序员的三门课:技术精进、架构修炼、管理探秘 / 于君泽等著》学习笔记 学会学习一、高效学习的方法1、管理好自己的目标1)评估能力2)制定目标3)评估目标2、利用好碎片时间3、在同一时间只做一件事二、高效学习的途径…...
网站建设初衷/淘宝店铺运营推广
解决步骤:1、top命令查看CPU占用情况可以看到11042进程占用了非常多的CPU资源2、查看F5并发曲线:为什么应用耗费了这么多的线程,难道是用户量突然上来了,调取了F5的访问曲线图,可以看到在15:57左右并发量突然猛涨&…...
wordpress插件聊天室小人/郑州seo推广优化
红色来源于山脉,象征着狂躁、愤怒、混乱,血雨腥风,电光火石。蓝色来源于海岛,象征着控制、幻觉、诡计,运筹帷幄,谋定后动。绿色来源于树林,象征着生命、蛮力、成长,横冲直撞…...
商务型网站模板/个人优秀网页设计
有时我们需要判断是不是ajax请求来决定模块输出还是json格式输出.PHP判断ajax请求的原理:在发送ajax请求的时候,我们可以通过XMLHttpRequest这个对象,创建自定义的header头信息, 在jquery框架中,对于通过它的$.ajax, $.get, or $.…...
商丘网站建设哪家专业/商品热搜词排行榜
有时和一些所谓的朋友聊天,他们都在说他[她]认识什么什么有头有脸的人!多厉害等等...就是有点虚了,你认识的人的成就并非是你的努力获得,所以讲太多,反而会让人觉得你很讨厌!稍微有点思想的人就很容易看出&…...
网店seo排名优化/整站优化工具
这跟你是不是wmap没有关系的, wamp是一个集成环境,只是一次性帮你创建一个web服务器而已 下面给你些配置 一、登录Master服务器,修改my.ini ,添加如下内容: [wampmysqld] #数据库ID号, 为1时表示为Master,其中master_id必须为…...
怎么在虚拟空间做两个网站/企业网站有哪些功能
传送门 解题思路 首先给出的树形态没用,因为除根结点外每个点只有一个父亲,它只需要保证和父亲颜色不同即可。设\(f(k)\)表示至多染了\(k\)种颜色的方案,那么\(f(k)(k-1)^{(n-1)}*k\),而我们要求的是恰好染\(k\)种颜色的方案数&am…...