Android 15?我想躺着

大家好,最近行业形势越来越差,希望大家安好吧。

之前写过一些 Android 版本的适配:

  • 安卓11来了,快!扶我起来
  • 安卓13来了,快!扶起我来!
  • Android 14 又来了?别扶!抬起我来吧!

今年继续,这对于自己来说也算是一个小的任务或者说传统吧。

同样,本篇文章也会从以下几个点切入:

  • 涉及所有应用的变更
  • 针对Android 15应用的变更
  • Android 15新功能探索
  • Android 15 时间线及总结

涉及所有应用的变更

Support for 16 KB page sizes

之前的 Android 版本中仅支持 4 KB 页面内存,这优项修改化了系统内存性能,使其适用于 Android 设备通常拥有的平均总内存量。从 Android 15 开始,Android 支持配置为使用 16 KB 页面大小的设备。

  • 系统面临内存压力时缩短应用启动时间:平均缩短 3.16%,谷歌测试的一些应用的改进更为显著(高达 30%)
  • 降低应用程序启动时的耗电量:平均减少 4.56%
  • 相机启动速度更快:热启动速度平均加快 4.48%
  • 冷启动速度平均加快 6.60%
  • 改善系统启动时间:平均改善1.5%(约0.8秒)

如果应用使用的是 JavaKotlin 构建的话,则无需做处理,可以直接适配,但如果应用使用任何NDK库(无论是直接使用还是通过 SDK 间接使用),则需要重新构建应用,使其在这些 16 KB 设备上运行。

构建文档如下:https://developer.android.com/guide/practices/page-sizes#build

隐私空间

隐私空间是 Android 15 中的一项新功能,用户可在其设备上创建一个单独的空间,通过额外的身份验证,让敏感应用远离窥探。由于隐私空间中的应用可见性受到限制,因此某些类型的应用需要采取额外步骤才能查看用户隐私空间中的应用并与之交互。由于私人空间中的应用保存在单独的用户配置文件中(类似于工作配置文件),因此应用不应假设其应用的任何已安装副本(不在主配置文件中)都在工作配置文件中。

这块大部分开发者无需考虑,和应用没有什么关系,但对 Launcher 和应用商店有些影响,需要坐下适配。

Launcher

如果在开发 Launcher ,则必须先执行以下操作,然后隐私空间中的应用才可见:

  1. 开发的 Launcher 必须被指定为设备的默认应用,即拥有该 ROLE_HOME 角色。
  2. 必须 在应用的清单文件中ACCESS_HIDDEN_PROFILES 声明正常权限。

声明该ACCESS_HIDDEN_PROFILES权限 Launcher 必须处理以下私有空间用例:

  1. 必须有一个单独的启动器容器,用于安装位于私人空间的应用。
  2. 用户必须能够隐藏和显示私人空间容器。
  3. 用户必须能够锁定和解锁私人空间容器。
  4. 锁定期间,私人空间容器内的任何应用都不应可见,或无法通过搜索等机制发现。
应用商店应用

隐私空间中包含一个“安装应用”按钮,该按钮会启动隐式 Intent 以将应用安装到用户的私人空间中。需要在应用的清单文件中声明一个带有 CATEGORY_APP_MARKET 的 “”。

这个东西怎么说呢,冠冕堂皇,看着好像是给用户一些隐私,但隐私有直接在页面中展示的么?难道不应该是通过一些用户自定义的特殊操作才能触发的才叫隐私么?不过有比没有强,相信国内的各大厂商会把这个功能做的更好,真正成为“隐私空间”。

MinSDK 更新

MinSDK 版本从 23 增加到了 24,大家都知道,Android 14 中将 MinSDK 改为了23,想要彻底杜绝应用设置 SDK 版本为 23 以下从而绕开动态权限,这回又升级了一下,应用想绕过 FileProvider 处理一些文件也不可以了,之后肯定会越来越高,这样挺好,能杜绝一些流氓应用。

如果需要测试针对旧 API 级别的应用,可以使用以下 ADB 命令:

adb install --bypass-low-target-sdk-block FILENAME.apk

Camera and media

顾名思义,这就是相机和多媒体相关应用需要注意的修改,在 Android15 中,当达到资源限制时,直接和卸载音频播放现在会使先前打开的直接或卸载音轨无效。在 Android15 之前,如果一个应用在另一个应用正在播放音频时请求直接或卸载音频播放,且已达到资源限制,则该应用将无法打开新的 AudioTrack。从 Android15 开始,当应用请求直接或卸载播放且达到资源限制时,系统会使任何当前打开的 AudioTrack 对象无效,从而阻止满足新曲目请求。

有需要查看详细信息的可以进官网看下:https://developer.android.com/about/versions/15/behavior-changes-all#camera-media

预测返回动画

这个也是之前 Android 版本中就加入的新功能,从 Android 15 开始, 预测返回动画的开发者选项已被移除(默认打开)。对于已完全或在 Activity 级别选择启用预测返回手势的应用,现在将显示返回主页、跨任务和跨活动等系统动画 。如果应用受到影响,请执行以下操作:

1、确保应用已正确迁移以使用预测返回手势。

2、确保 fragment transitions 与预测性返回导航兼容。

3、放弃动画和框架转换,改用动画器和 androidx 转换。

4、迁移 FragmentManager 未知的返回堆栈。改用由 FragmentManager Navigation 组件管理的返回堆栈。

针对Android 15应用的变更

数据同步前台服务超时行为

Android 15 为以 Android 15 或更高版本为目标平台的应用引入了新的超时行为 dataSync。系统允许应用的 dataSync 服务在 24 小时内总共运行 6 小时,之后系统将调用正在运行的服务的 Service.onTimeout(int, int) 函数。此时,Service 有几秒钟的时间调用 Service.stopSelf()。当 Service.onTimeout() 被调用时,服务不再被视为前台服务。如果服务未调用 Service.stopSelf(),则会报错。

override fun onTimeout(startId: Int) {super.onTimeout(startId)stopSelf()
}

由于目前 Android 15 还没有正式发布,现在最新版本为 Beta 2 ,在 Beta 2 中,错误显示为 ANR。

注意:应用的所有前台服务都共享 6 小时的时间限制dataSync。例如,如果应用运行一项dataSync服务 4 小时,然后启动另一项dataSync服务,则第二项服务将只允许运行 2 小时。但是,如果用户将应用置于前台,计时器将重置,应用将有 6 小时的可用时间。如果应用的dataSync前台服务在过去 24 小时内已运行了 6 个小时,则无法启动另一个dataSync前台服务,除非用户将应用调至前台(这会重置计时器)。如果尝试启动另一个dataSync前台服务,系统会抛出 ForegroundServiceStartNotAllowedException 一条错误消息,例如“前台服务类型 dataSync 的时间限制已用尽

新媒体处理前台服务类型

Android 15 引入了一种新的前台服务类型:mediaProcessing,此 Service 类型适用于转码媒体文件等操作。例如,媒体应用可能会下载音频文件,并需要将其转换为其他格式才能播放。

<serviceandroid:name="Service"android:foregroundServiceType="mediaProcessing" />

可以使用 mediaProcessing 前台服务来确保即使应用在后台,转换仍会继续进行。

Receiver 启动前台服务的限制

BOOT_COMPLETED 广播接收器启动前台服务有了新的限制,不得启动以下类型的前台服务:dataSynccameramediaPlaybackphoneCallmediaProjectionmicrophonemicrophone(此限制自 Android 14 起生效)如果BOOT_COMPLETED接收器尝试启动任何类型的前台服务,系统将抛出异常:ForegroundServiceStartNotAllowedException。

有SYSTEM_ALERT_WINDOW权限时启动前台服务

之前 Android 版本中如果应用程序拥有该 SYSTEM_ALERT_WINDOW 权限,即使应用程序当前处于后台,也可以启动前台服务。如果应用以 Android 15 为目标平台,则此豁免范围现在缩小了。应用现在需要获得权限 SYSTEM_ALERT_WINDOW,并且还必须具有可见的 overlay window。也就是说,应用需要先启动一个 TYPE_APPLICATION_OVERLAY 窗口,并且该窗口必须在启动前台服务之前可见。如果尝试从后台启动前台服务而不满足这些新要求(并且没有其他豁免),系统将抛出 ForegroundServiceStartNotAllowedException。

如果声明了 SYSTEM_ALERT_WINDOW 权限并从后台启动前台服务,则可能会受到此更改的影响。如果应用报错 ForegroundServiceStartNotAllowedException,需要检查应用的操作顺序,并确保在应用尝试从后台启动前台服务之前,应用已有一个 overlay window。可以通过调用 View.getWindowVisibility() 来检查 overlay window 当前是否可见,或者也可以重写View.onWindowVisibilityChanged(), 当可见性发生变化时会接收到回调信息。

阻止与堆栈顶部 UID 不匹配的应用启动

流氓应用可以在同一任务中启动另一个应用的 Activity,然后将自己叠加在上面,造成该应用的假象。这

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

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

相关文章

区块链游戏(链游)安全防御:抵御攻击的策略与实践

一、引言 区块链游戏&#xff0c;或称为链游&#xff0c;近年来随着区块链技术的普及而迅速崛起。然而&#xff0c;如同其他任何在线平台一样&#xff0c;链游也面临着各种安全威胁。本文将探讨链游可能遭遇的攻击类型以及如何通过有效的策略和技术手段进行防御。 二、链游可…

小孩天赋是怎样炼成的 懂孩子比爱孩子更重要 详细天赋评估列表 观察非常细致 培养领导能力的方法

懂孩子比爱孩子更重要 “懂孩子比爱孩子更重要&#xff0c;懂才更准确的去爱” 这句话说得很有道理。理解孩子的内心世界、需求和独特个性&#xff0c;比单纯地给予爱更加重要。以下是一些解释&#xff1a; 理解孩子的需要&#xff1a;懂孩子意味着理解他们的需求、恐惧、欢乐…

动软代码生成器

目前代码生成器好久没有更新了&#xff0c;今天下载变成电影频道了&#xff08;掉泪&#xff09;&#xff1b;这里做个记录&#xff1b; 目前我使用该软件主要是使用数据表》代码功能&#xff1b;自己创建模板&#xff0c;生成前后台代码&#xff1b;前台主要是vue3.0&#xff…

大模型时代的具身智能系列专题(十)

Sergey Levine团队 Sergey Levine目前是UC Berkeley电气工程与计算机科学系的副教授&#xff0c;同时是RAIL(Robotic AI&Learning LabBAIR)实验室主任。除了在Berkeley的教职&#xff0c;Levine也是Google Brain的研究员&#xff0c;他也参与了Google知名的机器人大模型PA…

数据仓库之核心模型与扩展模型分离

在数据仓库的设计和实施过程中&#xff0c;核心模型与扩展模型分离是一种常见的策略&#xff0c;旨在提高数据仓库的灵活性、可维护性和扩展性。这种分离策略的主要优势和实施方法如下&#xff1a; 核心模型&#xff08;Core Model&#xff09; 核心模型是数据仓库中稳定、共…

C#——随机类Random类

Random类 C#的Random类是用于生成随机数的类&#xff0c;属于System命名空间&#xff0c;可以生成各种类型的随机数&#xff0c;例如整型、双精度浮点型、布尔型等。 使用方法&#xff1a; 使用random数据类型关键字 声明一个random的变量 值使用new random 来实例化这个变量…

使用python绘制日历热力图

使用python绘制日历热力图 日历热力图效果代码 日历热力图 日历热力图&#xff08;Calendar Heatmap&#xff09;是一种数据可视化图表&#xff0c;用于展示时间数据的分布和趋势。它将数据按天映射到一个日历中&#xff0c;通过颜色的变化表示每天的数据值大小。这种图表常用…

Lua 时间工具类

目录 一、前言 二、函数介绍 1.DayOfWeek 枚举定义 2.GetTimeUntilNextTarget 3.GetSpecificWeekdayTime 三、完整代码 四、总结 一、前言 当我们编写代码时&#xff0c;我们经常会遇到需要处理日期和时间的情况。为了更方便地处理这些需求&#xff0c;我们可以创建一个…

基于GFlowNets的蚁群抽样组合优化

本文将基于GFACS论文&#xff0c;探讨其核心思想、技术细节以及在实际应用中的优势。 GFlowNet&#xff1a;摊销MCMC成本的有效工具 GFACS的核心是GFlowNet&#xff0c;它通过训练学习状态转移的概率分布&#xff0c;从而替代传统的MCMC采样方法。GFlowNet的优势在于&#xff1…

从Series到DataFrame:Python数据操作的转换技巧

在数据分析和处理的过程中&#xff0c;我们经常需要在Pandas库中对Series和DataFrame进行操作。本文将介绍如何将Series转换为DataFrame&#xff0c;以及如何提取DataFrame中的某一列。首先&#xff0c;我们将通过使用to_frame()函数将Series转换为DataFrame。然后&#xff0c;…

去雾算法中生成器,判别器有什么用

生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#xff09;是生成对抗网络&#xff08;Generative Adversarial Networks, GANs&#xff09;中的两个核心组件&#xff0c;它们在网络中扮演着相互竞争和相互促进的角色。下面分别解释它们的作用&am…

SQL实验 连接查询和嵌套查询

一、实验目的 1&#xff0e;掌握Management Studio的使用。 2&#xff0e;掌握SQL中连接查询和嵌套查询的使用。 二、实验内容及要求&#xff08;请同学们尝试每道题使用连接和嵌套两种方式来进行查询&#xff0c;如果可以的话&#xff09; 1&#xff0e;找出所有任教“数据…

ubuntu使用Docker笔记

一、参考资料 1、B站视频 尚硅谷Docker实战教程 2、有心人整理的笔记 Docker笔记&#xff08;周阳版&#xff09; 3、菜鸟教程 Docker 教程 以下是本人的折腾实践。 二、Docker的安装 2.1、使用清华源安装docker&#xff0c;清华源官方教程。 本人是在ubuntu20.04下安装的…

知识图谱应用---智慧医疗

文章目录 智慧医疗典型应用 智慧医疗 智慧医疗是利用先进的物联网与移动通信技术、大数据及人工智能等新一代IT技术&#xff0c;实现医疗信息系统与医疗过程的智能化辅助与自动化处理&#xff0c;实现医疗业务流程的数字化运作&#xff0c;实现患者与医务人员、医疗机构、医疗设…

ChatGPT制作一个简单的客服机器人

包含功能&#xff1a; MVP&#xff08;最简可行产品&#xff09;版本的客服机器人应该聚焦于核心功能&#xff0c;以快速上线和测试用户反馈为目标。以下是一个简化的版本&#xff1a; 自动问答&#xff08;FAQ&#xff09;功能&#xff1a; 支持回答常见问题&#xff0c;例如…

转让北京书画院自己名下随时配合变更

北京地区现在已经停批了书画院、科技院、研究院等等只要是带院、中心、所等等都是挺不能新设立也不能核名。要是想经营这类的企业可以选择收购&#xff0c;目前市面上有书画院、教育科技院、教育研究院、中医研究院、信息技术研究院、医学研究院等等因为停批的一个原因导致转让…

基于MetaGPT构建LLM 订阅 Agent

前言 在上一篇文章中&#xff0c;我们学习了如何利用MetaGPT框架构建单智能体和多智能体&#xff0c;并通过一个技术文档撰写Agent和课后作业较为完整的理解一个Agent的需求分析和开发流程&#xff1b;但是技术要和应用结合才能得到更广泛的推广&#xff1b;在本文中&#xff0…

ClickHouse内幕(1)数据存储与过滤机制

本文主要讲述ClickHouse中的数据存储结构&#xff0c;包括文件组织结构和索引结构&#xff0c;以及建立在其基础上的数据过滤机制&#xff0c;从Part裁剪到Mark裁剪&#xff0c;最后到基于SIMD的行过滤机制。 数据过滤机制实质上是构建在数据存储格式之上的算法&#xff0c;所…

ShowDoc item_id 未授权SQL注入漏洞复现

0x01 产品简介 ShowDoc 是一个开源的在线文档协作平台,它支持Markdown、图片等多种格式,方便团队成员共同编辑和分享文档。企业常见使用场景是使用其进行接口文档、内部知识库管理。 0x02 漏洞概述 2024年6月,ShowDoc官方发布新版本修复了一个SQL注入漏洞。鉴于该漏洞无前…

DTO和POJO的区别

在Java企业应用开发中&#xff0c;POJO&#xff08;Plain Old Java Object&#xff09;和DTO&#xff08;Data Transfer Object&#xff09;是两种常用的数据对象&#xff0c;它们在不同的上下文中扮演不同的角色&#xff1a; POJO&#xff08;Plain Old Java Object&#xff…