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

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

    android {
        compileSdkVersion 34
        defaultConfig {
            targetSdkVersion 34
            // 其他配置...
        }
        // 其他构建配置...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    同时,确保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就完事儿了。

    参考资料

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

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

  • 相关阅读:
    SegGPT: Segmenting Everything In Context论文笔记
    会计学原理完全版
    定制.NET 6.0的依赖注入
    Python 中 is 和 == 的区别
    MybatisPlus多表连接查询 支持一对一、一对对、多对多查询
    史上最全MySQL剖析:优化+存储+查询+索引+复制+可扩展+高可用
    【精读系列】GloVe: Global Vectors for Word Representation
    PostgreSQL快速入门 & 与MySQL语法比较
    控件交互的优劣势--自动窗帘系统
    Conda 命令小表格
  • 原文地址:https://blog.csdn.net/hitlion2008/article/details/138171403