likes
comments
collection
share

Android 15 正式发布到 AOSP ,来了解下新特性和适配需求其实在年初的时候就整理过《2024 ,Androi

作者站长头像
站长
· 阅读数 50

Android 15 正式发布到 AOSP ,来了解下新特性和适配需求其实在年初的时候就整理过《2024 ,Androi

Android 15 正式发布到 AOSP ,来了解下新特性和适配需求其实在年初的时候就整理过《2024 ,Androi

更多 16K 详细可见:

新特性

本次除了 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 正式发布到 AOSP ,来了解下新特性和适配需求其实在年初的时候就整理过《2024 ,Androi

多语言和排版

  • 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 中的高级闪光强度调整可以在拍摄图像时精确控制 SINGLETORCH 模式下的闪光强度
  • Android 15 可通用 MIDI 数据包支持扩展到虚拟 MIDI 应用,使合成应用能够将合成器应用作为虚拟 MIDI 2.0 设备进行控制,类似使用 USB MIDI 2.0 设备一样

交互

隐私安全

适配

  • 在 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 :

    Android 15 正式发布到 AOSP ,来了解下新特性和适配需求其实在年初的时候就整理过《2024 ,Androi

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

    Android 15 正式发布到 AOSP ,来了解下新特性和适配需求其实在年初的时候就整理过《2024 ,Androi

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

Android 15 正式发布到 AOSP ,来了解下新特性和适配需求其实在年初的时候就整理过《2024 ,Androi

前台服务

就像前面所说的,前台服务一直是比较损耗电池寿命的操作,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),但不鼓励使用它们进行布局计算:

Android 15 正式发布到 AOSP ,来了解下新特性和适配需求其实在年初的时候就整理过《2024 ,Androi

E2E 对应用 UI 的影响:

对于全面屏手势导航条:

对于三按键导航栏:

  • 默认情况下,不透明度(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://juejin.cn/post/7410645914585317403
评论
请登录