Android Target 31 升级全攻略 —— 记阿里首个超级 App 的坎坷升级之路

Android Target 31 升级全攻略 —— 记阿里首个超级 App 的坎坷升级之路_第1张图片

作者:杨夕凯、张炅轩

简述

Android Target 版本作为应用和系统版本间的“协议”与“桥梁”,在厂商预装合作、应用商店曝光、开放能力方面都是一个重要衡量标准,近年来谷歌和手机厂商对于 Target 升级的推动速度和力度明显加大。Target 版本越高,对系统和用户的安全性相应越好,但其对应用的改动、约束和不明确的坑也随之增多,尤其是对使用系统API范围广、业务复杂、稳定性要求高的超级应用挑战很大。

高德地图此次一鼓作气从 Target 28 升级到 最新的 Target31,成为业界首个升级到最新版本的头部应用,满足了应用市场、厂商预装合规的要求,为后续市场先发、预装合作等赢得了时间窗口。第一个“吃螃蟹”,踩了不少坑,因此我们总结了升级过程中遇到的问题、原理、解决方案及操作方式,希望能帮大家在升级 Target 中事半功倍。

1.1 释义:何为 Target 版本

Target 版本,用白话意思是「告知系统我已满足指定系统版本的合规要求,并愿意受约束」。具体指:

  • 从约束上,和一般的强制约束(例如用户升级到 Android 12 就必须满足某个条件)不同,Target 版本为我们提供了一种“柔和、缓冲适配”的途径,允许用户在升级 Android 12 时,先临时不受新系统约束(Target 为老版本),而是等自己“准备就绪后”在升级 Target 版本以满足约束,更具灵活性;
  • 从强度上,Target 版本越高,受到的约束越多,且约束力越强,这里的版本为“系统 API 版本号”,和 Android 版本一一对应,如 28 对应的是 Android 9,29 为 Android 10,以此类推。

1.2 挑战:变化快、成本高的原因

为什么近期 Target 升级推动快、成本高呢?从行业发展和技术的角度来看:

Android Target 31 升级全攻略 —— 记阿里首个超级 App 的坎坷升级之路_第2张图片

行业发展看趋势:

  • 厂商跟进快: 近年来对于 Target 升级的要求表现了“趋紧”和“趋严”,通过此手段,可从系统层面约束各 App 满足隐私合规、统一用户体验等要求;其中:

a、针对预装应用,作为 CTS(Compatibility Test Suite,谷歌的兼容性测试套件)集成的必要一环,若不能及时响应 Target 升级诉求,则很有可能导致预装下架,进而对厂商合作、应用带量等造成严重影响;

b、针对市场应用,通过TAF 《移动应用软件高API等级预置与分发自律公约》等公约,从经验看会在 1-2年内将条件扩展到应用商店,即便不涉及预装应用,则仍要未雨绸缪

  • 隐私力度强:无论政府监管部门,还是厂商、Google,其满足“隐私合规”的要求越加频繁,曾经“粗放”的App 权限已成过去,从长远看,此种限制对用户是有显著收益的,但对于应用开发者而言,需要及时响应、明确趋势,充分理解和执行;
  • 碎片设备多:谷歌和各厂商/ROM 对于隐私、API 调整等的理解不同,其不同版本、不同设备的实施效果有较大差异,且“碎片化”愈演愈烈。如“大致位置”、“启动图”等,各厂商会根据自己的需求来做二次开发,导致在谷歌原生的适配方法,到其它 ROM 中则存在问题

技术看问题:

  • 变化频繁:以 Android 12 为例,Release 发布后至少有 5 次文档变动(包括启动图、模糊定位、文件存储等),并下发过 Release Patch 至厂商,厂商再根据自己的需求、节奏来看是否“实施”Patch,导致适配成本成倍增加;加之各 ROM 的碎片化,过程中需要持续调整对焦
  • 材料不全:当时业内无较好的分析文档,主流 App 也未适配到 31,很多需要自己探索,如新增权限判断、外置存储使用、启动图等,官方要么未提及,要么只说大概,需要自己分析源码 + 不断的实践才能明确。
  • 适配困难:每一个权限调整,其涉及 API 众多、用户影响高,且适配量很大,以我们为例,相比过去 Target 21 → 26 的 20+ 系统 API,本次涉及 300+ 系统 API,上千处调用,涵盖多个技术栈,改造成本高、影响范围广,为我们的适配带来了不小挑战

作为高速发展的超级 App,高德需要做到既保持内部“持续的业务增长”,又能消化外部“要求高、变化快、难度大”。经过大家的不懈努力,最终圆满完成了 Target 28 → 31 的升级。

1.3 收益

  1. 为满足应用市场、厂商预装合规要求,政府、厂商、电信终端产业协会公约 打好提前量,为后续市场先发、预装合作赢得的时间窗口,避免卡脖子;
  2. 在专项过程中沉淀了升级、合规相关经验,设计并落地系统隔离层,降低后续改动对业务的影响,提升后续对新系统、华米 OV ROM、鸿蒙等的应对效率;
  3. 通过源码分析+自研脚本,成功识别 13 个谷歌未提及的改动,减少了 119 个潜在崩溃、不可用风险。

隐私权限

2.1 外置存储、分区存储与限制【29,30】

背景

为了更好保护用户数据并限制设备冗余文件增加,若应用升级到 Target 29,在默认情况下被赋予了对外部存储设备的分区访问权限(即分区存储),应用只能看到本应用专有的沙箱目录以及特定类型的媒体(通过MediaStore)。

现状(SDK=28为目标平台的应用)

当用户授予“存储”权限,允许读写外置非沙盒目录的内容,并在卸载重装后不会被清除;此外,一些用户相册、敏感信息,在授予权限后也可以读取到。

Target 升级后不同访问方式表现

前提:

  • 设置requestLegacyExternalStorage=true 和 PreserveLegacyExternalStorage=true
  • APK targetSDK升级到31

你可能感兴趣的:(android,Target,App)