Android 15 正式发布到 AOSP ,来了解下新特性和适配需求
The following article is from GSYTech Author 恋猫de小郭
其实在年初的时候就整理过《2024 ,Android 15 预览版来了》 和《提前窥探 Android 15 的新功能与适配》的相关内容,而随着时间进度推进,近日谷歌也正式发布了 Android 15 的正式版,虽然没什么「大亮点」,但是作为开发者,还是需要关注下有什么新特性和需要适配的地方。
本次除了 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 指定 wght 和 ital轴,文本渲染器会自动调整 WGHT 和 Ital 轴的值。 中文、日文和韩文 (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 增加了对应用的监管支持,通过检测它们是否正在读取敏感信息,系统可以在应用执行敏感操作时通知用户他们正在被记录。 Android 15 添加了 allowCrossUidActivitySwitchFromBelow 属性,该属性可阻止与堆栈上排名靠前 UID 不匹配的应用启动 Activity,以帮助防止 task hijacking attacks。 在 Android 15 中,PendingIntent 创建者默认阻止后台活动启动。
其实在之前的《提前窥探 Android 15 的新功能与适配》我们就聊过适配支持,例如:
<application android:allowCrossUidActivitySwitchFromBelow="false" >
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setAllowCrossUidActivitySwitchFromBelow(true);
...
}
AndroidManifest Tag 限制
限制AndroidManifest.xml字段的 tag 数量,比如在 Application 下只能有不超过3000个的 Activity : 限制了 attr 相关 string 的长度还有限制特殊字符。
对于不符合要求会导致 Apk 安装失败并提示 SecurityException :
前台服务
dataSync camera mediaPlayback phoneCall mediaProjection microphone microphone(Android 14 就有了)
dataSync 和 mediaProcessing 的前台服务类型现在有大约 6 小时的超时时间。
Window Insets
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。
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
最后推荐一下我做的网站,玩Android: wanandroid.com ,包含详尽的知识体系、好用的工具,还有本公众号文章合集,欢迎体验和收藏!
扫一扫 关注我的公众号
如果你想要跟大家分享你的文章,欢迎投稿~
┏(^0^)┛明天见!