Android15 Beta更新速览

Android15 Beta更新速览

前台服务变更

前台服务使应用保持活动状态,以便它们可以执行关键且对用户可见的操作,通常以牺牲电池寿命为代价。在 Android 15 Beta 2 中,dataSync 和 mediaProcessing 前台服务类型现在具有约 6 小时的超时时间,之后系统将调用 Android 15 的新 Service.onTimeout(int, int) 方法。在此时,该服务将不再被视为前台服务。如果服务没有在超时后调用 Service.stopSelf() 来响应,它将会因失败而停止。

Beta 2 还为在应用在后台运行时启动前台服务添加了新的要求。- 如果你的前台服务依赖于 SYSTEM_ALERT_WINDOW 权限豁免以进行后台启动,那么现在在针对 Android 15 进行目标设置时,你需要有一个可见的悬浮窗口。

即将要求支持的16 KB页面大小

Android 15新增了对使用更大页面大小的设备的支持,除了标准的4 KB页面外,还支持16 KB页面。如果您的应用程序使用任何NDK库,无论是直接还是间接通过SDK,那么您可能需要简单地重新构建您的应用程序,以便在这些16 KB页面大小的设备上运行。

具有更大页面大小的设备在内存密集型工作负载方面可能具有更好的性能。虽然我们的测试可能不代表生态系统中的所有设备,但在我们对配置为16 KB页面大小的设备的初始测试中,我们发现了一些性能收益:

在系统承受内存压力时,应用程序启动时间较短:平均降低了3.16%,对于我们测试的一些应用程序,改善更显著(最高可达30%)
应用程序启动时功耗降低:平均减少了4.56%
相机启动更快:热启动平均快了4.48%,冷启动平均快了6.60%
系统启动时间改善:平均改善了1.5%(约0.8秒)

随着设备制造商继续构建具有更大物理内存(RAM)的设备,其中许多设备将采用16 KB(以及更大)的页面大小来优化设备的性能。添加对16 KB页面大小设备的支持使您的应用程序能够在这些设备上运行,并使您的应用程序受益于相关性能改进。我们计划将16 KB页面的兼容性要求纳入明年上传到Play Store的应用程序。

现代Android GPU架构

  • Android硬件的发展:从单个CPU核心到现代GPU硬件,通过Vulkan图形API自Android 7.0开始。
  • Vulkan的好处:较低级别的抽象、更好的CPU核心支持、减少的驱动程序开销,导致应用程序和游戏性能的提升。
  • Vulkan作为Android首选的GPU接口。
  • Android 15中包含的ANGLE:作为在Vulkan上运行OpenGL ES的可选层,标准化OpenGL实现,可能提高性能。
  • 使用ANGLE测试OpenGL ES应用:在"开发者选项 → 实验性:启用ANGLE"设置中可用。
  • Android ANGLE on Vulkan路线图:ANGLE将成为新设备上的标准GL系统驱动程序,未来预期OpenGL/ES将仅通过ANGLE可用。
  • 对所有设备的OpenGL ES支持将继续。
  • 建议:使用开发者选项测试ANGLE驱动程序,鼓励新的C/C++项目使用Vulkan。
  • Android 15中的现代图形改进:引入Matrix44进行3D画布操作,clipShader和clipOutShader用于高效绘制复杂形状。

效率更高的AV1软解码

  • dav1d是VideoLAN开发的AV1软件解码器,现已适用于不支持AV1硬件解码的Android设备。
  • dav1d比传统的AV1软件解码器性能高出多达3倍,可在更多低端和中端设备上实现高清AV1播放。
  • 应用程序需要通过名称"c2.android.av1-dav1d.decoder"来选择使用dav1d,将在后续更新中成为默认的AV1软件解码器。
  • 此支持已标准化,并已回溯到接收了Google Play系统更新的Android 11设备。
  • 开发者可以在 “构建现代Android媒体和相机体验” I/O讲座中了解有关Android媒体和相机的最新功能和解决方案。

更安全的隐私空间

  1. 隐私空间: 用户可以在设备上创建一个独立的空间,将敏感的应用程序放置其中,以避免被他人窥视。隐私空间使用单独的用户配置文件,当用户锁定隐私空间时,配置文件将被暂停,即应用程序将不再处于活动状态。用户可以选择使用设备锁定或单独的锁定因素来保护隐私空间。
  2. 应用程序处理: 在隐私空间中的应用程序将显示在启动器的单独容器中,并在隐私空间被锁定时隐藏在最近视图、通知、设置和其他应用程序中。用户生成和下载的内容(媒体、文件)以及账户在隐私空间和主空间之间是分开的。
  3. 系统功能: 当隐私空间解锁时,系统共享表和照片选择器可用于向应用程序提供跨空间的内容访问。 Android 15 beta 2.1 部分修复了在 beta 2 中已知的隐私空间问题,该问题影响了主屏幕应用程序。

选定照片访问改进

现在,当应用程序获得对媒体权限的部分访问权限时,可以仅突出显示最近选择的照片和视频。这可以改善经常请求访问照片和视频的应用程序的用户体验。通过在查询 MediaStore 时通过 ContentResolver 启用 QUERY_ARG_LATEST_SELECTION_ONLY 参数来实现此目的。

val externalContentUri = MediaStore.Files.getContentUri("external")val mediaColumns = arrayOf(FileColumns._ID,FileColumns.DISPLAY_NAME,FileColumns.MIME_TYPE,
)val queryArgs = bundleOf(// 仅返回最后一次选择的项目(选择的照片访问)QUERY_ARG_LATEST_SELECTION_ONLY to true,// 基于添加到设备存储的时间对返回的项目进行按时间顺序排序QUERY_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)

内容 URI 的权限检查

Android 15 引入了一组新的 API,用于对内容 URI 进行权限检查。它们包括:

  • Context.checkContentUriPermissionFull:对内容 URI 执行完整的权限检查。
  • Activity 清单属性 requireContentUriPermissionFromCaller:在活动启动时强制执行指定的权限。
  • 用于 Activity 调用者的 ComponentCaller 类:表示启动活动的应用程序。

安全的后台活动启动

Android 15 通过添加更改来保护用户免受恶意应用的侵害,并使他们对其设备拥有更多控制权,防止恶意后台应用程序将其他应用程序置于前台、提升其特权并滥用用户交互。自 Android 10 以来,已经限制了后台活动启动。

在同一任务中的恶意应用程序可以启动另一个应用程序的活动,然后将自身覆盖在其上,从而制造出作为该应用程序的假象。这种“任务劫持”攻击绕过了当前的后台启动限制,因为它全部发生在同一个可见任务中。为了减轻这种风险,我们添加了一个标志,阻止与堆栈顶部 UID 不匹配的应用程序启动活动。为了为您的应用程序的所有活动选择加入此保护,请更新应用程序的 AndroidManifest.xml 文件中的 allowCrossUidActivitySwitchFromBelow 属性:

<application android:allowCrossUidActivitySwitchFromBelow="false" >

一旦您的应用程序选择加入新的保护措施,可以在 Activity 内部使用此 API 来选择退出特定的共享活动:

public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setAllowCrossUidActivitySwitchFromBelow(true);
...
}

了解更多关于从后台启动活动的限制。

https://developer.android.cn/guide/components/activities/background-starts

更安全的Intent

Android 15 引入了新的安全措施,使 Intent 更加安全和稳健。这些改进旨在防止潜在的漏洞和 Intent 的误用,这些漏洞和误用可能被恶意应用程序利用。Android 15 中对 Intent 安全性的改进主要有两点:
匹配目标 Intent 过滤器:针对特定组件的 Intent 必须准确匹配目标的 Intent 过滤器规范。如果您发送一个用于启动另一个应用程序活动的 Intent,则目标 Intent 组件需要与接收活动声明的 Intent 过滤器相匹配。
Intent 必须具有动作:不带动作的 Intent 将不再匹配任何 Intent 过滤器。这意味着用于启动活动或服务的 Intent 必须具有明确定义的动作。

重要提示:这些改进将成为严格模式的一部分。如果您想尝试它们,请添加以下方法:

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

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

Android 15 将安装应用程序所需的最低目标 SDK 版本从 23 增加到 24,这在 Android 14 中的最低目标 SDK 变更基础上构建。过时的应用程序通常缺乏最新的安全保护措施,使设备和数据容易受到攻击。要求应用程序符合现代 API 级别有助于确保更好的安全性和隐私。

如果您尝试安装一个目标 API 级别低于 24 的应用程序,您将在 Logcat 中看到一个错误:INSTALL_FAILED_DEPRECATED_SDK_VERSION:App package must target at least SDK version 24, but found 7.

优质的设备体验

Android 15 包括一些功能,帮助您的应用程序改善使用 Android 设备的体验,包括更流畅的过渡效果、更有帮助的用户界面、针对大屏幕设备的更新以及设计师更多美观的选择。

改进的大屏幕多任务处理

Android 15 beta 2 为大屏幕设备的多任务处理提供了更好的方式。例如,用户可以将任务栏固定在屏幕上,以便快速在应用程序之间切换,或者保存他们喜欢的分屏应用程序组合以便快速访问。这意味着确保您的应用程序具有适应性比以往任何时候都更重要。Google I/O 有关于构建适应性 Android 应用程序和使用 Material 3 适应性库构建 UI 的会议,可以提供帮助,我们的文档中还有更多帮助您为大屏幕设计的内容。

窗口插图

除了边到边的强制执行外,在 Android 15 中,当目标 SDK 版本为 35+ 时,Configuration.screenWidthDp screenHeightDp 现在包括系统栏的深度。虽然这些值仍然可以用于资源选择(例如 res/layout-h500dp),但不建议将它们用于布局计算。

画中画

Android 15 在画中画(PiP)方面引入了新的变化,确保进入画中画模式时过渡更加平稳。这将有利于具有 UI 元素叠加在其主 UI 上的应用程序进入画中画模式。当前,onPictureInPictureModeChanged 用于定义切换叠加 UI 元素的可见性的逻辑。此回调在 PiP 进入或退出动画完成时触发。从 Android 15 开始,我们在 PictureInPictureUiState类中引入了一个新的状态。当 PiP 进入动画开始时,将调用 onPictureInPictureUiStateChanged 回调,并且应用程序可以隐藏叠加的 UI 元素。

override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {if (pipState.isTransitioningToPip()) {// 隐藏 UI 元素}}override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {if (isInPictureInPictureMode) {// 取消隐藏 UI 元素}}

对于 PiP 窗口,这种快速切换不相关 UI 元素的可见性,将确保进入 PiP 的动画更加平滑,没有闪烁。

使用生成的预览丰富的小部件预览

通过显示个性化预览使您的小部件脱颖而出。针对 Android 15 的应用程序可以向小部件选择器提供 Remote Views,以便它们可以更新选择器中的内容,使其更能代表用户将看到的内容。应用程序可以使用 AppWidgetManager 的 setWidgetPreview、getWidgetPreview 和 removeWidgetPreview 方法,使用最新的个性化信息更新其小部件的外观。

预测式返回

预测式返回在使用手势导航时提供了更加流畅、直观的导航体验,利用内置动画告知用户其操作将带他们去哪里,以减少意外结果。在 Android 15 中,预测式返回将不再位于开发者选项之后,因此对于已正确迁移的应用程序,系统动画,例如返回主页、跨任务和跨活动,将出现。

为通知渠道设置振动效果

Android 15 beta 2 现在支持通过 NotificationChannel.setVibrationEffect 为通知渠道设置丰富的振动效果,因此您的用户可以在不查看设备的情况下区分不同类型的通知。

Health Connect 的新数据类型

Health Connect 是用户控制和管理其健身数据访问的集中方式,正在添加对更多健康和健身用例的支持。此版本有 2 种新的数据类型:皮肤温度和训练计划。

皮肤温度跟踪允许用户从可穿戴设备或其他跟踪设备中存储和共享更准确的温度数据。

训练计划是帮助用户实现其健身目标的结构化锻炼计划。训练计划支持包括:

围绕燃烧的卡路里、距离、持续时间、重复次数和步数的完成目标
围绕尽可能多的重复次数(AMRAP)、节奏、心率、功率、感知努力率和速度的性能目标

“选择您的称谓” 系统偏好设置

最初仅适用于法语,但很快将扩展到其他性别语言,用户可以使用语法性别首选项自定义 Android 系统如何称呼他们。新设置可以在系统语言设置中找到:设置 → 系统 → 语言和输入 → 系统语言 → 选择您的称谓。

ICU语言和字体

  • Android 15 Beta 2 包含了 ICU 74 的 API 相关更新。
  • ICU 74 包含了来自 Unicode 15.1 的更新,包括新字符、表情符号、安全机制以及相应的 API 和实现,以及 CLDR 44 区域设置数据的更新,其中包括新的区域设置和各种添加和更正。
  • 从 Android 15 开始,中文、日文和韩文语言的字体文件 NotoSansCJK 现在是一个可变字体。可变字体为中日韩语言的创意排版开辟了新的可能性。设计师可以探索更广泛的风格,并创建以前难以或不可能实现的视觉效果。
  • Android 15 中默认捆绑了一个用于旧日语平假名(称为 Hentaigana)的新字体文件。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" />

印地语中被裁剪的文字示例

<TextViewandroid:text="คอมพิวเตอร์" />

印地语中未被裁剪的文字示例

<TextViewandroid:text="คอมพิวเตอร์"android:useBoundsForWidth="true"android:shiftDrawingOffsetForStartOverhang="true" />

App兼容

  1. 着重测试应用在 Android 15 上的兼容性,因为更多设备正在进入该计划。
  2. 未来几周内,预计会有更多用户在 Android 15 上尝试你的应用,并提出问题。
  3. 为了测试兼容性,安装已发布的应用程序在运行 Android 15 beta 的设备或模拟器上,并测试所有应用程序的流程。
  4. 需要审查行为变化以便集中测试。
  5. 解决任何问题后,尽快发布更新。
  6. 平台稳定性里程碑预计将于 2024 年 6 月达到,届时将提供最终的 SDK/NDK API、最终的内部 API 和面向应用的系统行为。
  7. 在正式发布之前,你将有几个月的时间进行最终测试。

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

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

相关文章

青春旅行家:大学生旅游创业的新星

在青春的岁月里&#xff0c;我们怀揣着梦想&#xff0c;渴望探索世界的每一个角落。对于普通高校的大学生而言&#xff0c;毕业季不仅是人生中的一次重要转折&#xff0c;更是实现梦想、放飞自我的绝佳时机。在这个特殊的时刻&#xff0c;一群年轻的大学生创业者凭借他们的智慧…

内网安全--隧道技术-CS上线本地

免责声明:本文仅做技术交流与学习...请勿非法搞破坏... ---隧道技术:硬刚网络协议,(你不让我走我偏走!) 解决不出网协议上线的问题&#xff08;利用出网协议进行封装出网&#xff09; 代理协议&#xff1a; SOCKS4/5 代理软件&#xff1a; SocksCap Proxifier ProxyChains(…

YOLOv8改进 | 融合模块 | 用Resblock+CBAM卷积替换Conv【轻量化网络】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 在目标检测领域内,尽管YOLO系列的算法傲视群雄,但在某些方面仍然存在改进的空间。在YOLOv8提取特征的时候,由于卷积的缘故,会导致很多信息的丢失。而凯明大神的神作resnet可以减少信息的丢失。本文给大家带…

磁盘管理以及文件系统08

1、为什么要对磁盘进行分区&#xff1f; 业务层面&#xff1a;为满足一定的需求所是做的特定操作。 2、硬盘是什么&#xff0c;以及硬盘的作用 硬盘&#xff1a;计算机的存储设备&#xff0c;一个或者多个带磁性的盘组成的&#xff0c;可以在盘片上进行数据的读写。硬盘的最…

LVGL圆弧、线条、图片、色环、按钮矩阵、文本区域、键盘部件

目录 LVGL圆弧部件 LVGL线条部件 LVGL图片部件 LVGL色环部件 LVGL按钮矩阵部件 LVGL文本区域部件 LVGL键盘部件 LVGL圆弧部件 圆弧部件以弧形滑动的形式来调节、显示某个参数的值。 圆弧部件组成部分&#xff1a; 背景弧&#xff08;LV_PART_MAIN&#xff09; 前景弧&am…

Spring AOP 切面按照一定规则切片并行查询Mapper并返回

需求&#xff1a; 有时候我们在查询mapper层时&#xff0c;有时候可能由于入参数据过大或者查询的范围较大&#xff0c;导致查询性能较慢&#xff0c;此时 我们需要将原本的查询按照一定规则将查询范围进行切面&#xff0c;然后分片查询&#xff0c;最后将查询结果进行组装合并…

MySQL入门学习-查询进阶.CASE

CASE 表达式是一种在 SQL 中用于进行条件判断和分支执行的功能。它可以根据不同的条件返回不同的结果&#xff0c;类似于编程语言中的 if-else 语句。 一、CASE 表达式有两种主要形式&#xff1a;简单 CASE 表达式和搜索 CASE 表达式。 1、简单 CASE 表达式&#xff1a; CAS…

浏览器提示网站不安全怎么办?有什么解决办法吗?

当你在浏览器中访问一个网站时&#xff0c;如果看到提示说该网站不安全&#xff0c;这通常是由于网站没有使用SSL证书或者SSL证书存在问题。SSL证书在这里扮演着非常关键的角色&#xff0c;下面我会详细解释它的作用以及如何解决这类不安全提示。 SSL证书的作用&#xff1a; 1…

tkinter实现窗口嵌入桌面

在桌面插件例如日历&#xff0c;便签或桌面宠物等等应用&#xff0c;通常希望能够将软件的窗口钉在桌面上&#xff0c;同时又不影响打开的其他窗口&#xff08;即不是置顶&#xff0c;而是常驻与桌面&#xff0c;即使用wind也不会将其窗口关闭&#xff09;。许多桌面美化类软件…

【CTF Web】CTFShow web11 Writeup(RCE+PHP+代码审计)

web11 1 阿呆听完自己菜死了&#xff0c;自己呆了。决定修好漏洞&#xff0c;绝对不能让自己再菜死了。 解法 可知 flag 在 config.php。 <?php # flag in config.php include("config.php"); if(isset($_GET[c])){$c $_GET[c];if(!preg_match("/system…

Vue3学习-组件之各种传参方式

props // 父界面传子界面 <childrenModu name"123" :getName"getName" /> // 父界面接收子界面数据 function getName(val:string){console.log(val) } // 子界面触发父界面函数 <button click"getName(11)"></button> // 子…

WorldSpace下的合批策略与ScreenSpace有什么区别

1&#xff09;WorldSpace下的合批策略与ScreenSpace有什么区别 2&#xff09;在iOS上用Metal取代OpenGL的多么 3&#xff09;在动画蓝图中将两个或多个动画同时融合到同一个网格 4&#xff09;Mipmap如何限定层级 这是第387篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的…

java面对对象编程-多态

介绍 方法的多态 多态是在继承&#xff0c;重载&#xff0c;重写的基础上实现的 我们可以看看这个代码 package b;public class main_ {public static void main(String[] args) { // graduate granew graduate(); // gra.cry();//这个时候&#xff0c;子类的cry方法就重写…

安全面试中的一个基础问题:你如何在数据库中存储密码?

3分钟讲解。 上周的面试故事 职位&#xff1a;初级安全工程师&#xff0c;刚毕业。 开始面试。 我&#xff1a;“这里你提到对数据安全有很好的理解。你能举例说明哪些方面的数据安全吗&#xff1f;” A&#xff1a;“当然。例如&#xff0c;当我们构建一个系统时&#xff0c;会…

结合Django和Vue.js构建现代Web应用

文章目录 1. 创建Django项目2. 配置Django后端3. 创建Vue.js前端4. 连接Django和Vue.js5. 构建和部署 在现代Web开发中&#xff0c;结合后端框架和前端框架是非常常见的&#xff0c;其中Django作为一种流行的Python后端框架&#xff0c;而Vue.js则是一种灵活强大的前端框架。本…

Spring Boot 中使用 Redis 和 Lua 脚本实现一个延时队列

效率工具 推荐一个程序员的常用工具网站&#xff0c;效率加倍嘎嘎好用&#xff1a;程序员常用工具 云服务器 云服务器限时免费领&#xff1a;轻量服务器2核4G腾讯云&#xff1a;2核2G4M云服务器新老同享99元/年&#xff0c;续费同价阿里云&#xff1a;2核2G3M的ECS服务器只需99…

仿冒、钓鱼、入侵……警惕邮件安全这些“坑”

为了保证用户对电子邮箱系统的安全使用&#xff0c;保证个人的隐私和财产的安全&#xff0c;我们呼吁每个人都要加强自己的网络安全意识&#xff0c;在对电子邮件进行处理的时候&#xff0c;要对钓鱼邮件进行认真的识别&#xff0c;同时还需要设定一个客户的密码来保证你的邮箱…

【Unity实战】Mirror/UNET中SyncVar和SyncList需要注意的点

SyncVar和SyncList在Unity开发中喜闻乐见&#xff0c;常用于脚本中字段的同步。 但也时常会出现修改了但是没同步的问题。 故本人根据过往踩的坑进行了以下总结&#xff1a; 1. 尽量不要用它进行类的同步 在Unity中&#xff0c;[SyncVar] 特性通常用于同步Unity网络游戏中基…

新旅程:类与对象的魔法课堂

&#x1f389;&#x1f389;&#x1f389;欢迎莅临我的博客空间&#xff0c;我是池央&#xff0c;一个对C和数据结构怀有无限热忱的探索者。&#x1f64c; &#x1f338;&#x1f338;&#x1f338;这里是我分享C/C编程、数据结构应用的乐园✨ &#x1f388;&#x1f388;&…

html+CSS部分基础运用7

项目1 设计简易灯箱画廊 1.实验所需素材 在trees文件夹中提供一个MP3文件和18个JPG文件&#xff0c;设计页面时可以使用。 2.编程实现简易灯箱画廊&#xff0c;鼠标单击任一个图像超链接&#xff0c;在底部浮动框架中显示大图像&#xff0c;效果如图4-1所示的页面。 图4-1 简…