Android Q行为变更

目录

1 概述

2 运行在 Android Q 上的所有应用

2.1 非 SDK 接口限制

2.2 WLAN 直连广播

2.3 Go 设备上的SYSTEM_ALERT_WINDOW

2.4 关于以旧版Android 系统为目标平台的应用的警告

2.5 应用使用情况

3 以 Android Q 为目标平台的应用

 3.1 非 SDK 接口的受限情况出现变化

3.2 共享内存

3.3 Android 运行时只接受系统生成的 OAT 文件

3.4 在 ART 中强制要求 AOT 正确性

3.5 针对全屏 Intent 的权限变更


 

1 概述

Android Q 可增强对用户隐私的保护、提供吸引用户的新方式、更好地支持可折叠设备、Vulkan 扩展等等!

2 运行在 Android Q 上的所有应用

Android Q 平台做了一些行为变更,这些变更可能会影响您的应用。以下行为变更将影响在 Android Q 上运行的所有应用,无论其采用哪种“targetSdkVersion”都不例外。您应该测试您的应用,然后根据需要进行更改以适当地支持这些变更(如果适用)。

2.1 非 SDK 接口限制

为了确保应用稳定性和兼容性,Android平台开始限制您的应用可在Android 9(API级别28)中使用哪些非SDK接口。Android Q包含更新后的受限非SDK接口列表(基于与Android开发者之间的协作以及最新的内部测试)。

如果您不打算以Android Q为目标平台,那么其中一些变更可能不会立即对您产生影响。虽然您目前可以使用灰名单中的一些非SDK接口(取决于您应用的目标API级别),但如果您使用任何非SDK方法或字段,则应用无法运行的风险终归较高。

如果您不确定自己的应用是否使用了非SDK接口,则可以测试该应用进行确认。如果您的应用依赖于非SDK接口,则应该开始计划迁移到SDK替代方案。如果您无法为应用中的某项功能找到使用非SDK接口的替代方案,则应该请求新的公共API。

有关详情,请参阅非SDK接口在Android Q中的受限情况出现变化以及对非SDK接口的限制。

2.2 WLAN 直连广播

在Android Q中,与WLAN直连相关的广播不再具有粘性。如果您的应用依赖于在注册时接收这些广播(因为其之前一直具有粘性),那么您的应用将不再接收这些广播。相反,请在初始化时使用适当的get()方法获取信息。

2.3 Go 设备上的SYSTEM_ALERT_WINDOW

在Android Q(Go版本)设备上运行的应用不具有SYSTEM_ALERT_WINDOW权限。这是因为绘制叠加层窗口会使用过多的内存,这对低内存Android设备的性能十分有害。

如果Go设备上的应用发送具有ACTION_MANAGE_OVERLAY_PERMISSION操作的Intent,则系统会自动拒绝此请求,并将用户转到设置屏幕,上面会显示不允许授予此权限,原因是它会降低设备的速度。如果Go设备上的应用调用Settings.canDrawOverlays(),则此方法始终返回false。

2.4 关于以旧版Android 系统为目标平台的应用的警告

在Android Q 中,当用户首次运行以Android 6.0(API 级别23)以下的版本为目标平台的任何应用时,Android 平台会向用户发出警告。如果此应用要求用户授予权限,则系统会先向用户提供调整应用权限的机会,然后才会允许此应用首次运行。

由于Google Play的目标API方面的要求,用户只有在运行最近未更新的应用时才会看到这些警告。对于通过其他商店分发的应用,我们也将于2019年引入类似的目标API方面的要求。要详细了解这些要求,请参阅在2019年扩展目标API级别方面的要求。

2.5 应用使用情况

Android Q 引入了与应用使用情况相关的以下行为变更:

  • UsageStats 应用使用情况的改进

当在分屏或画中画模式下使用应用时,Android Q现在能够使用UsageStats准确地跟踪应用使用情况。

此外,Android Q 现在可以跟踪免安装应用的使用情况。

  • 按应用开启灰度模式

Android Q 现在可以将应用设为灰度显示模式。

  • 暂停方面的改进

在Android Q 中,暂停的应用无法再播放音频。

以 Android Q 为目标平台的应用

Android Q 平台做了一些行为变更,这些变更可能会影响您的应用。以下行为变更仅影响以 Android Q 或更高版本为目标平台的应用。如果您的应用将 targetSdkVersion 设为“android-Q”或更高版本,则应修改您的应用以适当地支持这些行为(如果适用)。

此外,请务必查看对在 Android Q 上运行的所有应用都有影响的行为变更列表。

注意:除了此页面所列的变更以外,Android Q 还引入了大量变更和限制以增强用户隐私保护。有关详情,请参阅隐私权页面。

 3.1 非 SDK 接口的受限情况出现变化

为了确保应用稳定性和兼容性,Android 平台开始限制您的应用可在 Android 9(API 级别 28)中使用哪些非 SDK 接口。Android Q 包含更新后的受限非 SDK 接口列表(基于与 Android 开发者之间的协作以及最新的内部测试)。

如果您不打算以 Android Q 为目标平台,那么其中一些变更可能不会立即对您产生影响。虽然您目前可以使用灰名单中的一些非 SDK 接口(取决于您应用的目标 API 级别),但如果您使用任何非 SDK 方法或字段,则应用无法运行的风险终归较高。

如果您不确定自己的应用是否使用了非 SDK 接口,则可以测试该应用进行确认。如果您的应用依赖于非 SDK 接口,则应该开始计划迁移到 SDK 替代方案。如果您无法为应用中的某项功能找到使用非 SDK 接口的替代方案,则应该请求新的公共 API。

有关详情,请参阅非 SDK 接口在 Android Q 中的受限情况出现变化以及对非 SDK 接口的限制。

3.2 共享内存

Ashmem 更改了 /proc//maps 中的 dalvik 映射的格式,这会影响那些直接解析映射文件的应用。如果应用依赖于 dalvik 映射格式,则应用开发者应该在设备上测试新的 /proc//maps 格式并相应地进行解析。

以 Android Q 为目标平台的应用无法再直接使用 ashmem (/dev/ashmem),而必须通过 NDK 的 ASharedMemory 类访问共享内存。此外,应用无法直接对现有 ashmem 文件描述符进行 IOCTL,而必须改为使用 NDK 的 ASharedMemory 类或 Android Java API 创建共享内存区域。这项变更可以提高使用共享内存时的安全性和稳健性,从而提高 Android 的整体性能和安全性。

3.3 Android 运行时只接受系统生成的 OAT 文件

Android 运行时 (ART) 不再从应用进程调用 dex2oat。这项变更意味着 ART 将仅接受系统生成的 OAT 文件。

3.4 在 ART 中强制要求 AOT 正确性

过去,如果编译时和运行时的类路径环境不同,则 Android 运行时 (ART) 执行的预先 (AOT) 编译可能会导致运行时崩溃。Android Q 现在始终要求这些环境上下文相同,因而导致出现了以下行为变更:

  • 自定义类加载器(即应用编写的类加载器,与 dalvik.system 软件包中的类加载器不同)并非由 AOT 编译。这是因为 ART 无法在运行时了解自定义的类查找实现。
  • 辅助 dex 文件(即由主 APK 外的应用手动加载的 dex 文件)现在由 AOT 在后台进行编译,由于首次使用编译可能代价过高,因此会导致在执行前出现意外的延迟。请注意,对于应用,建议您采用拆分方法,并弃用辅助 dex 文件。
  • Android 中的共享库(Android 清单中的 条目)现在具有新的类加载器层次结构。

3.5 针对全屏 Intent 的权限变更

以 Android Q 或更高版本为目标平台并使用涉及全屏 Intent 的通知的应用必须在其应用的清单文件中请求 USE_FULL_SCREEN_INTENT 权限。这是普通权限,因此,系统会自动为请求权限的应用授予此权限。

如果以 Android Q 或更高版本为目标平台的应用试图创建使用全屏 Intent 的通知,而不请求 USE_FULL_SCREEN_INTENT权限,则系统会忽略此全屏 Intent 并输出以下日志消息:Package [pkg]: Use of fullScreenIntent requires the USE_FULL_SCREEN_INTENT permission

你可能感兴趣的:(Android版本更新)