持续优化 | Android 15 Beta 2 现已发布
最大限度地降低电池消耗
https://developer.android.google.cn/develop/background-work/background-tasks提升应用性能流畅性
https://developer.android.google.cn/topic/performance/baselineprofiles/overview提供出色的设备体验
https://developer.android.google.cn/quality/technical保护用户隐私和安全
https://developer.android.google.cn/privacy-and-security/about
Android Beta 版 https://www.google.com/android/beta Android 15 开发者网站 https://developer.android.google.cn/about/versions/15 Pixel 的下载内容 https://developer.android.google.cn/about/versions/15/download 版本发布时间表 https://developer.android.google.cn/about/versions/15/overview?hl=zh-cn#timeline 听到您的想法 https://developer.android.google.cn/about/versions/15/feedback
现已支持更多设备
合作伙伴 https://developer.android.google.cn/about/versions/15/devices
让 Android 更高效
前台服务变更
dataSync https://developer.android.google.cn/about/versions/15/behavior-changes-15?hl=zh-cn#datasync-timeout mediaProcessing https://developer.android.google.cn/about/versions/15/changes/foreground-service-types 现在有约为 6 小时的超时 https://developer.android.google.cn/about/versions/15/behavior-changes-15?hl=zh-cn#datasync-timeout Service.onTimeout (int, int) https://developer.android.google.cn/reference/android/app/Service#onTimeout(int,%20int) Service.stopSelf () https://developer.android.google.cn/reference/android/app/Service#stopSelf()
新要求 https://developer.android.google.cn/about/versions/15/behavior-changes-15?hl=zh-cn#fgs-sysalert SYSTEM_ALERT_WINDOW https://developer.android.google.cn/reference/android/Manifest.permission#SYSTEM_ALERT_WINDOW
https://io.google/2024/explore/4ad3e7fe-ca50-4c24-8c48-5c04ee39e4d0/
即将支持 16 KB 页面大小
NDK https://developer.android.google.cn/ndk
页面尺寸较大的设备可以提高内存密集型工作负载的性能。虽然我们的测试可能无法代表生态系统中的所有设备,但我们对配置了 16 KB 尺寸页面的设备进行了初始测试,发现如下性能提升:
在系统面临内存压力时缩短应用启动时间:平均减少了 3.16%,我们测试的部分应用有更显著的改进 (高达 30%) 启动应用期间的功耗降低:平均减少 4.56% 相机启动速度更快:热启动平均提高 4.48%,冷启动平均提高 6.60% 系统启动时间缩短:平均提升 1.5% (约 0.8 秒)
检查您的应用是否受到影响 https://developer.android.google.cn/guide/practices/page-sizes#16-kb-impact 重建应用 https://developer.android.google.cn/guide/practices/page-sizes#build 在 16 KB 场景中测试应用 https://developer.android.google.cn/guide/practices/page-sizes#test
实现 Android GPU 访问现代化
Vulkan 图形 API https://developer.android.google.cn/ndk/guides/graphics NDK https://developer.android.google.cn/ndk
Vulkan 是 Android 的首选 GPU 接口。因此,Android 15 将 ANGLE 作为在 Vulkan 上运行 OpenGL ES 的可选层。迁移到 ANGLE 会将 Android OpenGL 实现标准化,以提高其兼容性,并在某些情况下提升性能。您可以用 ANGLE 来测试您的 OpenGL ES 应用的稳定性及性能,方法如下:在 Android 15 中,使用 "开发者选项→Experimental: Enable ANGLE" 设置。
ANGLE https://chromium.googlesource.com/angle/angle
Vulkan 上的
Android ANGLE 路线图
现代图形
Android 15 延续了我们对 Android 的 Canvas 图形系统进行的现代化改造,并增加了新功能:
Matrix44 提供了用于转换坐标的 4×4 矩阵,当您想要处理 3D 画布时可使用此矩阵。 clipShader 将当前剪辑片段与指定的着色器相交,clipOutShader 则将剪辑设置为当前剪辑片段与着色器的差值,两者都将着色器视为 Alpha 遮罩。这一功能可以有效支持复杂形状的绘制。
Matrix44 https://developer.android.google.cn/reference/android/graphics/Matrix44 clipShader https://developer.android.google.cn/reference/android/graphics/Canvas#clipShader(android.graphics.Shader) clipOutShader https://developer.android.google.cn/reference/android/graphics/Canvas#clipOutShader(android.graphics.Shader)
更高效的 AV1 软件解码
dav1d
https://code.videolan.org/videolan/dav1d
https://io.google/2024/explore/25ff7e80-ca0b-4b3b-aa89-aa796618b3af/
更私密、更安全的 Android
保障 Android 用户安全 https://io.google/2024/explore/f757438a-844f-4c59-8dd4-9a5580a5e23d/
私密空间
系统 Sharesheet https://developer.android.google.cn/training/sharing/send 照片选取器 https://developer.android.google.cn/training/data-storage/shared/photopicker Android 15 Beta 2.1 https://developer.android.google.cn/about/versions/15/release-notes#beta-2.1
改进了部分照片访问权限
现在,当授予媒体部分访问权限时,应用可以仅突出显示最近选择的照片和视频。对于频繁请求访问照片和视频的应用而言,这可以改善用户的体验。通过 ContentResolver 查询 MediaStore 时启用 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 storage
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)
部分访问权限 https://developer.android.google.cn/about/versions/14/changes/partial-photo-video-access ContentResolver https://developer.android.google.cn/reference/android/content/ContentResolver MediaStore https://developer.android.google.cn/reference/android/provider/MediaStore QUERY_ARG_LATEST_SELECTION_ONLY https://developer.android.google.cn/reference/android/provider/MediaStore#QUERY_ARG_LATEST_SELECTION_ONLY
内容 URI 的权限检查
Android 15 引入了一组新的 API,用于对内容 URI 执行权限检查。它们包括:
Context.checkContentUriPermissionFull: 此 API 对内容 URI 执行完全权限检查。 Activity 清单属性 requireContentUriPermissionFromCaller: 此 API 在 activity 启动时对提供的内容 URI 强制执行指定的权限。 Activity 调用方的 ComponentCaller class: 它表示启动 activity 的应用。
Context.checkContentUriPermissionFull https://developer.android.google.cn/reference/android/content/Context#checkContentUriPermissionFull(android.net.Uri,%20int,%20int,%20int) requireContentUriPermissionFromCaller https://developer.android.google.cn/guide/topics/manifest/activity-element#requireContentUriPermissionFromCaller ComponentCaller class https://developer.android.google.cn/reference/android/app/ComponentCaller
安全的后台活动启动
<application android:allowCrossUidActivitySwitchFromBelow="false" >
allowCrossUidActivitySwitchFromBelow
https://developer.android.google.cn/guide/topics/manifest/application-element#allowCrossUidActivitySwitchFromBelow
一旦您的应用选择启用新的保护机制,就可以在 Activity 中使用此 API 选择退出特定的共享活动:
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setAllowCrossUidActivitySwitchFromBelow(true);
...
}
https://developer.android.google.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 14 的最低目标 SDK 更改 https://developer.android.google.cn/about/versions/14/behavior-changes-all#minimum-target-api-level
优秀的设备体验
改进的大屏多任务处理
构建自适应 Android 应用 https://io.google/2024/explore/d16737ba-e336-4b68-8928-24692a88e644/ 利用 Material 3 自适应库构建界面 https://io.google/2024/explore/2dff9b4c-4069-4bde-ab9a-c5f53dc0fdb8/ 为大屏进行设计 https://developer.android.google.cn/design/ui/large-screens
窗口边衬区
Configuration.screenWidthDp https://developer.android.google.cn/reference/android/content/res/Configuration#screenWidthDp screenHeightDp https://developer.android.google.cn/reference/android/content/res/Configuration#screenHeightDp 全屏强制执行 https://developer.android.google.cn/about/versions/15/behavior-changes-15?hl=zh-cn#edge-to-edge 现在还包括系统栏的深度 https://developer.android.google.cn/about/versions/15/behavior-changes-15#stable-configuration
画中画
override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {
if (pipState.isTransitioningToPip()) {
// Hide UI elements
}
}
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
if (isInPictureInPictureMode) {
// Unhide UI elements
}
}
onPictureInPictureModeChanged https://developer.android.google.cn/reference/android/app/Activity.html#onPictureInPictureModeChanged(kotlin.Boolean,%20android.content.res.Configuration) PictureInPictureUiState https://developer.android.google.cn/reference/android/app/PictureInPictureUiState onPictureInPictureUiStateChanged https://developer.android.google.cn/reference/android/app/Activity#onPictureInPictureUiStateChanged(android.app.PictureInPictureUiState) isTransitioningToPip() https://developer.android.google.cn/reference/android/app/PictureInPictureUiState#isTransitioningToPip()
使用 Generated Previews
实现更丰富的 Widget 预览
AppWidgetManager https://developer.android.google.cn/reference/android/appwidget/AppWidgetManager setWidgetPreview https://developer.android.google.cn/reference/android/appwidget/AppWidgetManager#setWidgetPreview(android.content.ComponentName,%20int,%20android.widget.RemoteViews) getWidgetPreview https://developer.android.google.cn/reference/android/appwidget/AppWidgetManager#getWidgetPreview(android.content.ComponentName,%20android.os.UserHandle,%20int) removeWidgetPreview https://developer.android.google.cn/reference/android/appwidget/AppWidgetManager#removeWidgetPreview(android.content.ComponentName,%20int)
预测性返回
手势导航 https://developer.android.google.cn/design/ui/mobile/guides/foundations/system-bars 正确迁移 https://developer.android.google.cn/guide/navigation/custom-back/predictive-back-gesture
为通知渠道设置 VibrationEffect
Android 15 Beta 2 现在支持使用 NotificationChannel.setVibrationEffect,按接收渠道为收到的通知设置丰富的振动类型,帮助用户在无需查看设备即可区分不同类型的通知。
NotificationChannel.setVibrationEffect https://developer.android.google.cn/reference/android/app/NotificationChannel#setVibrationEffect(android.os.VibrationEffect)
Health Connect 的新数据类型
训练计划是结构化的锻炼计划,可帮助用户实现其健身目标。训练计划支持包括:
完成目标:围绕卡路里消耗、距离、持续时间、重复次数和步数等 成绩目标:围绕尽可能多的重复次数 (AMRAP)、节奏、心率、力量、感知消耗率和速度等
卡路里消耗
https://developer.android.google.cn/reference/android/health/connect/datatypes/ExerciseCompletionGoal.ActiveCaloriesBurnedGoal
距离
https://developer.android.google.cn/reference/android/health/connect/datatypes/ExerciseCompletionGoal.DistanceGoal
持续时间
https://developer.android.google.cn/reference/android/health/connect/datatypes/ExerciseCompletionGoal.DurationGoal
重复次数
https://developer.android.google.cn/reference/android/health/connect/datatypes/ExerciseCompletionGoal.RepetitionsGoal
步数
https://developer.android.google.cn/reference/android/health/connect/datatypes/ExerciseCompletionGoal.StepsGoal
尽可能多的重复 (AMRAP)
https://developer.android.google.cn/reference/android/health/connect/datatypes/ExercisePerformanceGoal.AmrapGoal
节奏
https://developer.android.google.cn/reference/android/health/connect/datatypes/ExercisePerformanceGoal.CadenceGoal
心率
https://developer.android.google.cn/reference/android/health/connect/datatypes/ExercisePerformanceGoal.HeartRateGoal
力量
https://developer.android.google.cn/reference/android/health/connect/datatypes/ExercisePerformanceGoal.PowerGoal
感知消耗率
https://developer.android.google.cn/reference/android/health/connect/datatypes/ExercisePerformanceGoal.RateOfPerceivedExertionGoal
速度
https://developer.android.google.cn/reference/android/health/connect/datatypes/ExercisePerformanceGoal.SpeedGoal
"选择称呼方式" 的系统偏好设置
通过 ICU 74 实现现代国际化
Android 15 Beta 2 包括 ICU 74 的 API 相关更新。ICU 74 包含来自 Unicode 15.1 的更新,包括新字符、表情符号、安全机制和相应的 API 与实现,以及 CLDR 44 区域设置数据的更新,新语言区域和各种补充与修正。
ICU 74 https://icu.unicode.org/download/74 Unicode 15.1 http://blog.unicode.org/2023/09/announcing-unicode-standard-version-151.html CLDR 44 https://cldr.unicode.org/index/downloads/cldr-44
中日韩 (CJK) 可变字体
从 Android 15 开始,中文、日文和韩文的字体文件 NotoSansCJK 成为可变字体。可变字体为中日韩语言的创意排版开辟了新的可能性。设计师可以探索更广泛的风格,并创造以前难以或无法实现的布局,打造引人注目的视觉效果。
新的日语 Hentaigana 字体
避免文字被裁切
TextView https://developer.android.google.cn/reference/android/widget/TextView
setUseBoundsForWidth https://developer.android.google.cn/reference/android/widget/TextView#setUseBoundsForWidth(boolean)
https://developer.android.google.cn/reference/android/widget/TextView#setShiftDrawingOffsetForStartOverhang(boolean)
<TextView
android:fontFamily="cursive"
android:text="java" />
<TextView
android:fontFamily="cursive"
android:text="java"
android:useBoundsForWidth="true"
android:shiftDrawingOffsetForStartOverhang="true" />
<TextView
android:text="คอมพิวเตอร์" />
<TextView
android:text="คอมพิวเตอร์"
android:useBoundsForWidth="true"
android:shiftDrawingOffsetForStartOverhang="true" />
应用兼容性
官方文档 https://developer.android.google.cn/about/versions/15/overview#timeline
即刻体验 Android 15
反馈 https://developer.android.google.cn/about/versions/15/feedback 官方文档 https://developer.android.google.cn/about/versions/15/devices 注册受支持的 Pixel 设备 https://www.google.com/android/beta 使用 64 位的 Android 模拟器系统映像 https://developer.android.google.cn/about/versions/15/get#on_emulator 加入了 Android 14 QPR Beta 版计划 https://developer.android.google.cn/about/versions/14/get-qpr
为获得最佳 Android 15 开发体验,我们建议您使用最新的 Android Studio Koala 预览版。设置完毕后,您可以:
体验新功能和 API——在开发者预览版和 Beta 版计划的早期阶段,您的反馈至关重要。欢迎您继续在我们的跟踪页报告问题。 测试您当前应用的兼容性——了解您的应用是否受到 Android 15 版本更新的影响;请将您的应用安装到运行 Android 15 的设备或模拟器上,并进行彻底的测试。
最新的 Android Studio Koala 预览版 https://developer.android.google.cn/studio/preview 设置 https://developer.android.google.cn/about/versions/15/setup-sdk 跟踪页 https://developer.android.google.cn/about/versions/15/feedback
https://developer.android.google.cn/about/versions/15/overview#pixel
推荐阅读