Android15快速适配指南

面向所有App的变更

无论你是否调整你的应用targetSdkVersion到Android15,以下是都会在android15手机上生效的改动,需要评估你的应用是否有使用到这些API,并评估改动是否会影响到你的应用行为。

1. 当达到资源限制时,直连和卸载音频播放会使以前打开的直接或卸载音轨失效

Android 15 对所有应用的相机和媒体行为进行了以下更改。

现在,当达到资源限制时,直连和卸载音频播放会使以前打开的直连或卸载音轨失效。

在 Android 15 之前,如果某个应用请求直连或卸载音频播放,而另一个应用正在播放音频,并且达到资源限制,则该应用将无法打开新的 AudioTrack

从 Android 15 开始,当应用请求直连或卸载播放并且达到资源限制时,系统会使当前打开 AudioTrack 的任何对象失效,从而阻止满足新的曲目请求。

(通常打开直连和卸载音轨以播放压缩的音频格式。播放直连音频的常见用例包括通过 HDMI 将编码音频流式传输到电视。卸载轨道通常用于在具有硬件 DSP 加速的移动设备上播放压缩音频。)

适配方案

  • 如果你的应用涉及到音频播放或相机功能,你需要注意 Android 15 中对于直接和卸载音频播放的变化,确保你的应用能够正确处理这些情况。

2. 对包停止状态的更改

在 Android 15 中,应用只能通过直接或间接的用户操作从 FLAG_STOPPED 状态中移除。除了现有限制外,当应用在 Android 15 上进入停止状态时,系统还会取消所有待处理的意向。

软件包 FLAG_STOPPED 状态(用户可以通过长按应用图标并选择“强制停止”来参与 AOSP 构建)的意图始终是让应用保持此状态,直到用户通过直接启动应用或间接与应用交互(通过共享表或小组件, 选择应用程序作为动态壁纸等)。在 Android 15 中,我们将更新系统的行为,使其与此预期行为保持一致。只能通过直接或间接用户操作将应用从停止状态中删除。

为了支持预期行为,除了现有限制外,当应用在 Android 15 上进入停止状态时,系统还将取消所有待处理的意向。当用户的操作将应用从停止状态中删除时, ACTION_BOOT_COMPLETED 广播将传递到应用,从而提供重新注册任何挂起意向的机会。

你可以调用新 ApplicationStartInfo.wasForceStopped() 方法确认应用是否已进入停止状态。

适配方案

  • 确保你的应用在进入停止状态时能够正确处理。如果你的应用依赖于 pending intents,那么当应用进入停止状态时,这些 pending intents 将被取消,你需要确保你的应用在重新启动时能够重新注册这些 pending intents。

3. 支持 16 KB 页面大小

从历史上看,Android 仅支持 4 KB 内存页面大小,这优化了 Android 设备通常具有的平均总内存量的系统内存性能。从 Android 15 开始,Android 支持配置为使用网页大小为 16 KB(16 KB 设备)的设备。如果你的应用直接或间接通过 SDK 使用任何 NDK 库,则需要重新构建你的应用,使其在这些 16 KB 的设备上运行。

页面大小较大的设备可以提高内存密集型工作负载的性能。随着设备制造商继续构建具有更大物理内存 (RAM) 的设备,其中许多设备将采用 16 KB(最终更大)的页面大小来优化设备的性能。添加对 16 KB 页面大小设备的支持,使应用能够在这些设备上运行,并帮助应用从相关的性能改进中受益。我们计划明年将应用上传到 Google Play 商店时需要 16 KB 的页面兼容性。

随着设备制造商继续构建具有大量物理内存 (RAM) 的设备,其中许多设备可能会配置为 16 KB(最终更大)的页面大小,以优化设备的性能。添加对 16 KB 设备的支持使应用能够在这些设备上运行,并帮助应用从相关的性能改进中受益。

为了帮助您添加对应用的支持,我们提供了有关如何检查应用是否受到影响、如何重新构建应用(如果适用)以及如何使用模拟器(包括 Android 模拟器的 Android 15 系统映像)在 16 KB 环境中测试应用的指导。

如果你的应用使用任何本机代码,则应重新生成支持 16 KB 设备的应用。如果您不确定您的应用是否使用原生代码,可以使用 APK 分析器来确定是否存在任何原生代码。

如果您的应用仅使用 Java 编程语言或 Kotlin 编写的代码(包括所有库或 SDK),则您的应用已支持 16 KB 设备。不过,我们建议您在 16 KB 的环境中测试应用,以验证应用行为中是否没有意外回归。

适配方案

  • 如果你的应用使用了任何 NDK 库,你需要重新构建你的应用以使其在 16KB 页面大小的设备上运行。如果你不确定你的应用是否使用了 NDK 库,你可以使用 APK Analyzer 来检查是否存在 native code。

4. 某些应用需要进行更改才能支持私密空间

私密空间是 Android 15 中的一项新功能,它允许用户在他们的设备上创建一个单独的空间,在额外的身份验证层下,他们可以让敏感应用远离窥探。由于私密空间中的应用可见性受限,因此某些类型的应用需要执行其他步骤才能查看用户私密空间中的应用并与之交互。

由于私有空间中的应用保存在单独的用户配置文件中(类似于工作配置文件),因此应用不应假定其应用的任何已安装副本(不在主配置文件中)都在工作配置文件中。如果你的应用具有与做出此假设的工作配置文件应用相关的逻辑,则需要调整此逻辑。

私有空间包括一个“安装应用程序”按钮,该按钮会启动将应用程序安装到用户私有空间的隐式意图。为了让应用接收此隐式意向, <intent-filter> 请在应用的清单文件中声明 <category> CATEGORY_APP_MARKET 。

适配方案

  • 如果你的应用需要与私人空间中的应用进行交互,你需要确保你的应用能够正确处理私人空间的相关操作。例如,如果你的应用是一个启动器应用(Launcher app),你需要将你的应用指定为默认的启动器应用,并声明 ACCESS_HIDDEN_PROFILES 权限。具体地,你需要为私人空间中的应用创建一个单独的启动器容器,并确保用户能够隐藏和显示私人空间容器,并在锁定设备时锁定私人空间容器。

5. 将最低目标 SDK 版本从 23 增加到 24

Android 15 以 Android 14 中所做的更改为基础,并进一步扩展了此安全性。在 Android 15 中,无法安装 targetSdkVersion 低于 24 的应用。要求应用满足现代 API 级别有助于确保更好的安全性和隐私性。

恶意软件通常以较低的 API 级别为目标,以绕过更高 Android 版本中引入的安全和隐私保护。例如,某些恶意软件应用使用 22 targetSdkVersion 来避免受 Android 6.0 Marshmallow(API 级别 23)在 2015 年引入的运行时权限模型的约束。Android 15 的这一变化使恶意软件更难避免安全和隐私改进。尝试安装面向较低 API 级别的应用会导致安装失败,并在 Logcat 中显示如下消息:

go
 代码解读
复制代码
INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 24, but found 7

在升级到 Android 15 的设备上,所有 targetSdkVersion 低于 24 的应用仍会安装。

适配方案

  • 如果你的应用的目标 SDK 版本低于 24,你需要将其提升至 24 或更高版本。这可以通过修改应用的 build.gradle 文件中的 targetSdkVersion 来实现。

6. 为选择加入的应用启用预测性后退动画

从 Android 15 开始,预测性后退动画的开发者选项已被移除。系统动画(如返回主页、跨任务和跨活动)现在显示在已完全选择或在活动级别选择加入预测后退手势的应用。如果您的应用受到影响,请执行以下操作:

  • 确保您的应用已正确迁移,以使用预测性后退手势。
  • 确保您的片段过渡适用于预测性后退导航。
  • 从动画和框架过渡中迁移出来,改用 animator 和 androidx 过渡。
  • 从不知道的后备堆栈 FragmentManager 迁移。请改用由 FragmentManager Navigation 组件管理或由 Navigation 组件管理的后退堆栈。

适配方案

  • 如果你的应用使用了预测性返回动画,确保你的应用已经适配了 Android 15 中的相关变化。

7. 使用 Spatializer 而不是 Virtualizer

该 Spatializer 类首次添加到 Android 12(API 级别 32)中,允许应用查询设备上声音空间化的功能和行为。在 Android 15 中,我们将弃用该 Virtualizer 类。改用来 AudioAttributes.Builder.setSpatializationBehavior 描述在支持空间化时希望如何播放内容。

AndroidX media3 ExoPlayer 1.0 默认为多声道音频启用空间音频(如果设备支持)。有关详细信息,请参阅这篇最近的博客文章空间音频文档,包括用于控制该功能的 API。

适配方案

  • 针对 Android 15 的变化,你的应用需要停止使用 Virtualizer 类,并改用 Spatializer 类来处理音频空间化功能。

作者:williamwue
链接:https://juejin.cn/post/7372396200861761586
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值