Android 15应用适配指南:所有应用的行为变更

Android系统版本适配,一直是影响App上架Google Play非常重要的因素。

当前Google Play政策规定

  • 新应用和应用更新
    • 必须以 Android 14(API 级别 34)为目标平台,才能提交到Google Play。
  • 现有应用
    • 必须以 Android 13(API 级别 33)或更高版本为目标平台,Google Play才会在新用户的设备搭载的 Android OS 版本高于应用的目标 API 级别时,继续向这些用户提供此类应用。如果应用以 Android 12(API 级别 31)或更低版本为目标平台,则只能在搭载的 Android OS 版本不高于应用的目标 API 级别的设备上使用。

适配不佳的影响

  • 功能异常被拒
    • 若 App 对 Android 版本适配不佳,在某些版本系统上出现如无法安装、安装后无法加载、加载后无响应、频繁崩溃等功能异常情况,根据 Google Play “最基本的功能” 政策,这类应用是不得上架的。
  • 用户体验差被拒
    • 不同的 Android 版本在系统特性、界面风格、操作逻辑等方面可能存在差异。如果 App 没有做好适配,可能在新系统上出现界面显示错乱、操作不流畅等问题,无法提供稳定、响应迅速、引人入胜的用户体验,也会导致上架被拒。

适配建议

  • 及时关注政策更新
    • Google Play 会不定期更新开发者政策,在政策更新后会给予一定的缓冲时间让开发者进行应用适配,但开发者需及时关注政策变化,以便提前规划适配工作。
  • 全面测试
    • 在提交上架前,要在多种不同 Android 版本的设备上进行充分测试,覆盖低版本到高版本,尽可能模拟用户的真实使用场景,检查应用在不同系统版本上的功能完整性、稳定性和兼容性等。
  • 遵循官方文档和指南
    • Google 提供了丰富的官方文档和开发指南,如关于不同 Android 版本的特性介绍、适配建议、API 使用说明等,开发者应仔细阅读并按照要求进行应用开发和适配。

Android 15正式版已经发布半年左右,以Google Play政策惯性看来说,2025年8月份左右,新上架App必须以 Android 15(API 级别 35)为目标平台,才能提交到Google Play。

所以Android 15应用适配,对每个出海人来说都迫在眉睫。

目前市场上只有极少量有关Android 15适配文章,但是此类文章要么不专业,要么不全面,所以本人特开此Android 15应用适配指南系列,以帮助更多开发者适配好Android 15,从而更顺利的上架到Google Play。

Android 15应用适配指南系列共四个系列:

  • 影响Android 15上所有应用的行为变更
  • 影响以Android 15为目标平台应用的行为变更
  • Android 15新功能和API
  • Android 15废弃API

注意:Android 15应用适配指南系列文章,均以小米14手机搭建Android 15为基准适配。

本篇是适配指南系列第一篇,所有应用的行为变更。

一、Android 15简介

Android 15继续致力于构建注重隐私和安全保护的平台,助您提高效率,同时还引入了多项新功能,帮您打造精美应用、卓越的媒体和相机体验,并提供直观的用户体验。在平板电脑和可折叠设备上更能凸显出这些优势。以下是谷歌发布时间表:

二、获取Android 15

1、小米手机升级Android 15

小米14手机所搭载小米澎湃OS,是以Android 15为基础魔改适配的,如暂未拥有上述设备也没关系,我们可以试用云测设备,来支持适配工作。

Android 15云测平台:

https://testit.miui.com。

2、在 Google Pixel 设备上获取 Android 15

开发者持有Pixel系列的机器可以直接ota升级,或者下载镜像升级,具体见链接。

在 Google Pixel 设备上获取 Android 15 Beta 版:

https://developer.android.com/about/versions/15/get?hl=zh-cn#on_pixel。

适用于 Google Pixel 的出厂映像:

https://developer.android.google.cn/about/versions/15/download?hl=zh-cn。

适用于 Google Pixel 的 OTA 映像:

https://developer.android.google.cn/about/versions/15/download-ota?hl=zh-cn。

3、设置Android模拟器

请参考设置 Android 模拟器:

https://developer.android.com/about/versions/15/get?hl=zh-cn#phone-avd。

4、设置 Android 15 SDK

请参考设置 Android 15 SDK:

https://developer.android.com/about/versions/15/setup-sdk?hl=zh-cn。

三、影响Android 15上所有应用的行为变更

1、最低可安装TargetSDK级别为24

1.1、特性背景

Android 15进一步提升了最低可安装TargetSDK级别。

1.2、适用范围

Android 15上的所有App。

1.3、特性内容

Android 15在Android 14所做的更改的基础上进一步加强了安全性。在Android 15中,目标SDK版本低于24的应用程序无法安装。要求应用程序满足现代API级别有助于确保更好的安全性和隐私保护。

恶意软件通常针对较低的API级别,以绕过在较高Android版本中引入的安全性和隐私保护。例如,一些恶意软件应用程序使用目标SDK版本22,以避免受到Android 6.0 Marshmallow(API级别23)在2015年引入的运行时权限模型的限制。这个Android 15的变化使得恶意软件更难避开安全和隐私的改进。

尝试安装一个针对较低API级别的应用程序会导致安装失败,并在Logcat中出现以下消息:

INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 24, but found 7

1.4、应用适配

请确保应用的targetSDK至少为24。

2、软件包停止状态变更

2.1、特性背景

针对应用的PendingIntent,Android 15进一步增强了forcestop机制的作用。

2.2、适用范围

Android 15上的所有App。

2.3、特性内容

当应用在 Android 15 上进入停止状态时,系统会取消这个应用的所有PendingIntent。当用户的操作将应用从停止状态中移除时,系统会向应用传递 ACTION_BOOT_COMPLETED 广播,使应用可以重新注册PendingIntent。具体情况还需参考各家厂商对ACTION_BOOT_COMPLETED 广播的管控。

如果应用进入停止状态,则所有这些待处理的 intent 都会被取消,系统会停用该应用的 widget。这些 widget 呈灰显状态,用户无法与其互动。系统会在用户下次启动应用时重新启用这些 widget,目前的测试结果显示用户点击一次widget也能启用。

Demo演示

我们分别在Android 14和15上执行PendingIntent.getActivity方法,然后使用adb shell dumpsys activity intents命令来dump AMS中mIntentSenderRecords字段的内容并观察。测试代码:

Intent intent = new Intent(mContext, MainActivity.class); PendingIntent pi = PendingIntent.getActivity(mContext, 5, intent, PendingIntent.FLAG_IMMUTABLE);

测试应用的包名为com.example.alarmlab。

Android 14上现象:

在运行测试代码之前,在终端运行adb shell dumpsys activity intents | grep -i "alarmlab",终端没有给出任何输出,说明mIntentSenderRecords中没有com.example.alarmlab创建的PendingIntent。

运行测试代码,运行adb shell dumpsys activity intents | grep -i "alarmlab",终端给出了我们创建的PendingIntent的dump信息,可见这个PendingIntent已被AMS记录。

forcestop掉我们的测试应用com.example.alarmlab,运行adb shell dumpsys activity intents | grep -i "alarmlab",终端给出了我们创建的PendingIntent的dump信息,可见这个PendingIntent在AMS中没有被删除。

Android 15上现象:

在运行测试代码之前,在终端运行adb shell dumpsys activity intents | grep -i "alarmlab",终端没有给出任何输出,说明mIntentSenderRecords中没有com.example.alarmlab创建的PendingIntent。

运行测试代码,运行adb shell dumpsys activity intents | grep -i "alarmlab",终端给出了我们创建的PendingIntent的dump信息,可见这个PendingIntent已被AMS记录。

forcestop掉我们的测试应用com.example.alarmlab,运行adb shell dumpsys activity intents | grep -i "alarmlab",终端没有给出任何输出,说明mIntentSenderRecords中com.example.alarmlab创建的PendingIntent被删除了。

2.4、应用适配

建议应用结合自身对PendingIntent的使用场景,考虑应用被force-stop之后AMS中的PendingIntentRecord会被删除的情况,按需做出调整。可以结合ApplicationStartInfo API中的wasForceStopped()接口做出判断。

3、在达到资源限制时,直接和分流音频播放会使之前打开的直接或分流音轨失效

3.1、特性背景

Android 15之前,如果应用请求使用 direct playback 或者 offload playback 播放模式时,另一个应用正在播放音频并且资源达到限制,则请求的应用无法创建新的 AudioTrack。

3.2、适用范围

Android 15上的所有App。

3.3、特性内容

Android 15中当应用请求使用 direct playback 或者 offload playback 播放模式时资源达到限制后,系统会让已经创建使用的 AudioTrack 对象也失效。

3.4、应用适配

使用 offload playback 播放模式的音频类App需要适配这个特性。

4、支持16KB Page Size

4.1、特性背景

一直以来,Android 仅支持 4 KB 的内存页面大小,针对 Android 设备通常拥有的平均总内存量,系统内存性能进行了优化。从 Android 15 开始,Android 支持配置为使用 16 KB 页面大小的设备(即 16 KB 设备)。

4.2、适用范围

Google计划明年开始把兼容16KB页面作为上架Google Play的必要条件。今年携带Android 15的设备可能尚不会使用16KB页面,但国内厂商最终将跟随Google,因此建议应用适配。

4.3、特性内容

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

性能提升:

  • 在系统面临内存压力时缩短应用启动时间:平均降低了 3.16%
  • 降低应用启动时的功耗:平均降低 4.56%
  • 相机启动速度更快:平均热启动速度加快 4.48%,冷启动速度平均加快 6.60%
  • 缩短了系统启动时间:平均缩短了 1.5%(约 0.8 秒)

兼容性影响:

  • 含有so库的应用需要重新构建支持 16KB 设备的应用,否则在16KB设备上很可能会crash。

4.4、应用适配

建议应用适配该特性。检查应用是否受到影响:

  • 含有so库的应用都会受到影响。
  • 如果不确定应用是否含有so库,可以使用Apk Analyzer分析。

构建支持 16KB 设备的应用:

  • 升级到 AGP 版本 8.3 或更高版本,并使用未压缩的共享库,或在AGP 版本 8.2 或更低版本上使用压缩共享库。
  • 使用 16 KB ELF 对齐编译应用。
  • 检查引用特定页面大小的代码。

在 16 KB 的环境中测试您的应用:

使用基于 16 KB 的 Android 15 系统映像设置 Android 模拟器。

适配细节可参考官方文档:

https://developer.android.com/guide/practices/page-sizes?hl=zh-cn。

5、默认开启预测性返回动画

5.1、特性背景

已经迭代多个版本的预测性返回动画在Android 15上全面开放。

5.2、适用范围

Android 15上的所有App。

5.3、特性内容

从 Android 15 开始,移除了预测性返回动画的开发者选项。现在,对于已完全或在 activity 级别选择启用预测性返回手势的应用,系统现在会显示“返回主屏幕”“跨任务”和“跨 activity”等系统动画。

5.4、应用适配

现在,对于已完全或在 activity 级别选择启用预测性返回手势的应用,系统现在会显示“返回主屏幕”“跨任务”和“跨 activity”等系统动画。如果应用受到影响,请执行以下操作:

  • 确保应用已正确迁移,以使用预测性返回手势。
  • 确保 fragment 转换支持预测性返回导航。
  • 停止使用动画和框架转换,并改用 Animator 和 AndroidX 转换。
  • 从FragmentManager 不知道的返回堆栈中迁出。请改用由 FragmentManager 或 Navigation 组件管理的返回堆栈。

如果想要从零开始适配预测性返回动画,请参考官方文档:

https://developer.android.google.cn/guide/navigation/custom-back/predictive-back-gesture?hl=zh-cn。

四、结语

以上就是影响Android 15上所有应用的行为变更,Android 15应用适配指南系列下一篇,将介绍影响以Android 15为目标平台应用的行为变更,敬请期待。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/1793.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java Agent(三)、ASM 操作字节码入门

目录 1、前言 2、什么是ASM? 2.1、工作流程 2.2、ASM集合核心API 2.1.1、ClassReader 2.1.2、ClassWriter 2.1.3、 ClassVisitor 2.1.4、MethodVisitor 2.1.5、 FieldVisitor 2.1.6、Opcodes 3、简单示例 3.1、maven依赖 3.2、hello world 3.3、执行结…

MySQL数据库(SQL分类)

SQL分类 分类全称解释DDLData Definition Language数据定义语言,用来定义数据库对象(数据库,表,字段)DMLData Manipulation Language数据操作语言,用来对数据库表中的数据进行增删改DQLData Query Languag…

[微服务]redis数据结构

介绍 我们常用的Redis数据类型有5种,分别是: StringListSetSortedSetHash 还有一些高级数据类型,比如Bitmap、HyperLogLog、GEO等,其底层都是基于上述5种基本数据类型。因此在Redis的源码中,其实只有5种数据类型。 …

PyQt5

PyQt5 环境搭建安装 pycharm安装 PyQt5 打包成exe安装 pyinstaller打包 报错进程已结束,退出代码-1073740791(0xC0000409) 环境搭建 安装 pycharm 安装 PyQt5 pip install pyqt5 -i https://pypi.tuna.tsinghua.edu.cn/simplepip install …

高级运维:shell练习2

1、需求:判断192.168.1.0/24网络中,当前在线的ip有哪些,并编写脚本打印出来。 vim check.sh #!/bin/bash# 定义网络前缀 network_prefix"192.168.1"# 循环遍历1-254的IP for i in {1..254}; do# 构造完整的IP地址ip"$network_…

Grails应用http.server.requests指标数据采集问题排查及解决

问题 遇到的问题:同一个应用,Spring Boot(Java)和Grails(Groovy)混合编程,常规的Spring Controller,可通过Micromete Pushgateway, 采集到http.server.requests指标数据,注意下面的指标名称是点号&#…

pycharm+pyside6+desinger实现查询汉字笔顺GIF动图

一、引言 这学期儿子语文期末考试有一道这样的题目: 这道题答案是B,儿子做错了选了C。我告诉他“车字旁”和“车”的笔顺是不一样的,因为二者有一个笔画是不一样的,“车字旁”下边那笔是“提”,而“车”字是“横”&am…

【2025 Rust学习 --- 17 文本和格式化 】

字符串与文本 Rust 的主要文本类型 String、str 和 char 内容概括: Unicode 背景知识?单个 Unicode 码点的 char?String 类型和 str 类型都是表示拥有和借用的 Unicode 字符序列。Rust 的字符串格式化工具,比如 println! 宏和 …

EasyCVR视频汇聚平台如何配置webrtc播放地址?

EasyCVR安防监控视频系统采用先进的网络传输技术,支持高清视频的接入和传输,能够满足大规模、高并发的远程监控需求。平台支持多协议接入,能将接入到视频流转码为多格式进行分发,包括RTMP、RTSP、HTTP-FLV、WebSocket-FLV、HLS、W…

rknn环境搭建之docker篇

目录 1. rknn简介2. 环境搭建2.1 下载 RKNN-Toolkit2 仓库2.2 下载 RKNN Model Zoo 仓库2.3 下载交叉编译器2.4 下载Docker镜像2.5 下载ndk2.5 加载docker镜像2.6 docker run 命令创建并运行 RKNN Toolkit2 容器2.7 安装cmake 3. 模型转换3.1 下载模型3.2 模型转换 4. 编译cdem…

【MySQL实战】mysql_exporter+Prometheus+Grafana

要在Prometheus和Grafana中监控MySQL数据库,如下图: 可以使用mysql_exporter。 以下是一些步骤来设置和配置这个监控环境: 1. 安装和配置Prometheus: - 下载和安装Prometheus。 - 在prometheus.yml中配置MySQL通过添加以下内…

W25Q64-FLASH

前言: 1.理解flash的组织结构,block块, sector扇区,page页,之间的结构怎么组织安排划分的。 2.理解flash的特性,只能从1写为0,不能从0写为1,这就是为什么写之前要先擦除操作。(这个特性一直困扰…

FPGA EDA软件的位流验证

位流验证,对于芯片研发是一个非常重要的测试手段,对于纯软件开发人员,最难理解的就是位流验证。在FPGA芯片研发中,位流验证是在做什么,在哪些阶段需要做位流验证,如何做?都是问题。 我们先整体的…

Docker官网安装

1.官网 官方文档 https://www.docker.com/ Docker Hub官网 镜像 https://hub.docker.com/ 2.Docker 的三要素 1、镜像 2、容器 3、仓库 小总结 3.Docker 平台架构图 (架构版本) 4.安装Docker CentOS | Docker Docs 1.确定你是CentOS7及以上版本 …

互斥与同步

1:思维导图 2:有一个隧道,长1000m,有一辆高铁,每秒100米,有一辆快车,每秒50m 要求模拟这两列火车通过隧道的场景。 3:有一个隧道,长1000m,有一辆高铁&#…

LabVIEW智能水肥一体灌溉控制系统

本文详细介绍了一种基于LabVIEW的智能水肥一体灌溉控制系统的设计与实现。该系统采用模糊控制策略,能够自动调节土壤湿度和肥液浓度,满足不同作物在不同生长阶段的需求,有效提高水肥利用效率,对现代精准农业具有重要的实践和推广价…

迅为RK3568开发板篇OpenHarmony配置HDF驱动控制LED-配置创建私有配置文件

接 下 来 新 建 vendor/hihope/rk3568/hdf_config/khdf/topeet/topeet_config.hcs 文 件 ,topeet_config.hcs 为驱动私有配置文件,用来填写一些驱动的默认配置信息。HDF 框架在加载驱动时,会获取相应的配置信息并将其保存在 HdfDeviceObject …

鸿蒙面试 2025-01-10

写了鉴权工具,你在项目中申请了那些权限?(常用权限) 位置权限 : ohos.permission.LOCATION_IN_BACKGROUND:允许应用在后台访问位置信息。 ohos.permission.LOCATION:允许应用访问精确的位置信息…

Pycharm 使用教程

一、基本配置 1. 切换Python解释器 pycharm切换解释器版本 2. pycharm虚拟环境配置 虚拟环境的目的:创建适用于该项目的环境,与系统环境隔离,防止污染系统环境(包括需要的库)虚拟环境配置存放在项目根目录下的 ven…

C++中的STL

STL(标准模板库)在广义上分为:容器,算法,迭代器 容器和算法之间通过迭代器进行无缝衔接 STL大体上分为六大组件:分别为容器,算法,迭代器,仿函数,适配器,空间…