实战技巧: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代开外的。

最心急的当然是谷歌,辛苦花大价钱开发的最新特性竟然没人用,这能忍?于是谷歌对升级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有以下变化:

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

如何升级

做好准备

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

修改build.gradle文件

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

Groovy 复制代码
android {
    compileSdkVersion 34
    defaultConfig {
        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就完事儿了。

参考资料

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

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

相关推荐
西瓜本瓜@2 小时前
在Android中如何使用Protobuf上传协议
android·java·开发语言·git·学习·android-studio
似霰5 小时前
安卓adb shell串口基础指令
android·adb
fatiaozhang95277 小时前
中兴云电脑W102D_晶晨S905X2_2+16G_mt7661无线_安卓9.0_线刷固件包
android·adb·电视盒子·魔百盒刷机·魔百盒固件
CYRUS_STUDIO8 小时前
Android APP 热修复原理
android·app·hotfix
鸿蒙布道师8 小时前
鸿蒙NEXT开发通知工具类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
鸿蒙布道师8 小时前
鸿蒙NEXT开发网络相关工具类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
大耳猫9 小时前
【解决】Android Gradle Sync 报错 Could not read workspace metadata
android·gradle·android studio
ta叫我小白9 小时前
实现 Android 图片信息获取和 EXIF 坐标解析
android·exif·经纬度
dpxiaolong10 小时前
RK3588平台用v4l工具调试USB摄像头实践(亮度,饱和度,对比度,色相等)
android·windows
tangweiguo0305198711 小时前
Android 混合开发实战:统一 View 与 Compose 的浅色/深色主题方案
android