Android 15 正式发布到 AOSP ,来了解下新特性和适配需求

其实在年初的时候就整理过《2024 ,Android 15 预览版来了》 和《提前窥探 Android 15 的新功能与适配》的相关内容,而随着时间进度推进,近日谷歌也正式发布了 Android 15 的正式版,虽然没什么「大亮点」,但是作为开发者,还是需要关注下有什么新特性和需要适配的地方。

首先有一点大家可以放心,这里的 16 KB 页面大小支持将作为开发人员选项在选定设备上提供,简单来说,也就是 Android 15 暂时不会强制适配,开不开心?又可以苟一年了。

更多 16K 详细可见:

  • 《Android 15 适配之16K Page Size》

  • 《Android 15 之如何快速适配 16K Page Size》

  • 《Android 15 上适配 16K Page Size 的填坑思路》

新特性

本次除了 16K Page Size 的特性之外,其实并没有比较大的变动,都是一些细节和小功能上的支持

开发体验

  • 新增 ApplicationStartInfo API 可以用于了解应用的启动情况,其中包括启动原因、启动阶段花费的时间、启动温度等

  • Jetpack 中的 Profiling 可用于简化 Android 15 中 ProfilingManager API 的使用,帮助获取堆配置文件、堆转储、堆栈样本、系统跟踪记录 等数据监测

  • StorageStats.getAppBytesByDataType(type) API 支持感知 App 使用存储空间情况,包括 apk 文件拆分、提前 (AOT) 和加速相关代码、dex 元数据、库和引导配置文件

  • PdfRenderer API 支持渲染受密码保护的文件、批注、表单编辑、搜索和选择,支持线性化 PDF 优化,以加快本地 PDF 查看速度并减少资源使用

  • 新添加的 OpenJDK API 和新支持

  • Android 15 添加了新的 Canvas 绘制功能,包括 Matrix44(用于帮助在 3D 中操作 Canvas)和 clipShader / clipOutShader(通过与当前着色器差异相交来启用复杂形状)

  • 通过显示个性化预览让 Widget 脱颖而出,针对 Android 15 的应用可以向 Widget Picker 提供 Remote Views,从而让它们可以更新 picker 中的内容,让用户将看到他们更想看到的内容:

多语言和排版

  • Android 15 可以直接通过可变字体创建 FontFamily 实例,不再需要使用 buildVariableFamily API 指定 wghtital 轴,文本渲染器会自动调整 WGHTItal 轴的值
  • 中文、日文和韩文 (CJK) 语言的字体文件 NotoSansCJK 现在是一种可变字体
  • Android 15 中的 JUSTIFICATION_MODE_INTER_CHARACTER 改进了使用空格进行分割的语言(例如中文和日语)的对齐方式

多媒体

  • Android 15 支持使用 setDesiredHdrHeadroom 控制 HDR 的 headroom,以防止 SDR 内容表现过于褪色
  • Android 15 支持智能调整具有包含响度元数据的 AAC 音频内容的音频响度和动态范围压缩级别,可关联 AudioTrack 中的音频会话 ID 实例化 LoudnessCodecController
  • Android 15 中的 Low Light Boost 可调整低光条件下预览流的曝光,从而启用增强的图像预览、在低光下扫描二维码等
  • Android 15 中的高级闪光强度调整可以在拍摄图像时精确控制 SINGLE 和 TORCH 模式下的闪光强度
  • Android 15 可通用 MIDI 数据包支持扩展到虚拟 MIDI 应用,使合成应用能够将合成器应用作为虚拟 MIDI 2.0 设备进行控制,类似使用 USB MIDI 2.0 设备一样

交互

  • 用户可以保存自己喜欢的分屏应用组合以便快速访问,并将任务栏固定在屏幕上以在应用之间快速切换,从而在 Android 15 上更好地进行大屏多任务处理,这里需要确保 App 具有自适应支持 。

  • Android 15 默认在以 SDK 35 为目标平台时会以 edge-to-edge 的方式显示应用,另外系统栏将是透明或半透明

  • Android 15 使 TalkBack 能够支持通过 USB 和安全蓝牙使用 HID 标准的盲文显示器

  • 在支持的 Android 15 设备上,NfcAdapter 允许应用请求 observe mode(setObserveModeEnabled) 并注册过滤器,从而在大多数情况下在多个支持 NFC 的应用之间实现一键式交易

  • 应用可以通过声明 COMPAT_SMALL_COVER_SCREEN_OPT_IN 来允许 Application 或 Activity 显示在受支持的可折叠设备的小封面屏幕上

  • Android 15 极大地增强了 AutomaticZenRules,主要是增加了自定义勿扰模式的规则支持

  • Android 15 提供对 App 的归档和取消归档的系统支持,归档会移除 APK 和任何缓存文件,但会保留用户数据,并可以通过 LauncherApps API 将应用恢复为可显示应用,并且原始安装程序可以在请求[取消归档](https://developer.android.com/reference/android/content/pm/PackageInstaller#requestUnarchive(java.lang.String, android.content.IntentSender))时恢复它。

  • 为了提高电池续航时间和多任务处理性能,Android 15 上的前台服务发生了变化,包括数据同步超时、新的媒体处理前台服务类型,以及 SYSTEM_ALERT_WINDOW 和 BOOT_COMPLETED 启动前台服务时增加限制。

  • 从 Android 15 开始,16 KB 页面大小支持将作为开发人员选项在选定设备上提供,当 Android 使用这种更大的页面大小时,在使用额外 ~9% 内存的同时整体性能提高了 5-10%

隐私安全

  • Android 15 中的私人空间允许用户在他们的设备上创建一个单独的空间,在额外的身份验证层下,可以在其中防止敏感应用被窥探
  • Android 15 支持通过点击一次即可使用密钥登录,并支持将保存的凭据自动填充到相关输入字段
  • Android 15 增加了[对应用](https://developer.android.com/reference/android/view/WindowManager#addScreenRecordingCallback(java.util.concurrent.Executor, java.util.function.Consumer))的监管支持,通过检测它们是否正在读取敏感信息,系统可以在应用执行敏感操作时通知用户他们正在被记录
  • Android 15 添加了 allowCrossUidActivitySwitchFromBelow 属性,该属性可阻止与堆栈上排名靠前 UID 不匹配的应用启动 Activity,以帮助防止 task hijacking attacks
  • 在 Android 15 中,PendingIntent 创建者默认阻止后台活动启动。

适配

其实在之前的《提前窥探 Android 15 的新功能与适配》我们就聊过适配支持,例如:

  • 在 Android 15 中,Predictive Back 将不再是开发者选项,对于已正确迁移的应用,将出现返回主页、跨任务和跨活动等系统动画。

  • Android 15 添加了一个标志,阻止与堆栈上顶部 UID 不匹配的应用启动 activity,可以通过在 AndroidManifest.xml 文件中配置 allowCrossUidActivitySwitchFromBelow 属性,指定任务的 activity 是否可以启动其他 activity 或结束 task :

    <application android:allowCrossUidActivitySwitchFromBelow="false" >
    

    一旦应用全局配置了新的保护模式,一些特殊的 activity 也使用下面这个 API 来选择退出:

    public void onCreate(Bundle bundle) {
    super.onCreate(bundle);
    setAllowCrossUidActivitySwitchFromBelow(true);
    ...
    }
    
  • Android 15 引入了新的安全措施,使 intents 更安全和强大,这些更改旨在防止恶意应用利用潜在的漏洞,Android 15 中对 Intent 安全性的主要改进有两个:

    • 匹配目标 intent-filters:针对特定组件的 intent 必须准确匹配目标的 intent-filters 规范,如果发送 intent 来启动另一个应用的 activity ,则目标 intent 组件需要与接收 activity 声明的 intent-filters 保持一致。
    • intent 必须有 action:没有 action 的 intent 将不再匹配任何 intent-filters ,这意味着用于启动 activity 或 service 的 intent 必须具有明确定义的 action
  • 当 App 得到部分媒体权限时,应用可以仅突出显示最近选择的照片和视频,这可以改善频繁请求访问照片和视频的用户体验,详细可以通过 ContentResolver 在 MediaStore 启用时查询 QUERY_ARG_LATEST_SELECTION_ONLY 参数来实现

这里再更具收集到的信息,整理补充额外的一些适配要求,例如:

AndroidManifest Tag 限制

Android 15 对 AndroidManifest Tag 数量/attr 长度/属性值限制特殊字符做了限制:

  • 限制AndroidManifest.xml字段的 tag 数量,比如在 Application 下只能有不超过3000个的 Activity :

  • 限制了 attr 相关 string 的长度还有限制特殊字符

对于不符合要求会导致 Apk 安装失败并提示 SecurityException :

前台服务

就像前面所说的,前台服务一直是比较损耗电池寿命的操作,Android 15 上的前台服务发生了变化,包括数据同步超时、新的媒体处理前台服务类型,以及 SYSTEM_ALERT_WINDOW 和 BOOT_COMPLETED 启动前台服务时增加限制。

例如在 Target SDK 35+ 应用,BOOT_COMPLETED 接收方不允许启动以下类型的前台服务:

  • dataSync
  • camera
  • mediaPlayback
  • phoneCall
  • mediaProjection
  • microphone microphone(Android 14 就有了)

Target 35+ 的 App 如果在 BOOT_COMPLETED 接收者尝试启动任何这些类型的前台服务,系统将抛出ForegroundServiceStartNotAllowedException

dataSync 和 mediaProcessing 的前台服务类型现在有大约 6 小时的超时时间。

另外,如果前台服务依赖于 SYSTEM_ALERT_WINDOW 权限来豁免后台启动,则现在在面向 Android 15 时需要有可见的叠加层。

Window Insets

edge-to-edge enforcement 的强制执行之外 ,Configuration.screenWidthDp 和screenHeightDp 中针对 SDK 35+ 时,还包括系统栏的深度,虽然这些值还是可以用于资源选择(例如 res/layout-h500dp),但不鼓励使用它们进行布局计算:

E2E 对应用 UI 的影响:

对于全面屏手势导航条:

  • 默认透明
  • 应用布局在手势导航条后面,除非应用适配手势导航条insets
  • setNavigationBarColor 和 R.attr#navigationBarColor 弃用
  • setNavigationBarContrastEnforced 和 R.attr#navigationBarContrastEnforced API对手势导航条无影响

对于三按键导航栏:

  • 默认情况下,不透明度(Opacity)设置为80%,颜色和窗口背景色匹配
  • 应用布局在导航栏后面,除非应用适配三键导航栏的 insets;
  • setNavigationBarColor 和 R.attr#navigationBarColor 默认设置为与窗口背景色匹配,随意 API 已经废弃,但是仍然可以影响三件导航
  • setNavigationBarContrastEnforced 和 R.attr#navigationBarContrastEnforced 默认设置为 true,添加 80% 的不透明背景

对于状态栏:

  • 默认透明
  • 应用布局在状态栏后面,除非应用适配状态栏 insets;
  • setStatusBarColor 和 R.attr#statusBarColor 弃用,对 Android 15 没有影响
  • setStatusBarContrastEnforced 和 R.attr#statusBarContrastEnforced API已废弃,但对 Android 15 上设置仍然有效

对于挖孔栏:

  • layoutInDisplayCutoutMode 在非浮窗口的场景下, 系统会将 LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT 解释为 LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS ,必须配置 LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS,否则应用会出现 IllegalArgumentException,“ALWAYS” 是唯一允许的选项,这样用户就不会在横向模式下看到因显示切口而导致的黑条,从而出现边到边的情况。
  • CutoutMode 还是以前的 DisplayCutout

最后

目前看来 Android 15 上需要适配的难度不高,毕竟 16K Page Size 应该是明年的事情,而且按照目前情况猜测,更多也支持明年 Google Play 上会开始要求,国内估计还会继续延迟,真正需要在国内启用 16K Page Size 也许会更晚。

所以,勇敢的少年,是时候开始吃螃蟹了。

参考资料:

  • https://android-developers.googleblog.com/2024/09/android-15-is-released-to-aosp.html?utm_source=email&utm_medium=newsletter&utm_campaign=android-September24
  • https://open.oppomobile.com/new/developmentDoc/info?id=13047

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

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

相关文章

11.2.软件系统分析与设计-数据库分析与设计

数据库分析与设计 数据库分析与设计的步骤 ER图和关系模型

SealSuite 一站式 IT 管理与办公安全解决方案,助力出海企业夯实数字化底座

数字化办公时代&#xff0c;企业升级 IT 基础设施&#xff0c;已不再是选择题&#xff0c;而是必答题。 数字化办公时代&#xff0c;企业为何要升级 IT 基础设施&#xff1f; 随着时代变化与科技进步&#xff0c;人们的工作方式也发生了巨大变化。如今&#xff0c;远程办公、全…

【PPT学习笔记】使用PPT制作动画/手书/视频等作品的适配性和可能性?

【PPT学习笔记】使用PPT制作动画/手书等作品的可能性&#xff1f; 背景前摇&#xff1a;&#xff08;省流可不看&#xff09; 最近找到另外一份新的实习工作&#xff0c;有很多需要用到PPT动画的地方。 然而&#xff0c;我们之前制作的理工科PPT全是摒弃了形式主义的艰苦朴素…

STM32 HAL CAN通讯 实操

1、简介 相比于串口通讯,对于刚接触CAN通讯的小白来说,CAN通讯相对复杂,看各种视频、帖子理论,总是一知半解。本次通过傻瓜式操作,先实现CAN通讯的交互,以提高小白的信心,也便于自己复习观看。本次以STM32CubeMX进行初始化配置,通过Keil 5软件进行软件设计,通过CAN盒…

如何实时更新module get到的cfg class句柄里面的值

接上篇csdn博客验证知识之在module里面get class里面的set参数-CSDN博客文章浏览阅读155次。验证知识之在module里面get class里面的set参数https://blog.csdn.net/pgl512228/article/details/141748039?spm1001.2014.3001.5501 我们是通过uvm_config_db去get到的class句柄&a…

Golang环境安装、配置详细

Windows下安装Go开发环境 点我下载 Windows配置Go环境变量 出现工具install失败时&#xff0c;切换其它代理 # 1. 七牛 CDN go env -w GOPROXYhttps://goproxy.cn,direct# 2. 阿里云 go env -w GOPROXYhttps://mirrors.aliyun.com/goproxy/,direct# 3. 官方 go env -w GOP…

复盘高质量Vision Pro沉浸式视频的制作流程与工具

在探索虚拟现实(VR)和增强现实(AR)技术的过程中,高质量的沉浸式体验是至关重要的。最近,国外开发者Dreamwieber在其作品中展示了如何使用一系列工具和技术,创造出令人震撼的Vision Pro沉浸式视频。本文将详细复盘Dreamwieber的工作流,希望能为从事相关领域的开发者们提…

Mybatis---代理设计模式(超详细)

Mybatis—代理设计模式 文章目录 Mybatis---代理设计模式一、什么是代理设计模式二、静态代理1、定义2、结构3、示例 三、动态代理1、定义2、newProxyInstance &#xff08;&#xff09;方法3、示例 四、CGLIB代理1、引入2、定义3、工作原理4、示例 一、什么是代理设计模式 首…

EmguCV学习笔记 C# 9.2 VideoWriter类

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

『功能项目』Unity本地数据库读取进入游戏【29】

本章项目成果展示 打开上一篇28Unity连接读取本地数据库的项目&#xff0c; 本章要做的事情是通过读取本地数据库登录进入游戏场景 首先创建一个脚本文件夹&#xff1a; 新建脚本&#xff1a;MySqlAccess.cs 编写脚本&#xff1a;MySqlAccess.cs using UnityEngine; using MyS…

uniapp scroll-view滚动页面

页面滚动固定距离&#xff08;scrollTop&#xff09; <template><view><button click"Test">测试</button><scroll-view style"height: 100px;" :scroll-top"scrollTop" scroll-y"true" class"scrol…

FME教程:通过更新读模块,解决FME读取shapefile数据,提示意外输入,“在转换中,某些读取的要素与工作空间的要素类不匹配……”的问题

目录 一、问题情况 二、解决方法 一、问题情况 在使用制作好的FME模板读取shapefile数据时&#xff0c;有时候会遇到弹窗提示意外输入&#xff0c;模板无法运行&#xff0c;在日志信息中警示“在转换中&#xff0c;某些读取的要素与工作空间的要素类不匹配。可能由于读模块的…

鸿蒙轻内核M核源码分析系列十三 消息队列Queue

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 轻内核M核源码分析系列一 数据结构-双向循环链表 轻内核M核源码分析系列二 数据结构-任务就绪队列 鸿蒙轻内核M核源码分析系列三 数据结构-任务排序链表 轻…

Unity TMP (TextMeshPro) 更新中文字符集

TMP更新中文字符集 1 字符集缺失说明2 字体的字符表2.1 字符表更新模式&#xff1a;动态2.2 字符表更新模式&#xff1a;静态 3 更新字符集步骤3.1 打开纹理更新面板3.1 导入文本文件3.3 关于警告处理 4 修改TMP默认字体设置 1 字符集缺失说明 使用TMP显示中文需要用到中文字体…

数据预处理与协同过滤推荐算法——从数据清洗到个性化电影推荐

推荐系统在现代应用中占据了重要地位&#xff0c;尤其在电影、音乐等个性化内容推荐中广泛使用。本文将介绍如何使用数据预处理、特征工程以及多种推荐算法&#xff08;包括协同过滤、基于内容的推荐、混合推荐等&#xff09;来实现电影推荐系统。通过Pandas、Scikit-learn、Te…

etcdctl defrag 剔除、添加etcd节点

零、准备工作 find / -name etcdctl cp /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/12/fs/usr/local/bin/etcdctl /usr/local/bin/etcdctlalias ec"etcdctl --endpointshttps://127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --…

利用正则表达式从字符串中提取浮点数

在 Python 中&#xff0c;使用正则表达式可以非常方便地从字符串中提取浮点数。Python 的 re 模块提供了正则表达式支持。下面是如何使用正则表达式提取浮点数的示例。 1、问题背景 在开发过程中&#xff0c;有时候我们需要从字符串中提取浮点数&#xff0c;例如从 HTML 代码中…

网关功能介绍

在微服务架构中&#xff0c;网关&#xff08;API Gateway&#xff09;扮演着至关重要的角色&#xff0c;它作为客户端和微服务之间的中介&#xff0c;负责路由、过滤、认证、限流等职责。以下是一些常见的网关实现&#xff1a; Spring Cloud Gateway&#xff1a; Spring Cloud …

linux系统中,计算两个文件的相对路径

realpath --relative-to/home/itheima/smartnic/smartinc/blocks/ruby/seanet_diamond/tb/parser/test_parser_top /home/itheima/smartnic/smartinc/corundum/fpga/lib/eth/lib/axis/rtl/axis_fifo.v 检验方式就是直接在当前路径下&#xff0c;把输出的路径复制一份&#xff0…

5-2 检测内存容量

1 使用的是bios 中断&#xff0c; 每次进行检测都会返回一块 内容。并且标志上&#xff0c;这块内存是否可用。 接下来是代码&#xff1a; 首先是构建 一个文件夹&#xff0c; 两个文件。 types.h 的内容。 #ifndef TYPES_H #define TYPES_H// 基本整数类型&#xff0c;下面的…