Android Q 提前适配攻略

Android Q 的预览版发布快半个月了,新一年的 Android 适配工作也要提上日程了,当前国产安卓机的系统更新越来越快,对及时适配的要求也就越来越高。根据预览版放出的博客和已更新的文档,我们可以提前准备处理一些适配的内容。

目前看来,开发者可以提前准备的工作包括:

  1. 纠正 App 内文件储存的路径
  2. 适配获取不到隐私数据的情况
  3. 优化 Activity 异步启动方案

全部的 Android Q 更新内容可以阅读原文(android-developers.googleblog.com/2019/03/int…

PS:尝试使用 Android Q beta 的话,下载完 SDK 后需要这样配置 build.gradle:

    compileSdkVersion 'android-Q'
    defaultConfig {
    ...
        targetSdkVersion 'Q'
    ...// 目前不存在数字29哦
    }
复制代码

数据隐私保护:沙盒机制

对于 Android 用户来说,这是一项非常优秀的改进。自从 Android M 以来,我已经遇到许多不给读写外存权限就无法使用的 App 了。结果是打开文件管理就能看到一堆乱七八糟的文件和文件夹,这对习惯自己整理存储空间的人来说太痛苦了。

但读写外存的权限并非必要的。通过Context.getExternalFilesDir可以获取到属于 App 自身的文件路径,通常是~/Android/data/<package-name>/**/。在该目录中读写文件均不需要申请权限,当 App 被卸载时,该文件夹及内容也会全部删除。

Android Q 中删除了READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE两项危险权限,限制 App 只能使用自己的应用空间存放文件。

当 App 需要保存一些不能随卸载删除的文件时,需要根据存放位置动态申请新增的权限:READ_MEDIA_IMAGES,READ_MEDIA_VIDEOREAD_MEDIA_AUDIO(分别对应系统的媒体文件夹)。 比较特殊的是 Downloads 文件夹:写入和读取自身写入的数据不需要申请权限,但想获取其他 App 存进去的文件时,必须使用系统的文件选择器,由用户选择。

以上几个路径之外的所有位置均不可访问,是不是很让人安心呢?

[模拟器测试结果]
测试安装了一个 targetSdkVersion=26 的 demo 项目,除了动态申请存储权限时的文案之外一切都没改变,应该是兼容了 targetSdkVersion 小于 Q 的 App。考虑到应用市场对 targetSdkVersion 要求(今年只要求到28),最晚要在明年 Android R 面世之前完成适配。

隐私数据获取调整

针对所有运行在 Android Q 设备上的 App:

  • 不再能获取联系人的关系:(说起来估计没有人添加联系人的时候会填那项吧)
  • 全面随机MAC地址:关于MAC地址的获取 Android 每个版本都在改,不知道这次还有没有能绕过限制的方法…
  • 禁止访问/proc/net:但文档说相关内容可以通过NetworkStatsManagerConnectivityManager获取
  • 禁止获取 IMEI 和设备序列号:新增了特权(普通 App 申请不了的那种)READ_PRIVILEGED_PHONE_STATE去保护设备的唯一标识符。官方的解决方案是这样:developer.android.com/training/ar…
  • 后台运行的 App 禁止访问剪贴板,除非是默认输入法 App。

针对 targetSdkVersion 在 Android Q 的 App:

  • 获取 USB 序列号需要用户授权

体验优化:禁止后台启动 Activity

虽然听起来不太常见,但其实很多 App 的 启动页都是倒计时后进入首页的,这期间按 HOME 退出的话,就会触发后台启动 Activity。如果该行为被阻止,再次点击应用图标就可能卡在启动页进退两难了…所以这里应该需要增加一下对生命周期的处理吧。

但是经测试,虚拟机的系统镜像还能正常启动,只多了一条 Toast 提示。具体的解决方案要再等等啦。

其他适配相关内容简报

其他的更新内容估计要等 I/O 之后上真机调试了,就简要描述一下吧

  • App 在后台使用定位需要动态申请ACCESS_BACKGROUND_LOCATION
    • 注意:不可单独申请,原来的定位权限依然需要
  • 提供 折叠屏/多屏显示 适配方案(生命周期调整)
  • share intent UI 预加载
  • 设置面板:可以在 App 内唤起简易设置页面(网络/音量/NFC)
  • Wifi 模式选择(high performance / low latency)

原文还提到了一些新特性,比如获取图片景深信息,神经网络 API,新的音视频解码器等。如果工作中用得上相关内容就早点了解一下吧。

祝喜欢 Android 的各位工作顺利~

转载于:https://juejin.im/post/5c98958f6fb9a070f77d1838

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值