Android R正式版最近发布了,应用陆陆续续要进行sdk适配。

下面写几个修改内容对应用会有影响的,以便在测试中更好地进行测试。

1. 分区存储强制执行

targetSdkversion = 30 强制开启分区存储

如果是覆盖安装,可设置一个参数(android:preserveLegacyExternalStorage == “true”)暂时关闭分区存储

但是只要卸载重装,就会失效

影响点:

外部文件读取和写入

测试注意点:

SD卡交互/外部存储设备交互

卸载重装和覆盖安装的软件表现

 

2.媒体文件访问权限

1)执行批量操作

Android 11 在MediaStore API添加多种方法,用于简化特定媒体文件更改流程

2)直接文件路径和原生库访问文件

Android 11 恢复了使用直接文件路径访问媒体文件

影响点:

对图片/视频编辑更改删除等操作,收藏等

测试注意点:

如影响点

 

3.所有文件访问权限

MANAGE_EXTERNAL_STORAGE 这个权限获取所有文件的管理权限

影响点:

会有一个授予所有文件的管理权限的开关

测试注意点:

权限相关测试

 

4.电话号码相关权限

Android 11 更改了应用在读取电话号码时使用的与电话相关的权限

当用到TelecomManager类中的getLineNumber()和gerMsisdn()

原来的 READ_PHONE_STATE不能用,要换成READ_PHONE_NUMBERS

 

影响点:

应用获取电话号码

测试注意点:

应用获取电话号码的操作

 

5.自定义消息框视图被屏蔽

影响点:

toast弹出

 

6.APK签名方案v2

当targetSdkversion = 30 应用必须加上v2签名

 

7.媒体intent操作需要系统默认相机

只有预装相机可响应以下intent操作

android.media.action.VIDEO_CAPTURE
android.media.action.IMAGE_CAPTURE
android.media.action.IMAGE_CAPTURE_SECURE

也就是说,如果调用intent唤起照相机,使用VIDEO_CAPTURE的 action,只有系统的相机能够响应,而第三方的相机应用不会响应了。

影响点:

对外部唤起使用第三方的相机应用拍照有影响

测试注意点:如影响点

 

8.5G

新的 Android 11 也是支持了5G 相关的一些功能,包括:

  • 检测是否连接到了 5G 网络
  • 检查按流量计费性

 

9.后台位置信息访问权限

在搭载 Android 11 的设备上,当应用中的某项功能请求在后台访问位置信息时,用户看到的系统对话框不再包含用于启用后台位置信息访问权限的按钮。如需启用后台位置信息访问权限,用户必须在设置页面上针对应用的位置权限设置一律允许选项。

即无始终允许该选项,只有一个指引用户去应用设置页面开启始终允许的按钮

主要涉及到两点:

  • 从 Android 10 系统的设备开始,就需要请求后台位置权限(ACCESS_BACKGROUND_LOCATION),并选择Allow all the time (始终允许)才能获得后台位置权限。Android 11 设备上再次加强对后台权限的管理,主要表现在系统对话框上,对话框不再提示始终允许字样,而是提供了位置权限的设置入口,需要在设置页面选择始终允许才能获得后台位置权限。
  • 在搭载Android 11 系统的设备上,targetVersion 小于 11 的时候,可以前台后台位置权限一起申请,并且对话框提供了文字说明,表示需要随时获取用户位置信息,进入设置选择始终允许即可。但是 targetVersion 为 30 的时候,你必须单独申请后台位置权限,而且要在获取前台权限之后,顺序不能乱。并且无任何提示,需要开发者自己设计提示样式。

4适配 android 适配安卓r_数据

4适配 android 适配安卓r_4适配 android_02

 

 

 

 影响点:

有需要获取位置的应用功能

测试注意点:

位置权限测试

 

10.软件包可见性

Android 11 中,如果你想去获取其他应用的信息,比如包名,名称等等,不能直接获取了,必须在清单文件中添加<queries>元素,告知系统你要获取哪些应用信息或者哪一类应用。

 

需要查询其他应用包名信息的功能

 

11.文档访问限制

上文存储的时候说过可以通过SAF(存储访问框架--Storage Access Framework)来访问公共目录,但是 Android 11 再次升级,部分目录和文件不能访问了,具体如下:

无法再使用 ACTION_OPEN_DOCUMENT_TREE intent 操作请求访问以下目录:

  • 内部存储卷的根目录。
  • 设备制造商认为可靠的各个 SD 卡卷的根目录,无论该卡是模拟卡还是可移除的卡。可靠的卷是指应用在大多数情况下可以成功访问的卷。
  • Download 目录。

无法再使用 ACTION_OPEN_DOCUMENT_TREE 或 ACTION_OPEN_DOCUMENT intent 操作请求用户从以下目录中选择单独的文件:

Android/data/ 目录及其所有子目录。

Android/obb/ 目录及其所有子目录

 

影响点:

以上文件路径的文件操作

测试点:

在以上文件路径下进行的文件操作测试

 

12.限制对 APN 数据库的读取访问

 

13.在元数据文件中声明 "无障碍" 按钮使用情况

做过无障碍辅助功能的应该都知道AccessibilityServiceInfo要设置 flag 为FLAG_REQUEST_ACCESSIBILITY_BUTTON,getAccessibilityButtonController方法获取辅助功能按钮控制器,并且可用于查询辅助功能按钮的状态并注册监听器以进行交互和辅助功能按钮的状态更改。
但是,Android 11 开始,这样写不能获取辅助按钮回调事件了,得换成另外一种写法。在元数据文件 (通常为 res/raw/accessibilityservice.xml) 中使用 flagRequestAccessibilityButton 标记声明您的无障碍服务与 "无障碍" 按钮的关联。

影响点:  

无障碍辅助功能使用

测试注意:

无障碍辅助功能操作部分测试

 

14.设备到设备文件传输

如果您的应用以 Android 11 为目标平台,您将无法再使用 allowBackup 属性停用应用文件的设备到设备迁移。系统会自动启用此功能。不过,即使您的应用以 Android 11 为目标平台,您也可以通过将 allowBackup 属性设置为 false 来停用应用文件的云端备份和恢复。

影响点:

应用文件的云端备份和恢复

 

15.自动重置权限

如果应用以 Android 11 为目标平台并且数月未使用,系统会通过自动重置用户已授予应用的运行时敏感权限来保护用户数据。此操作与用户在系统设置中查看权限并将应用的访问权限级别更改为拒绝的做法效果一样。如果应用已遵循有关在运行时请求权限的最佳做法,那么您不必对应用进行任何更改。这是因为,当用户与应用中的功能互动时,您应该会验证相关功能是否具有所需权限。

官方说明说的很清楚了,而且只要应用遵循有关在运行时请求权限的最佳做法,也就是每次需要调用权限的时候都会去判断,那么就不会有什么问题。
如果需要关闭这个功能怎么办呢?只有引导用户去设置页面关闭了,可以调用包含Settings.ACTION_APPLICATION_DETAILS_SETTINGS action的 Intent 将用户定向到系统设置中应用的页面。

 

16.前台服务类型

从 Android 9 开始,应用仅限于在前台访问摄像头和麦克风。为了进一步保护用户,Android 11 更改了前台服务访问摄像头和麦克风相关数据的方式。如果您的应用以 Android 11 为目标平台并且在某项前台服务中访问这些类型的数据,您需要在该前台服务的声明的 foregroundServiceType 属性中添加新的 camera 和 microphone 类型。

 

 

 

适配 Android 11 手机

此模块的修改内容针对所有项目在Android 11手机上存在的改动,与targetSdkVersion无关。

1.数据访问审核

为了让应用及其依赖项访问用户私密数据的过程更加透明,Android 11 引入了数据访问审核功能。借助此流程得出的见解,您可以更好地识别和纠正可能出现的意外数据访问。

哪些范畴属于用户私密数据呢?其实就是危险权限的调用,所以这个功能就是提供了可以监听危险权限调用的监听。主要涉及到的方法是AppOpsManager.OnOpNotedCallback。无论是应用本身,还是依赖库或者 SDK 中的代码,只要访问到私密数据 (危险权限),都会回调给我们。
对于工程庞大或者使用较多 SDK 的工程比较适合用上这个功能,让自己应用的私有数据管理更加透明规范,否则对于私有数据的使用和管理并不全面和方便。而且还可以对权限使用添加归因,也就是一个 tag,标志权限用到了什么地方。方便回调的时候知晓哪里使用了私有数据

意思就是,可通过设置来知道应用使用中什么时候什么地方用到什么危险权限

 

2.单次授权

在 Android 11 中,每当应用请求与位置信息、麦克风或摄像头相关的权限时,面向用户的权限对话框会包含仅限这一次选项。如果用户在对话框中选择此选项,系统会向应用授予临时的单次授权。

简单的说,就是在申请与位置信息、麦克风或摄像头相关的权限时,系统会自动提供一个单次授权的选项,只供这一次权限获取。然后用户下次打开 app 的时候,系统会再次提示用户授予权限。这个影响应该不大,只要我们每次使用的时候都去判断权限,没有就去申请即可。放一张新版本权限获取样式:

4适配 android 适配安卓r_Android_03

 

 

3.权限对话框的可见性

Android 11 建议不要请求用户已选择拒绝的权限。在应用安装到设备上后,如果用户在使用过程中屡次针对某项特定的权限点按拒绝,此操作表示其希望 "不再询问"。这个都算不上改动,只是官方的一个良好建议。建议在用户多次拒绝之后,不要再展示权限申请。

4.应用使用情况统计信息

 为了更好地保护用户,Android 11 将每个用户的应用使用情况统计信息存储在凭据加密存储空间中。

这就涉及到了UsageStatsManagerUsageStatsManager是 Android 提供统计应用使用情况的服务。通过这个服务可以获取指定时间区间内应用使用统计数据、组件状态变化事件统计数据以及硬件配置信息统计数据。

但是在 Android 11 设备中,不能随意使用这些信息了。只有当isUserUnlocked()方法返回 true 的时候,才能正常访问这些数据。也就是以下两种情况:

  • 用户在系统启动后首次解锁其设备
  • 用户在设备上切换到自己的帐号

4.无障碍操作

在以前的 Android 版本中,框架会向未正确处理基于点击的无障碍操作的微件分派触摸事件。通常,这些视图会直接处理触摸事件,而不是注册点击监听器。为了在正确定义无障碍操作的应用中创建更一致的行为,Android 11 绝不会分派触摸事件。相反,系统会完全依赖于基于点击的无障碍操: ACTION_CLICK 和 ACTION_LONG_CLICK。此更改会影响屏幕阅读器的行为。

Android手机上有个预安装的屏幕阅读服务,叫做TalkBack,为视力障碍人士或者视力状态不佳的老年人提供。那我们应用为了让这个阅读器能够读懂你的自定义 view 操作,必须给与自定义控件定义处理程序,包括点击,长按等操作。原来版本可能对于OnTouchListener也支持无障碍触摸事件,而在Android 11中,必须专门制定点击或者长按事件才行了。

影响点:

talkback功能

测试注意点:

与talkback相关的功能