实战技巧:Android 14适配从挂号到出院

2024-04-25 01:12

本文主要是介绍实战技巧:Android 14适配从挂号到出院,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

公众号「稀有猿诉」        原文链接 实战技巧:Android 14适配从挂号到出院

啥?这都4202年了,你的应用还没有升级到targetSDK 34?莫慌,本文就带着你全面的了解升级targetSDK 34的方法以及避坑指南。

注意,Android版本与其API level或者targetSDK是一一对应的,只不过一个是外在的说法,一个是具体要做的事情,对于开发者来说适配Android 14,就等同于升级targetSDK到34,这个34称作API level。本文会混着用,但说的都是同一个意思。

等下,有同学举手了,这眼看着Android 15(API 35)都要出来,您才教我们升级到targetSDK 34?您 是不是写错了,还是在这里浪费时间呢?

这位同学你先坐下,没写错今天要讲的就是适配Android 14的。至于Android 15还处于预览(Preview)状态呢,它要至少等到10月份左右才会正式发布,属于下半年的KPI了。不过如果 我们把targetSDK 34搞定了,那么年底升级targetSDK 35就会非常的顺畅。

为啥要升级targetSDK

在折腾之前要先要搞明白为啥要折腾升级SDK,因为毕竟配置开发环境是软件开发中的排名第二的麻烦事儿(排名第一的是折腾操作系统)项目跑的好好的,何必自找麻烦?

省流点的说,就是你不得不升级。众所周知,Android生态最麻烦的事情就是碎片化,也就是用户手机的版本远远小于最新的版本,而且主流的版本升级较慢,通常会比最新的慢3个版本以上,对面的水果则能保持在2个版本以内。这对应用开发生态来说是十分不友好的,因为开发者不愿意升级到最新的SDK,使用平台的最新特性,核心原因在于升级了也没用,因为用户手上的版本仍是3代开外的。

  • Android Distribution Chart
  • Distribution dashboard
  • Mobile Android Version Market Share Worldwide

最心急的当然是谷歌,辛苦花大价钱开发的最新特性竟然没人用,这能忍?于是谷歌对升级targetSDK要求越来越严,对于谷歌能管得到的地方,如Google Play Store和厂商的GTS测试,都要求至少升级targetSDK到前一代的版本,比如2023年发布了Android 14,那就必须到targetSDK 33(Android 13);今年将发布Android 15(API 35)那到快要发布时约在2024年秋,应用必须升级到targetSDK 34。

如果不是强制要求升级targetSDK,比如我既不上线到Play Store也不用过GTS,那确实也没必要折腾。因为最近几年Android的新特性其实也都挺鸡肋的,犯不着折腾。

Android 14的新特性与变化

具体折腾前还是要先了解一下平台的变化,以评估影响,省流点说,Android 14有以下变化:

  • FOREGROUND_SERVICE必须要指定一个类型。
  • 调用BluetoothAdapter#getProfileConnectionState时必須在Manifest中声明BLUETOOTH_CONNECT权限。
  • 支持JDK17,可以使用Java 17了。
  • 动态广播接收器必须指明export flag,这个其实targetSDK 33时就有了。
  • 动态加载的代码(Jar 或者Dex)文件必须标记为只读。这个对插件化和Hotfix等影响较大。
  • Zip文件处理时,如果有路径越界(如"…“或者以”/"开头的绝对路径)会抛异常。

总的来说变化不大,主要还是权限收紧和安全加强。可以查看官方文档来看具体的。不喜欢看原文的同学,还有翻译的版本。啥?官方无法访问,莫慌还有官方的镜像。

如何升级

做好准备

折腾开发环境是比较烦的,所以最好找一个相对轻松的时间(比如产品汪休假时),以及心情还不错时。另外一定要把手头的事情做好备份并切到新的分支,以防不测。这真不是把33改到34就能完事儿的,会有各种意想不到的事情。

修改build.gradle文件

升级targetSDK的第一步是修改应用的build.gradle文件。找到defaultConfig部分,将targetSdkVersion的值修改为34。例如:

android {compileSdkVersion 34defaultConfig {targetSdkVersion 34// 其他配置...}// 其他构建配置...
}

同时,确保compileSdkVersion也设置为34,以确保使用最新的编译工具。

注意,建议手动改配置,而不要用所谓的SDK Upgrade Assistant,因为你不晓得它都会干啥,有可能把项目的配置改的面目全非。

适配SDK的变化

就是针对平台的新变化做对应的修改。如何修改?其实官方文档里面都有具体的指导,或者这篇文章讲的也非常详细,这里就不重复了。

避坑指南

Android 14的变化并不大,没有Android 13带来的变化多,这几年最大的影响是Android 11到Android 13,主要体现在存储读写的变化上面,可以看之前的一篇文章。

所以升级到targetSDK 34的难度有多大,有啥坑?这要取决于升级前的基础是什么。如果之前已经升级到了targetSDK 33,那么不会有坑,前面那几点稍弄下,就没有问题了。但如果还在API 30或者31,那麻烦会比较多,因为要先过targetSDK 33这一关,它的坑是最多的,可以参考这篇文章。

做好对平台的封装与隔离

最近几年Android版本的最大变化就是存储权限的收紧,以前可以直接用File到处读写,现在只有极少数文件夹可读可写,且像媒体文件要用MediaStore API。如果你的项目代码中到处都是File,甚至在JNI的so中也到处都是绝对路径,那么升级targetSDK会相当痛苦。

这就要求我们在开发过程中多留一个心眼儿。一个伟大的计算机科学家说过「计算机科学中的任何问题都能通过增加一个层来解决」。解决这种平台的硬性依赖的最好方法就是多加一层封装以进行隔离:

  • 用一个模块来封装所有的涉及存储的I/O操作,这样即使遇到平台的重大变化,也只需要改这一个模块,风险大大减小
  • 对于JNI,要尽可能的传递数据,而非直接让其操作文件。如果确实要操作文件,那么也要把根文件夹从Java层传入,不能让so使用绝对路径

对平台做好封装和隔离,会大大加强项目的兼容性,在升级平台SDK时起码能做到风险可控

未来Android的发展趋势

Android(其实智能手机操作系统也一样)诞生于21世纪的第一个10年,在第二个10年达到了顶峰,移动互联网让科技巨头吃尽了红利,巨头们的市值更是超过了全球GDP总值。但回首最近两年的Google I/O和水果的WWDC,可以发现,Android和水果越来越像,也在相互抄袭,已经很久没有见到让人感到惊艳的东西了(乔帮主在天上估计都要看不下去了)。

对于Android来说,系统安全(包括权限收紧和数据安全)隐私保护(安全和隐私曾经是Android的弱项,现在已追上来了),以及互联互通这三个方面还有点新东西,其他的已经没有什么变化了。智能手机已经到了比较明显的瓶颈期,巨头的注意力已经全都转移到了AI上面了。可以看一看Android 15的变化,基本上没啥变化,以后的升级会越来越简单了,可能下次只是把34改成35就完事儿了。

参考资料

  • Behavior changes: Apps targeting Android 14 or higher
  • Use the Android SDK Upgrade Assistant
  • Set up the Android 14 SDK
  • How To Update Your App SDK To Target Android API Level 34
  • Android14 适配之——targetSdkVersion 升级到 34 需要注意些什么?
  • 升级targetSDK为33后的十来个坑 (工具篇)
  • Android 14 快速适配要点
  • Android 14 正式版适配笔记(二)— 针对Android14或更高版本应用的变更
  • Android 14 正式版适配笔记(一)— 针对所有应用的变更
  • 记一个 Android 14 适配引发的Android 存储权限问题

欢迎搜索并关注 公众号「稀有猿诉」 获取更多的优质文章!

原创不易,「打赏」「点赞」「在看」「收藏」「分享」 总要有一个吧!

这篇关于实战技巧:Android 14适配从挂号到出院的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/933341

相关文章

qt5cored.dll报错怎么解决? 电脑qt5cored.dll文件丢失修复技巧

《qt5cored.dll报错怎么解决?电脑qt5cored.dll文件丢失修复技巧》在进行软件安装或运行程序时,有时会遇到由于找不到qt5core.dll,无法继续执行代码,这个问题可能是由于该文... 遇到qt5cored.dll文件错误时,可能会导致基于 Qt 开发的应用程序无法正常运行或启动。这种错

mtu设置多少网速最快? 路由器MTU设置最佳网速的技巧

《mtu设置多少网速最快?路由器MTU设置最佳网速的技巧》mtu设置多少网速最快?想要通过设置路由器mtu获得最佳网速,该怎么设置呢?下面我们就来看看路由器MTU设置最佳网速的技巧... 答:1500 MTU值指的是在网络传输中数据包的最大值,合理的设置MTU 值可以让网络更快!mtu设置可以优化不同的网

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

Spring @RequestMapping 注解及使用技巧详解

《Spring@RequestMapping注解及使用技巧详解》@RequestMapping是SpringMVC中定义请求映射规则的核心注解,用于将HTTP请求映射到Controller处理方法... 目录一、核心作用二、关键参数说明三、快捷组合注解四、动态路径参数(@PathVariable)五、匹配请

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

如何确定哪些软件是Mac系统自带的? Mac系统内置应用查看技巧

《如何确定哪些软件是Mac系统自带的?Mac系统内置应用查看技巧》如何确定哪些软件是Mac系统自带的?mac系统中有很多自带的应用,想要看看哪些是系统自带,该怎么查看呢?下面我们就来看看Mac系统内... 在MAC电脑上,可以使用以下方法来确定哪些软件是系统自带的:1.应用程序文件夹打开应用程序文件夹

Java Spring 中的监听器Listener详解与实战教程

《JavaSpring中的监听器Listener详解与实战教程》Spring提供了多种监听器机制,可以用于监听应用生命周期、会话生命周期和请求处理过程中的事件,:本文主要介绍JavaSprin... 目录一、监听器的作用1.1 应用生命周期管理1.2 会话管理1.3 请求处理监控二、创建监听器2.1 Ser

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

MQTT SpringBoot整合实战教程

《MQTTSpringBoot整合实战教程》:本文主要介绍MQTTSpringBoot整合实战教程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录MQTT-SpringBoot创建简单 SpringBoot 项目导入必须依赖增加MQTT相关配置编写