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.rhkb.cn/news/418071.html

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

相关文章

STM32

&#xff08;以下操作环境为Keil5和proteus8.9&#xff09; 八种输入输出模式及他们的工作模式 分析如下 总线&#xff1a;总线提供了数据在不同组件&#xff08;如处理器、内存、输入输出设备等&#xff09;之间传输的路径&#xff0c;使数据能够快速、准确地在系统内流动。 …

【卡码网C++基础课 18.开房门】

目录 题目描述与分析一、map的基本介绍二、map的使用三、代码编写四、范围for循环 题目描述与分析 题目描述&#xff1a; 假设你手里有一串钥匙&#xff0c;这串钥匙上每把钥匙都有一个编号&#xff0c;对应着一个房门的编号。现给你一个房门编号&#xff0c;你需要判断是否能…

mesh lab导入顶点

文章目录 ubuntu上暗转meshlab导入纯三维点 ubuntu上暗转meshlab 方式一&#xff1a; sudo apt-get install meshlab方式二&#xff1a; unbuntu 上自带的软件商店的ubuntu software里面搜索mesh lab安装即可 导入纯三维点 顶点坐标&#xff1a; -0.409576 0 -0.286788 169…

OpenCV结构分析与形状描述符(7)计算轮廓的面积的函数contourArea()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算轮廓的面积。 该函数计算轮廓的面积。与 moments 类似&#xff0c;面积是使用格林公式计算的。因此&#xff0c;返回的面积与你使用 drawCo…

C语言程序设计(算法的概念及其表示)

一、算法的概念 一个程序应包括两个方面的内容: 对数据的描述:数据结构 对操作的描述:算法 著名计算机科学家沃思提出一个公式: 数据结构 +算法 =程序 完整的程序设计应该是: 数据结构+算法+程序设计方法+语言工具 广义地说,为解决一个问题而采取的方法和步骤…

Java中Json、String、jsonObject、jsonArray格式之间的互相转换 (Fastjson、Gson、String字符串分隔)

1.org中jackson转换json,springboot中内置jackson ObjectMapper onew ObjectMapper();List<>listnew ArrayList();String jonso.writeAsValueString(list); 一、Fastion 使用阿里的fastjson <dependency><groupId>com.alibaba</groupId><artifactId…

网络协议-SSH

SSH&#xff08;Secure Shell&#xff09;协议是一种广泛使用的网络协议&#xff0c;用于安全地进行远程登录和数据传输。SSH协议通过加密技术保证了数据的安全性&#xff0c;防止数据在传输过程中被窃听、篡改或伪造。SSH协议的通信认证过程主要包括以下几个步骤&#xff1a; …

Android Camera系列(一):SurfaceView+Camera

心行慈善&#xff0c;何需努力看经—《西游记》 Android Camera系列&#xff08;一&#xff09;&#xff1a;SurfaceViewCamera Android Camera系列&#xff08;二&#xff09;&#xff1a;TextureViewCamera Android Camera系列&#xff08;三&#xff09;&#xff1a;GLSur…

利用 Redis 实现延迟队列(点赞场景)

&#x1f308;点赞场景在前段时间有很多人都在争论&#xff0c;我也看了一些视频和文档&#xff0c;最后觉得b站技术的这篇写得很好 【点个赞吧】 - B站千亿级点赞系统服务架构设计 - 哔哩哔哩 &#x1f308;所以我也尝试用 Redis 的延迟队列来写一个点赞处理的 demo&#xff0…

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

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

Java | Leetcode Java题解之第390题消除游戏

题目&#xff1a; 题解&#xff1a; class Solution {public int lastRemaining(int n) {int a1 1;int k 0, cnt n, step 1;while (cnt > 1) {if (k % 2 0) { // 正向a1 a1 step;} else { // 反向a1 (cnt % 2 0) ? a1 : a1 step;}k;cnt cnt >> 1;step s…

【二等奖成品论文】2024年数学建模国赛B题25页成品论文+完整matlab代码、python代码等(后续会更新)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片&#xff0c;那是获取资料的入口&#xff01; 【全网最全】2024年数学建模国赛B题31页完整建模过程25页成品论文matlab/python代码等&#xff08;后续会更新「首先来看看目前已有的资料&#xff0c;还会…

python画图|并列直方图绘制

前述学习过程中&#xff0c;已经知晓普通直方图绘制和堆叠直方图绘制&#xff0c;参考链接如下&#xff1a; 西猫雷婶-CSDN博客 有时候&#xff0c;我们还会遇到并列直方图绘制的需求&#xff0c;今天就探索一下。 【1】官网教程 按照惯例&#xff0c;我们先来到官网&#…

MySQL数据库的介绍

目录 1.什么是MySQL数据库 2.MySQL数据库的设计 MySQL的进一步认识 MySQL的客户端 —— mysql MySQL的服务端 —— mysqld 3.MySQL数据库的架构 MySQL架构图 连接层 服务层 存储引擎层 文件系统层 4.MySQL的存储引擎 认识存储引擎 MySQL中的存储引擎 存储引擎之…

JWT生成、解析token

目录 1. 导入JWT相关依赖2. JWT生成token3. JWT解析token4. 测试结果5. JWT加密、解密工具类 1. 导入JWT相关依赖 <!-- jwt认证模块--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><versio…

Docker中部署nacos 开启鉴权springboot连接配置

nacos开启鉴权后发现各种连不上。 按道理说所有的东西都是采用同一个docker网络连接的&#xff0c;连接的时候可以采用容器名连接。 下面是刚开始springboot中的链接配置。增加了用户名和密码 这里nacos我们用到了注册中心和配置中心。启动项目的时候配置中心没有问题&#x…

企业选ETL还是ELT架构?

作为数据处理的重要工具&#xff0c;ETL工具被广泛使用&#xff0c;同时ETL也是数据仓库中的重要环节。本文将从解释ETL工具是怎么处理数据&#xff0c;同时介绍ELT和ETL工具在企业搭建数据仓库的重要优势。 一、什么是ETL? ETL是Extract-Transform-Load的缩写&#xff0c;将…

RabbitMQ 应用

文章目录 前言1. Simple 简单模式2. Work Queue 工作队列模式3. Pubulish/Subscribe 发布/订阅模式Exchange 的类型 4. Routing 路由模式5. Topics 通配符模式6. RPC RPC通信7. Publisher Confirms 发布确认1. 单独确认2. 批量确认3. 异步确认 前言 前面我们学习了 RabbitMQ 的…

数据结构--串的模式匹配算法

文章目录 串的模式匹配算法1.朴素算法&#xff08;Brute-Force(BF)暴力算法&#xff09;BF算法分析 2.KMP算法字符串的最长公共前后缀部分匹配表&#xff08;前缀表&#xff09;Next 串的模式匹配算法 查找子串&#xff08;模式串&#xff09;在主串中的位置的操作通常称为串的…

《OpenCV计算机视觉》—— 图像形态学(腐蚀、膨胀等)

文章目录 一、图像形态学基本概念二、基本运算1.简单介绍2.代码实现 三、高级运算1.简单介绍2.代码实现 一、图像形态学基本概念 图像形态学是图像处理科学的一个独立分支&#xff0c;它基于集合论和数学形态学的理论&#xff0c;专门用于分析和处理图像中的形状和结构。图像形…