Android 11 行为变更:以 Android 11 为目标平台的应用

与早期版本一样,Android 11 包含一些行为变更,这些变更可能会影响您的应用。以下行为变更仅影响以 Android 11 或更高版本为目标平台的应用。如果您的应用将 targetSdkVersion 设置为“android-R”,您应酌情修改自己的应用,以便正确支持这些行为。

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

隐私权

Android 11 引入了大量变更和限制,目的是加强用户隐私保护。如需了解详情,请参阅隐私权页面。

压缩的资源文件

如果以 Android 11(API 级别 30)或更高版本为目标平台的应用包含压缩的 resources.arsc 文件或者如果此文件未按 4 字节边界对齐,应用将无法安装。如果存在其中任意一种情况,系统将无法对此文件进行内存映射。无法进行内存映射的资源表必须读入 RAM 中的缓冲区,从而给系统造成不必要的内存压力,并大大增加设备的 RAM 使用量。

设备到设备文件传输

如果您的应用以 Android 11 为目标平台,您将无法再使用 allowBackup 属性停用应用文件的设备到设备迁移。系统会自动启用此功能。

但是,即使您的应用以 Android 11 为目标平台,您也可以通过将 allowBackup 属性设置为 false 来停用云端应用文件的云端备份和恢复。

网络连接

高性能 VPN

以 API 级别 30 及更高级别为目标平台的应用或在搭载 API 级别 29 及更高级别的设备上运行的应用可以将 IKEv2/IPsec 应用于 VPN(包括用户配置的 VPN 和基于应用的 VPN)。

VPN 本身在操作系统上运行,从而简化了在应用中建立 IKEv2/IPset VPN 连接所需的代码。

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

以 Android 11 为目标平台的应用现在必须具备 Manifest.permission.WRITE_APN_SETTINGS 特权,才能读取或访问电话提供程序 APN 数据库。如果在不具备此权限的情况下尝试访问 APN 数据库,会生成安全异常。

每个进程的网络访问控制

从 Android 11 开始,处理敏感用户数据的应用可以向每个进程授予网络访问权限。通过明确指定允许哪些进程访问网络,您可以隔离不需要上传数据的所有代码。

虽然不能保证防止您的应用意外上传数据,但该功能可让您降低应用中的错误导致数据泄露的几率。

下面显示了使用这项新功能的清单文件的示例:

<processes>
    <process />
    <deny-permission android:name="android.permission.INTERNET" />
    <process android:process=":withoutnet1" />
    <process android:process="com.android.cts.useprocess.withnet1">
        <allow-permission android:name="android.permission.INTERNET" />
    </process>
    <allow-permission android:name="android.permission.INTERNET" />
    <process android:process=":withoutnet2">
        <deny-permission android:name="android.permission.INTERNET" />
    </process>
    <process android:process="com.android.cts.useprocess.withnet2" />
</processes>

 

允许安装的多种 Passpoint 配置具有相同的 FQDN

从 Android 11 开始,您可以使用 PasspointConfiguration.getUniqueId() 获取 PasspointConfiguration对象的专有标识符,这样可让使用应用的用户安装多个具有相同完全限定域名 (FQDN) 的配置文件。

当运营商在其网络上部署多个移动设备国家/地区代码 (MCC) 和移动网络代码 (MNC) 组合,但只有一个 FQDN 时,此功能非常有用。在 Android 11 及更高版本中,当用户安装具有 MCC 或 MNC 的 SIM 卡时,可以安装多个具有相同 FQDN(它将与家庭网络服务提供商提供的网络匹配)的配置文件。

注意:各配置由唯一键进行标识,该键取决于配置的内容。如需更新现有配置文件,您必须使用 WifiManager.removePasspointConfiguration() 将其移除。如果不移除现有配置,会导致添加一个包含两种配置的新配置文件。

安全

随机分配 MAC 地址

在以 Android 10(API 级别 29)及更低版本为目标平台的应用中,MAC 地址的随机分配是基于每个 SSID 进行的,因为 Passpoint 可以连接到同一配置文件的不同 SSID。而在以 Android 11(API 级别 30)及更高版本为目标平台的应用中,Passpoint 网络的 MAC 地址随机分配将更改为针对每个完全限定域名 (FQDN) 进行分配。

对于以 API 级别 30 及更高级别为目标平台的应用,非特权应用将无法访问设备的 MAC 地址;只有具有 IP 地址的网络接口可见。这会影响 getifaddrs() 和 NetworkInterface.getHardwareAddress() 方法,以及 RTM_GETLINK netlink 消息的发送。

下面列出了此变更会以哪些方式影响应用:

  • NetworkInterface.getHardwareAddress() 会针对每个接口返回 null。
  • 应用无法对 NETLINK_ROUTE 套接字使用 bind() 函数。
  • ip 命令不会返回有关接口的信息。

这些变更强制执行不要使用 MAC 地址中提供的指导。

请注意,大多数开发者应使用级别较高的 ConnectivityManager API 而不是级别较低的 NetworkInterface/getifaddrs() API。

堆指针标记

 

现在,堆指针在最高有效字节 (MSB) 中有一个非零标记。错误地使用指针的应用(包括修改 MSB 的应用)现在会崩溃或遇到其他问题。这是支持未来启用了 ARM 内存标记扩展 (MTE) 的硬件所必需的变更。如需了解详情,请参阅已加标记的指针

如需停用此功能,请参阅 allowNativeHeapPointerTagging 清单文档。

自定义消息框视图被屏蔽

从 Android 11 开始,已弃用自定义消息框视图。如果您的应用以 Android 11 为目标平台,包含自定义视图的消息框在从后台发布时会被屏蔽。如果您的应用以较低的 Android 版本为目标平台,自定义消息框视图可以继续正常工作,但不建议使用它们。

建议您尽可能改用信息提示控件。如果您的应用的用例阻止您使用信息提示控件(例如,当您需要向用户发送消息而您的应用在后台时),您仍然可以使用文本消息框,因为它们不受这项新行为变更的限制。

如需详细了解这些变更,请参阅 Android 11 中消息框的更新

现在需要 APK 签名方案 v2

对于以 Android 11(API 级别 30)为目标平台,且目前仅使用 APK 签名方案 v1 签名的应用,现在还必须使用 APK 签名方案 v2 或更高版本进行签名。用户无法在搭载 Android 11 的设备上安装或更新仅通过 APK 签名方案 v1 签名的应用。

如需验证您的应用是否已使用 APK 签名方案 v2 或更高版本进行签名,您可以在命令行中使用 Android Studio 或 apksigner 工具。

注意:为支持运行旧版 Android 的设备,除了使用 APK 签名方案 v2 或更高版本为您的 APK 签名之外,您还应继续使用 APK 签名方案 v1 进行签名。

Firebase

Firebase JobDispatcher 和 GCMNetworkManager

如果您的应用以 API 级别 30 或更高级别为目标平台,在搭载 Android 6.0(API 级别 23)或更高版本的设备上会停用 Firebase JobDispatcher 和 GcmNetworkManager API 调用。如需了解迁移,请参阅从 Firebase JobDispatcher 迁移到 WorkManager 和从 GCMNetworkManager 迁移到 WorkManager

隐式媒体捕获 intent 和位置元数据

从 Android 11 开始,只有预装的系统相机应用可以响应以下 intent 操作:

如果有多个预装的系统相机应用可用,系统会显示一个对话框,供用户选择应用。如果您希望应用使用特定的第三方相机应用来代表其捕获图片或视频,则可以通过为该 intent 设置软件包名称或组件来明确显示这些 intent。

如需包含位置元数据,除了声明 ACCESS_COARSE_LOCATION 或 ACCESS_FINE_LOCATION 运行时权限之外,您的应用还必须声明 ACCESS_MEDIA_LOCATION

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值