Android Target 版本作为应用和系统版本间的“协议”与“桥梁”,在厂商预装合作、应用商店曝光、开放能力方面都是一个重要衡量标准,近年来谷歌和手机厂商对于 Target 升级的推动速度和力度明显加大。Target 版本越高,对系统和用户的安全性相应越好,但其对应用的改动、约束和不明确的坑也随之增多,尤其是对使用系统API范围广、业务复杂、稳定性要求高的超级应用挑战很大。
高德地图此次一鼓作气从 Target 28 升级到 最新的 Target31,成为业界首个升级到最新版本的头部应用,满足了应用市场、厂商预装合规的要求,为后续市场先发、预装合作等赢得了时间窗口。第一个“吃螃蟹”,踩了不少坑,因此我们总结了升级过程中遇到的问题、原理、解决方案及操作方式,希望能帮大家在升级 Target 中事半功倍。
1.1 释义:何为 Target 版本
Target 版本,用白话意思是「告知系统我已满足指定系统版本的合规要求,并愿意受约束」。具体指:
1.2 挑战:变化快、成本高的原因
为什么近期 Target 升级推动快、成本高呢?从行业发展和技术的角度来看:
从行业发展看趋势:
厂商跟进快**:**近年来对于 Target 升级的要求表现了“趋紧”和“趋严”,通过此手段,可从系统层面约束各 App 满足隐私合规、统一用户体验等要求;其中:
针对预装应用,作为 CTS(Compatibility Test Suite,谷歌的兼容性测试套件)集成的必要一环,若不能及时响应 Target 升级诉求,则很有可能导致预装下架,进而对厂商合作、应用带量等造成严重影响;
针对市场应用,通过TAF 《移动应用软件高API等级预置与分发自律公约》等公约,从经验看会在 1-2年内将条件扩展到应用商店,即便不涉及预装应用,则仍要未雨绸缪
隐私力度强:无论政府监管部门,还是厂商、Google,其满足“隐私合规”的要求越加频繁,曾经“粗放”的App 权限已成过去,从长远看,此种限制对用户是有显著收益的,但对于应用开发者而言,需要及时响应、明确趋势,充分理解和执行;
碎片设备多:谷歌和各厂商/ROM 对于隐私、API 调整等的理解不同,其不同版本、不同设备的实施效果有较大差异,且“碎片化”愈演愈烈。如“大致位置”、“启动图”等,各厂商会根据自己的需求来做二次开发,导致在谷歌原生的适配方法,到其它 ROM 中则存在问题
从技术看问题:
作为高速发展的超级 App,高德需要做到既保持内部“持续的业务增长”,又能消化外部“要求高、变化快、难度大”。经过大家的不懈努力,最终圆满完成了 Target 28 → 31 的升级。
1.3 收益
2.1 外置存储、分区存储与限制【29,30】
1 背景
为了更好保护用户数据并限制设备冗余文件增加,若应用升级到 Target 29,在默认情况下被赋予了对外部存储设备的分区访问权限(即分区存储),应用只能看到本应用专有的沙箱目录以及特定类型的媒体(通过MediaStore)。
2 现状(SDK=28为目标平台的应用)
当用户授予“存储”权限,允许读写外置非沙盒目录的内容,并在卸载重装后不会被清除;此外,一些用户相册、敏感信息,在授予权限后也可以读取到。
3 Target 升级后不同访问方式表现
前提:
目录:
坑点&避坑建议(已在小米、ov等主流机型验证):
4 总结&适配建议
2.2 蓝牙权限及不同策略【29,30,31】
1 涉及权限的蓝牙API
大致可以分为下面三类:
2 蓝牙权限在不同版本的要求
Target ≤ 28 时:具备BLUETOOTH和BLUETOOT_ADMIN权限就能使用连接类API和广播类API,扫描类API需要具备大致定位权限(ACCESS_COARSE_LOCATION)
Target 为 29 和 30 时:连接类API和广播类API权限无变化,扫描类API需要另外具备精确定位权限(ACCESS_FINE_LOCATION)。
Target ≥ 31 时:新增了细分的蓝牙权限来替代BLUETOOTH和BLUETOOTH_ADIMIN,为应用提供更灵活的权限申请方式。具体包括:
BLUETOOTH_SCAN:允许扫描和发现设备,扫描类API需要同时具备该权限和精确定位权限(ACCESS_FINE_LOCATION)。
BLUETOOTH_CONNECT:允许连接和访问已配对的设备,连接类API需要具备该权限。
BLUETOOTH_ADVERTISE:允许向附近的蓝牙设备进行广播,广播类API需要具备该权限。
对于新增的这三个权限的弹窗表现,我们也实际测试了一下,现象如下:
不同版本中蓝牙API与权限的对应关系,最终总结起来如下:
3 适配方案
以下是Target SDK从28升级到31需要做的适配:
<!-- Request legacy Bluetooth permissions on older devices. -->
<uses-permission android:name="android.permission.BLUETOOTH"
android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
2 . 动态申请运行时权限
3 . 使用API前做权限校验
使用涉及权限的蓝牙API前,需做权限校验。确定已具备相应权限,再继续调用;否则应停止调用,否则可能导致应用直接崩溃。
(厂商称“模糊定位”,以下做统一)
1 背景
升级到Target 31后,在Android 12系统的定位权限设置页和授权弹窗中,明确区分了精确定位和模糊定位,并允许用户选择仅使用模糊定位,即当开启“模糊定位”时,其“精准定位”权限被关闭。此前,小米/Vivo的部分Android 11机型已经采用了这种方式为用户提供更灵活的定位选择,Android target 31升级算是借鉴了相同的思路。可以理解为,在原先仅小米/Vivo 支持“模糊定位”(关闭精确定位)的基础上,Target 升级后,将其扩展到了 Oppo/华为/三星等其他厂商的所有 Android 12 系统。
2 不同厂商/版本策略
图 定位权限设置页 & 定位授权弹窗
以下是Target 31升级前后关于模糊定位的对比情况:
可以看到,如果应用仅使用模糊定位,那么不会受到任何影响。但对于高度依赖精确定位的应用,则需要进行相应的适配,确保获得精确定位权限。
3 适配方案
2 . 引导用户开启精确定位 :可以在弹出授权弹窗前,或者去到应用权限设置页面前,向用户展示引导性的弹窗或文案,提示其开启精确定位。
2.4 在后台访问位置信息的权限【29,30】
1 背景
为了让用户更好地控制应用对位置信息的访问权限,从Android10开始加强了后台定位权限申请的管控。在介绍变更之前需先了解后台定位的场景,除非符合以下条件之一,否则应用将被视为在后台访问位置信息:
2 升级后的变化
注意:通过requestPermission去动态申请ACCESS_BACKGROUND_LOCATION 权限,系统将忽略该请求不会弹窗。如果您同时请求在前台访问位置信息的权限和在后台访问位置信息的权限, 系统会忽略该请求,且不会向您的应用授予其中的任一权限。
3 适配建议
2.5 精准的闹钟权限【31】
1 背景
为了鼓励应用节省系统资源,Android 12 要求为以 Android 12 为目标平台且设置精确的闹钟的应用配置“闹钟和提醒”特殊应用访问权限。如需获取这种特殊应用访问权限,请在清单中请求 SCHEDULE_EXACT_ALARM 权限。精确的闹钟只能用于面向用户的功能,且用户和系统均可撤消“闹钟和提醒”特殊应用访问权限,因此需要时加权限判断,否则会抛出Exception。
2 适配建议
需要精确的闹钟的得申请SCHEDULE_EXACT_ALARM权限,且使用时做权限判断。
2.6 一些电话 API、蓝牙 API 和 WLAN API 需要精确位置权限【29】
1 背景
如果应用以 Android 10 或更高版本为目标平台, 则它必须具有 ACCESS_FINE_LOCATION 权限才能使用 Telephony、WLAN、WLAN 感知和蓝牙(蓝牙上面章节已介绍)API中的一些方法。涉及影响的类主要有:
1)电话:TelephonyManager、TelephonyScanManager、TelephonyScanManager.NetworkScanCallback、PhoneStateListener
2)WLAN:WifiManager、WifiAwareManager、WifiP2pManager、WifiRttManager
2 适配建议
涉及通过无线进行“定位”的API需授予ACCESS_FINE_LOCATION权限后方可调用。
3.1 软件包可见性【30】
1 背景
Android 11 更改了应用查询用户已在设备上安装的其他应用以及与之交互的方式。使用
2 现状&影响
通过识别发现主要受影响的系统API包括但不限于:queryIntentActivities、getPackageInfo、getInstalledApplications、getInstalledPackages 等。我们以 getInstalledPackages 和 getInstalledApplications 的API为例:
3 建议
4 补充
关于软件包可见性,除了Google的要求外,国内各大厂商正在要求App添加厂商自定义权限:com.android.permission.GET_INSTALLED_APPS,该权限需要用户授权,也就是说未来某App想要获取应用软件列表信息是需要用户授权通过才可以正常获取。
3.2 对已配置的 WLAN 网络限制【29】
1 背景
为了保护用户隐私,只有系统应用和设备政策控制器 (DPC) 支持手动配置 WiFi 网络列表(包括增删改/连接 WiFi 等)。如果应用升级 Target 到 29 且应用不是系统应用或 DPC,则有些方法不会返回有用数据,具体表现见下节。
2 升级后的变化
Target升级到29+后获取/操作WIFI列表的行为如下:
需更换新 API(addNetworkSuggestions),当添加新 WiFi 时系统会弹窗等待用户确认(如下图),用户可拒绝添加;其它行为和升级前一致。
3 适配建议
3.3 更安全的组件导出【31】
1 背景
如果您的应用以 Android 12 或更高版本为目标平台,且包含使用 intent 过滤器的 activity、服务或广播接收器,您必须为这些应用组件显式声明 android:exported 属性。
警告:如果 activity、服务或广播接收器使用 intent 过滤器,并且未显式声明 android:exported 的值,您的应用将无法在搭载 Android 12 或更高版本的设备上进行安装。
2 影响
需要check一下activity、服务或广播中包含intent过滤器的场景。
3 思考&建议
官方考虑对于强制声明android:exported 属性,主要是考虑到安全性,自然也建议我们将exported 属性非必需true的都改成false,理想的角度,推荐大家逐一check一下所有的场景。
当然如果大家想更快捷的去解决,推荐在编译期间,解析AndroidManifest,对于没有主动设置exported属性的统一设置,这样也可以一并解决 SDK 相关问题。
这里有个细节需要注意一下,当Activity包含intent 过滤器时,如果没有设置exported属性,系统在运行的时候会将exported解析成true使用,这在系统的源码中也是有体现的;这样我们就需要考虑历史业务场景中:可能会存在没有给exported设置属性,却将exported设为true来使用。
3.4 前台服务启动限制【31】
1 背景
以 Android 12 或更高版本为目标平台的应用无法在后台运行时启动前台服务,少数特殊情况(https://developer.android.com/guide/components/foreground-services#background-start-restriction-exemptions)除外。如果应用尝试在后台运行时启动前台服务,则会引发异常。
2 影响
使用到启动前台服务(API如下)的业务场景,需要check是否有从后台启动的情况,如果有看是否满足特殊情况。主要涉及:startForegroundService 和 startForeground 方法。
3 建议:
尽量避免,甚至杜绝(随着系统不断升级,对于从后台启动前台服务越来越严)从后台启动前台服务。建议从静态分析角度查找所有涉及前台调用的 API,梳理和 Check。
3.5 前台服务访问摄像头、麦克风需声明【30】
1 背景:
2 影响
前台服务中使用摄像头、麦克风或位置。
3 建议
3.6 待处理 intent 可变性【31】
1 背景
如果您的应用以 Android 12 为目标平台,则需对 Pending Intent 强制设置“可变性”(即 FLAG_IMMUTABLE/FLAG_MUTABLE),这项额外的要求可提高应用的安全性。
2 影响
使用到PendingIntent的业务场景。
3 建议
根据需要为PendingIntent填写 PendingIntent.FLAG_MUTABLE 或 PendingIntent.FLAG_IMMUTABLE 标志;此外,最好提供一个适配的聚合类,其他类都直接调用适配类的方法,这样可以减少适配成本。
3.7 更新后的非 SDK 限制【29,30,31】
1 背景
从 Android 9(API 级别 28)开始,Android 平台对应用能使用的非 SDK 接口实施了限制。只要应用引用非 SDK 接口或尝试使用反射或 JNI 来获取其句柄,这些限制就适用。这些限制旨在帮助提升用户体验和开发者体验,为用户降低应用发生崩溃的风险,同时为开发者降低紧急发布的风险。
2 影响
使用google官方提供的工具(https://developer.android.com/guide/app-compatibility/restrictions-non-sdk-interfaces#list-names)和Android 12 非 SDK 接口及其对应的名单,就可以对需要的APP扫描出结果,根据结果可知道影响范围。
3 建议
理想情况下,我们应该只使用SDK(whitelist);但是一些App为了获得一些能力,使用了非sdk接口。因此:
以上是我们在 Target 升级中的思考和解法,由于篇幅所限,上述仅介绍了一些隐私安全相关的“关键要点”,具体的技术实现细节,大家若有兴趣,欢迎随时在评论区留言讨论。
Target 升级的关键之处,除了外部(厂商、政府政策)的推动,公司内部对于拥抱隐私合规,对用户负责的积极态度外,还有多方团队的合作,自上而下的重视,以及自内而外的决心,三者缺一不可。Target 升级绝非“一锤子买卖”,它需要长期、持之以恒的耕耘,才能不断结出果实。希望我们的经历,能为大家带来启发,少走弯路,轻装上阵。
本文由哈喽比特于2年以前收录,如有侵权请联系我们。
文章来源:https://mp.weixin.qq.com/s/C72pir9-YPkPX5tXi7o9wA
京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。
日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。
据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。
今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。
日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。
近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。
据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。
9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...
9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。
据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。
特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。
据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。
近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。
据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。
9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。
《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。
近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。
社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”
2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。
罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。