2024 Google I/O - 提前窥探 Android 15 的新功能与适配

今年年初就简单介绍过 Android 15 预览版 的相关内容,而昨天 Google I/O 宣布了 Android 15 Beta2,作为第二个 Beta 版本 ,它已经基本接近它未来的样子,毕竟下个版本就是 Platform Stability 了,所以让我们提前来一睹 Android 15 有什么新的优势(keng)在等我们吧。

前台服务变化

前台服务一直是比较损耗电池寿命的操作,在 Android 15 Beta 2 里,dataSyncmediaProcessing 的前台服务类型现在有大约 6 小时的超时时间,之后系统将调用 Android 15 新的[Service.onTimeout(int, int)](https://developer.android.com/reference/android/app/Service#onTimeout(int, int)) 方法,之后该服务就不会再被视为前台服务,如果服务没有调用Service.stopSelf() 来响应超时,它会因未触发失败而停止。

Beta 2 还增加了应用在后台运行时启动前台服务的新要求 :如果前台服务依赖于 SYSTEM_ALERT_WINDOW 权限来豁免后台启动,则现在在面向 Android 15 时需要有可见的叠加层

支持 16 KB 页面大小

Android 15 增加了对使用较大页面大小的设备的支持,除了标准 4 KB 页面之外,还支持 16 KB 页面,如果你的应用直接或通过 SDK 间接使用任何 NDK 库,那么可能需要重构应用才可以在 16 KB 页面大小的设备上运行

PS:页面大小指的是虚拟内存中的页面(也称为页)的大小,通常是 2 的整数次幂,比如2KB、4KB、8KB等

配置有 16KB 页面大小的设备,对于 App 的启动性能有着不错的提升 ,并且在明年 Google Play 也将支持应用上传到 Play 商店时支持 16 KB 页面兼容性

Android 的 GPU 访问

从 Android 7.0(API 级别 24)以来,Vulkan API 已经在 NDK 里提供,使用 Vulkan API 可以更好接触到 GPU 的底层能力。

Vulkan 现在是 Android 的首选 GPU 接口,而 Android 15 将 ANGLE 作为可选层,用于在 Vulkan 之上运行 OpenGL ES,转向 ANGLE 将使 Android OpenGL 实现标准化以提高兼容性,并在某些情况下可以提高性能。

对于开发者,可以使用 Android 15 中的 “开发者选项 → Experimental: Enable ANGL” 设置来测试 OpenGL ES 应用的稳定性和性能。

作为简化 GPU 堆栈的一部分,今后将会在更多新设备上将 ANGLE 作为 GL 系统的驱动程序,未来预计 OpenGL/ES 将仅通过 ANGLE 提供。

现代图形

Android 15 继续对 Android Canvas 图形系统进行新的改造:

  • Matrix44 提供了一个 4x4 矩阵用于转换坐标,当开发者想要以 3D 方式操作画布时可以使用该矩阵。
  • ClipShader 将当前剪辑与指定着色器相交,而 clipOutShader 将剪辑设置为当前剪辑与着色器的差值,每个将着色器视为 alpha 遮罩,这个支持可以有效地绘制复杂形状。

AV1软件解码

dav1d 是 VideoLAN 的 AV1 软件解码器,现在可以用于不支持 AV1 解码硬件的 Android 设备,它的性能比传统 AV1 软件解码器高出 3 倍,可为更多用户(包括一些中低端设备)提供高清 AV1 播放。

目前应用需要通过 “c2.android.av1-dav1d.decoder ” 调用来选择使用 dav1d ,在后续更新中它将成为默认的 AV1 软件解码器,另外这个支持已标准化并向后移植到接收 Google Play 系统更新的 Android 11 设备。

私人空间

私人空间允许用户在其设备上创建一个单独的空间,在额外的身份验证层下,可以让敏感应用得到隔离。

私人空间使用单独的用户配置文件,当用户锁定私人空间时,配置文件将处于暂停,同时 App 耶不再活动,用户可以选择使用设备锁或单独的锁定来保护私人空间。

私人空间应用显示在启动器的单独容器中,并且在私人空间锁定时从最近的视图、通知、设置和其他应用中隐藏。

用户生成和下载的内容(媒体、文件)和帐户在私人空间和主空间之间分开,当私人空间解锁时,系统共享表和照片选择器可用于让应用访问跨空间的内容。

照片选择改进

现在,当 App 得到部分媒体权限时,应用可以仅突出显示最近选择的照片和视频,这可以改善频繁请求访问照片和视频的用户体验,详细可以通过 ContentResolverMediaStore 启用时查询 QUERY_ARG_LATEST_SELECTION_ONLY 参数来实现。

valexternalContentUri = MediaStore.Files.getContentUri("external")val mediaColumns = arrayOf(FileColumns._ID,FileColumns.DISPLAY_NAME,FileColumns.MIME_TYPE,
)val queryArgs = bundleOf(// Return only items from the last selection (selected photos access)QUERY_ARG_LATEST_SELECTION_ONLY to true,// Sort returned items chronologically based on when they were added to the device's storageQUERY_ARG_SQL_SORT_ORDER to "${FileColumns.DATE_ADDED} DESC",QUERY_ARG_SQL_SELECTION to "${FileColumns.MEDIA_TYPE} = ? OR ${FileColumns.MEDIA_TYPE} = ?",QUERY_ARG_SQL_SELECTION_ARGS to arrayOf(FileColumns.MEDIA_TYPE_IMAGE.toString(),FileColumns.MEDIA_TYPE_VIDEO.toString())
)val cursor = contentResolver.query(externalContentUri, mediaColumns, queryArgs, null)

对 content URI 的权限检查

Android 15 引入了一组新的 API,用于对 content URI 执行权限检查:

  • [Context.checkContentUriPermissionFull](https://developer.android.com/reference/android/content/Context#checkContentUriPermissionFull(android.net.Uri, int, int, int)):它对内容 URI 执行完整的权限检查。
  • Activity manifest attribute requireContentUriPermissionFromCaller:它在 activity 启动时对提供的 content URI 强制执行指定的权限。
  • Activity 调用者的 ComponentCaller :它代表启动该 Activity 的应用。

安全的后台 activity 启动

从 Android 10 起后台 activity 启动就受到限制,而 Android 15 通过添加其他控制,来防止恶意后台应用将其他应用带到前台。

在此之前,同一任务中的恶意应用可以启动另一个应用的 activity ,然后将自己叠加在上面,从而造成是该应用的错觉,这种“任务劫持”(task hijacking) 攻击绕过了当前的后台启动限制,因为它全部发生在同一个可见 task 中,为了减轻这种风险, 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);
...
}

更安全的 Intents

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。

这些改进将成为 Strict Mode 的一部分:

public void onCreate() {StrictMode.setVmPolicy(VmPolicy.Builder().detectUnsafeIntentLaunch().build());...

将最低 target SDK 版本从 23 增加到 24

Android 15 将安装应用所需的最低 targetSdkVersion 从 23 增加到 24,如果尝试安装 target API 级别低于 24 的应用,会在 Logcat 中看到错误:INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 24, but found 7.

改进大屏幕多任务处理

Android 15 beta 2 为用户提供了在大屏幕设备上处理多任务的更好方法,例如用户可以将任务栏固定在屏幕上,然后在应用之间快速切换,当然,这也代表了你的 App 需要具不同的屏幕适应能力。

Window Insets

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

画中画

Android 15 引入了画中画 (PiP) 的新变化,确保进入 PiP 模式时的过渡更加平滑,这对于 UI 元素覆盖在其主 UI 之上(进入画中画)的应用可以看到对应的效果。

目前 [onPictureInPictureModeChanged ](https://developer.android.com/reference/android/app/Activity.html#onPictureInPictureModeChanged(kotlin.Boolean, android.content.res.Configuration))用于定义切换重叠 UI 元素的可见性的逻辑,当画中画进入或退出动画完成时会触发此回调。

从 Android 15 开始,我们在 PictureInPictureUiState 类中引入了一个新状态,一旦 PiP enter animation 开始,并且应用可以隐藏覆盖的 UI 元素, 就会使用 isTransitioningToPip() 调用 onPictureInPictureUiStateChanged 回调。

override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {if (pipState.isTransitioningToPip()) {// Hide UI elements}}override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {if (isInPictureInPictureMode) {// Unhide UI elements}}

这种 UI 不相关(对于画中画窗口)的快速可见能力,可以让画中画动画切换更平滑且不闪烁。

通过生成的预览提供更丰富的 Widget 预览

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

应用可以使用 AppWidgetManager [setWidgetPreview](https://developer.android.com/reference/android/appwidget/AppWidgetManager#setWidgetPreview(android.content.ComponentName, int, android.widget.RemoteViews))、[getWidgetPreview](https://developer.android.com/reference/android/appwidget/AppWidgetManager#getWidgetPreview(android.content.ComponentName, android.os.UserHandle, int)) 和 [removeWidgetPreview](https://developer.android.com/reference/android/appwidget/AppWidgetManager#removeWidgetPreview(android.content.ComponentName, int)) 方法来使用最新的个性化信息更新 Widget 的外观。

Predictive Back

Predictive back 在使用手势导航的同时提供了更流畅、更直观的导航体验,利用内置动画告知用户他们的操作将把他们带到哪里,以减少意外结果。

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

为通知通道设置 VibrationEffect

Android 15 beta 2 现在支持使用 NotificationChannel.setVibrationEffect ,按通道为传入通知设置丰富的振动,这样用户就无需查看设备即可区分不同类型的通知。

“选择你的称呼方式”系统偏好设置

用户可以根据语法性别偏好自定义 Android 系统如何称呼他们,新设置可以在系统语言设置中找到:Settings → System → Languages & Input → System languages → Choose how you’re addressed

CJK 可变字体

从 Android 15 开始,中文、日文和韩文的字体文件 NotoSansCJK 会是可变字体,可变字体为 CJK 语言的创意排版开辟了新的可能性。

新日语 Hentaigana 字体

在 Android 15 中,默认捆绑了旧日语平假名(称为 Hentaigana)的新字体文件,半假名字符的独特形状可以为艺术品或设计增添独特的风格,同时也有助于保存对古代日本文献的准确传播和理解。

避免剪切文本

某些具有复杂形状的草书字体或语言字符可能会在上一个或下一个字符的区域中绘制字母,这些字母可能会在开始或结束位置被剪裁,从 Android 15 开始,TextView 为此类字母分配额外的宽度,并在左侧添加额外的填充。

由于这会改变 TextView 决定宽度的方式,因此如果应用面向 Android 15 或更高版本,则默认情况下 TextView 会分配更多宽度,可以通过在 TextView 上调用 setUseBoundsForWidth API来启用或禁用它

由于添加左内边距可能会导致现有布局错位,因此即使面向 Android 15 或更高版本,默认情况下也不会添加内边距。

要添加额外的填充以防止剪切,请调用 setShiftDrawingOffsetForStartOverhang。

<TextViewandroid:fontFamily="cursive"android:text="java" />

<TextViewandroid:fontFamily="cursive"android:text="java"android:useBoundsForWidth="true"android:shiftDrawingOffsetForStartOverhang="true" />

参考原文 :https://android-developers.googleblog.com/2024/05/the-second-beta-of-android-15.html

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

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

相关文章

数字化转型浪潮下,低代码技术如何重塑保险行业?

保险行业进行数字化转型的必要性源于多个方面&#xff0c;随着科技的进步和互联网的普及&#xff0c;客户对保险服务的需求日益个性化和便捷化。他们期望能够随时随地在线购买保险、查询保单信息&#xff0c;并享受到快速、高效的理赔服务。数字化转型可以帮助保险公司满足这些…

docker容器与centos宿主机时间一致设置

1、查看宿主机的系统时间 date -R 2、进入到容器中查看容器系统时间 docker exec -it storage /bin/bash date -R 3、查看容器系统时区 cat /etc/timezone 4、查看宿主机所在时区 timedatectl 5、创建容器时间&#xff0c;并退出进入的容器 6、将宿主日期复制到容器内部&…

微信可以正常连接网络 浏览器访问不了外网

今天工作打开电脑&#xff0c;发现浏览器上不了网&#xff0c;百度都点不开。点击网络诊断&#xff0c;显示网络连接正常。重启了两次&#xff0c;浏览器还是连接不上外网。打开微信&#xff0c;微信还能正常使用。 仔细想一想&#xff0c;我昨天对电脑做了什么&#xff0c;特殊…

【漏洞复现】方正全媒体采编系统密码泄露漏洞

0x01 产品简介 方正全媒体新闻采编系统是一个面向媒体深度融合的技术平台&#xff0c;它以大数据和AI技术为支撑&#xff0c;集成了指挥中心、采集中心、编辑中心、发布中心、绩效考核中心、资料中心等多个功能&#xff0c;全面承载“策采编审发存传评”的融媒体业务流程。 0…

纯血鸿蒙APP实战开发——Worker子线程中解压文件

介绍 本示例介绍在Worker 子线程使用ohos.zlib 提供的zlib.decompressfile接口对沙箱目录中的压缩文件进行解压操作&#xff0c;解压成功后将解压路径返回主线程&#xff0c;获取解压文件列表。 效果图预览 使用说明 点击解压按钮&#xff0c;解压test.zip文件&#xff0c;显…

03-行为型模式(共10种)

上一篇: 02-结构型设计模式(共7种) 1. Strategy(策略模式) 策略模式是一种行为型设计模式&#xff0c;它定义了一系列算法&#xff0c;将每个算法封装到独立的类中&#xff0c;并使它们可以互相替换。这样可以使算法的变化独立于使用算法的客户端。 在 C 中&#xff0c;策略模式…

20-LINUX--网络编程

一. 主机字节序列和网络字节序列 主机字节序列分为大端字节序和小端字节序&#xff0c;不同的主机采用的字节序列可能不同。大 端字节序是指一个整数的高位字节存储在内存的低地址处&#xff0c;低位字节存储在内存的高地址 处。小端字节序则是指整数的高位字节存储在内存的高…

保温杯盖一般是什么材质的?

保温杯盖一般是什么材质的&#xff1f; Pi材料&#xff0c;也称为聚酰亚胺&#xff08;Polyimide&#xff09;&#xff0c;具有多种特殊性能和应用领域&#xff0c;主要作用如下&#xff1a; 1. 高温耐性&#xff1a;Pi材料具有出色的高温稳定性&#xff0c;能够在高温环境下长…

国内常用的项目管理软件有哪些?六大企业级项目管理软件大盘点

一、 奥博思 PowerProject 项目管理软件 官方网址&#xff1a;http://www.powerproject.com.cn 北京奥博思软件技术有限公司自成立以来&#xff0c;一直专注于企业级项目管理软件的开发及解决方案&#xff0c;致力于为各类企业&#xff08;制造业、IT交付、金融、汽车及汽车零…

供应链投毒预警 | 开源供应链投毒202404月报发布(含投毒案例分析)

概述 悬镜供应链安全情报中心通过持续监测全网主流开源软件仓库&#xff0c;结合程序动静态分析方式对潜在风险的开源组件包进行动态跟踪和捕获&#xff0c;发现大量的开源组件恶意包投毒攻击事件。在2024年4月份&#xff0c;悬镜供应链安全情报中心在NPM官方仓库&#xff08;…

什么是检索增强生成(Retrieval Augmented Generation)?RAG 架构如何实现?

检索增强生成&#xff08;Retrieval Augmented Generation&#xff09;时代 在不断发展的生成人工智能世界中&#xff0c;检索增强生成 (RAG) 标志着一项重大进步&#xff0c;它将检索模型的准确性与生成模型的创造性相结合&#xff0c;达到了准确&创新的更高层级。 这种…

Nginx 7层负载均衡的搭建

目录 负载均衡的理解 修改配置文件 测试 1. 选择在 DMZ 区测试&#xff0c;使用 db 服务器进行测试 2.选择在外网测试负载均衡效果 负载均衡的理解 负载均衡&#xff1a;load balancer&#xff0c;简称LB Nginx 既是一个 web 服务器软件&#xff0c;也是一个负载均衡软件&a…

【NLP】文本分类

n-gram 的局限性 n-gram 只能对于填空这样的通顺性问题做出推测&#xff0c;但是没有办法完全解决句子的语义问题&#xff0c;从而无法实现文本的分类 文本的分类&#xff0c;就是将文本在语义的理解下划分到特定的主题下 手工规则 如一些垃圾过滤系统&#xff0c;需要人工制…

企业或者个体户为什么会经营异常?

在复杂多变的市场经济环境中&#xff0c;无论是企业还是个体工商户&#xff0c;都可能遭遇经营异常的情况。及时识别这些预警信号并采取有效措施&#xff0c;对于避免潜在风险、保持健康发展至关重要。本文将深入探讨企业与个体户常见的经营异常类型、识别方法以及应对策略&…

有趣的css - 文字隐身术效果

大家好&#xff0c;我是 Just&#xff0c;这里是「设计师工作日常」&#xff0c;今天分享的是利用动画属性来模拟文字隐身消失的效果。 《有趣的css》系列最新实例通过公众号「设计师工作日常」发布。 目录 整体效果核心代码html 代码css 部分代码 完整代码如下html 页面css 样…

php解密工具

在线编辑器 复制如下代码到空白地区: <?php namespace FatSmallTools; class NavicatPassword {protected $version 0;protected $aesKey libcckeylibcckey;protected $aesIv libcciv libcciv ;protected $blowString 3DC5CA39;protected $blowKey null;protected $b…

MCULCD屏驱动方法

MCULCD屏驱动方式 一、LCD简介二、直接采用8080时序驱动LCD三、采用FSMC&#xff08;模拟8080时序&#xff09;驱动LCD1&#xff0c;FSMC简介2&#xff0c;结构框图3&#xff0c;FMC 驱动 LCD 显示配置步骤 一、LCD简介 Liquid Crystal Display&#xff0c;即液晶显示器&#…

GPT-4o 的商业化落地使用场景

今天我想和大家聊一聊 OpenAI 的 GPT-4o。这款令人惊叹的语言模型不仅在技术层面上令人钦佩&#xff0c;也在多种实际应用中展现了巨大的商业潜力。 GPT-4o 是什么&#xff1f; 首先&#xff0c;简单介绍一下 GPT-4o。它是由 OpenAI 开发的一种高级自然语言处理模型&#xff0…

【全开源】keep健身小程序FastAdmin+ThinkPHP+UniApp

基于FastAdminUniApp&#xff08;目前仅支持微信小程序&#xff09;开发的健身相关行业小程序&#xff0c;程序适用于健身房、瑜伽馆、游泳馆、篮球馆等健身培训场所。平台拥有课程售卖、课*程*预*约、多门店管理、私教预约、教练端、会*员*卡办理、在线*商*城、分*销*模块、页…

每日一练 2024.5.16(补2024.5.12)

题目&#xff1a; 给你 n 个项目&#xff0c;编号从 0 到 n - 1 。同时给你一个整数数组 milestones &#xff0c;其中每个 milestones[i] 表示第 i 个项目中的阶段任务数量。 你可以按下面两个规则参与项目中的工作&#xff1a; 每周&#xff0c;你将会完成 某一个 项目中的…