Google I/O 2023 Look Back for Android Developers

4,893 阅读10分钟

这是一篇虽迟但到的 Google I/O 2023 for Android Developers 回顾。

还记得 2017 年 AlphaGo 惊艳了全世界,掀起了近 20 年第一波 AI 狂潮,Google 也在当年的 I/O 大会宣布战略从 Mobile First 转向 AI First。而去年年底 ChatGPT 的出现就像 AI 火箭的二级点火,全世界的大型科技公司都纷纷大把下注。Google 也向 AI 领域投入更多的资源,做了更多的内部资源整合,今年的 I/O 大会的 Opening 更是绝大部分时间都在谈论 AI。由于 AI 挤占了大量的篇幅,Android 开发者们似乎感到有些失落,但 Android 开发也未必没有新闻。本文会总结一下 I/O 前后和 Android 开发者有关的技术更新。

Jetpack Compose

根据 Google 的数据,在 Google Play 上排名前 1000 的应用中有 24% 都使用了 Compose。Compose 这几年可以说推广的很不错,从 Compose 本身来说从性能到生态也都有不小的提升。

Material 3

首先,Material 3 是 Google 最新推荐的 Material Design 设计风格的实现。最近它更加趋于完善。新增了 bottom sheets、日期时间选择器、搜索功能条等新组件。大量的核心组件进入稳定阶段,且新增了大量的用户交互支持。更多信息可以参考官方介绍视频:www.youtube.com/watch?v=tu0…

多种屏幕支持

Google 希望 Jetpack Compose 可以成为 Google 全平台操作系统的 UI 开发框架,不仅仅是手机,还包括 TV、Wear OS 等等,此外还有新推出的 Pixel Fold 等新型硬件设备也需要 UI 的适配。因此,将 Compose 扩展到多种屏幕是 Compose 在短期未来内的一个重要方向。

在今年的 I/O 大会上 Google 首先宣布了 Compose for TV 进入 Alpha 阶段。如今大部分国产智能电视都基于 Android 系统,以后如果 Compose for TV 进入稳定阶段,开发者可以在 TV 应用的开发上大幅增加效率,也能更高效地将手机端基于 Compose 开发的 App 移植到 Android TV 端。此外,Compose for Wear OS 1.1 版本也进入稳定阶段,而即将到来的 1.2 版本也已经进入 Aplha 阶段。

近两年,Android Widget 小组件似乎再次被用户、手机厂商以及开发者们所关注。而用于 Widget UI 开发的 Compose-Style API —— Glance,今年也进入了 Beta 阶段。开发者在后续的开发中可以逐步抛弃难用的 RemoteView 从而体验声明式编程的快感。

Android Sutdio

Android Studio 也将在即将到来的新版本中获得全方位的提升,由于更新点多而细,这里只介绍几个重要的大更新:

Studio Bot

AI 大语言模型最近这么火,不能不赋能 Android 开发。Android Studio 加入了新功能 Studio Bot,开发者可以在编写代码时随时向 Studio Bot 提问,Sutdio Bot 可以像 ChatGPT 一样回答问题,或给出示例代码。Studio Bot 基于 Google 自己的 PaLM 2 大语言模型开发,当前 Google 自己也宣称 Studio Bot 仍处于非常早期的阶段,并且该模型当前仍在训练中。Studio Bot 在预览版的 HedgeHog 版本可用。我本来满怀期待的安装了 Android Studio HedgeHog 准备试用,结果:

图片

Studio Bot 当前仅对美国开放,所以你需要一个美区的 Google 账号才能试用。不过从官方演示视频中的一些 Demo 来看表现相当不错:

图片

截图无法展示完整,Studio Bot 经常会给出问题答案的示例代码,相信当它进入稳定阶段后会非常有助于日常开发。

折叠屏与平板设备模拟器

对应于 Google 的多屏幕计划,给开发者更便捷的方式测试自己的应用在折叠屏手机与平板电脑的兼容性。同样是在 Android Studio HedgeHog 版本,在 Device Manager 中即可创建 Pixel Fold 等不同尺寸屏幕设备的模拟器了:

图片

本地设备镜像与 Android 设备流

模拟器很方便,但是一个生产环境的应用通常需要在真实设备上进行足够的测试才行。但开发者时而拿起测试机,时而放下又拿起鼠标键盘的开发的方式多有不便,在以前的时候,开发者经常会选用 Scrcpy 等开源项目将手机屏幕投屏到电脑屏幕上,这样开发者就可以像操作模拟器一样操作真机设备,在不失还原性的同时又不必离开电脑。现在 Android Studio 内置的投屏功能(Device Mirroring)也在 HedgeHog 版本中可用了。当然,Device Mirroring **同样支持 Wear OS 设备

Device Mirroring 可用的前提是开发者手持自己需要的机型,但开发者(通常是个人开发者)无法总是拥有最新的旗舰机型,但想要测试应用在这些机型上的兼容性该怎么办?Android Studio 即将推出 Android Device Streaming 服务,Google 准备了最新的 Google Pixel 物理设备供开发者远程连接使用,而这一切都是在 Android Studio 中完成的,无需离开当前窗口。

新的 Intellij IDEA 平台

众所周知,Android Studio 基于 JetBrains 的 Intellij IDEA 开发,通常每个版本都有对应的 Intellij IDEA 版本,这样当 Intellij IDEA 平台升级时,新特性通常 Android Studio 也能保证可用。Android Studio HedgeHog 基于 Intellij IDEA 2023.1 release 版本开发,在获得更多功能和性能提升的同时,也支持了 Intellij IDEA 的新 UI 风格。当然,这是有开关的,开发者可以选择自行开启或关闭:

image.png

这里只介绍了部分 Android Studio 功能的更新,诸如 Live Edit、Kotlin Gradle DSL 增强支持等新特性欢迎开发者们自行探索。

Kotlin in Android

根据 Google 的数据,当前 Google Play 排名前 1000 的 app 中有 95% 直接或间接地使用了 Kotlin。除了将 Kotlin 引入 Android 外,Google 还亲自下场开发 Kotlin 编译器等核心工具,Google 甚至还在自家的服务端代码中大幅引入 Kotlin。对于 Android 开发者来说,今年有四件与 Kotlin 有关的大事需要关注:

Kotlin 2.0 Compiler(K2)

这是 Kotlin 历时多年开发的新版编译器,它将在 Kotlin 2.0 版本中默认开启,启用后相较于 Kotlin 1.8,它编译 Kotlin 代码的速度将提升 2 倍以上。除了编译速度的提升,K2 还将带来更多的新语法特性,敬请期待。

Kotlin DSL 即将成为 Gradle 构建脚本的默认选择

Gradle 在今年宣布 Kotlin DSL 将代替 Groovy 作为 Gradle 脚本的默认脚本语言。Google 也紧跟这一声明,未来在 Android Studio Giraffe 中创建新的 Android 项目将默认使用 KTS 作为构建脚本。Android 开发者此后无论是编写 Android 代码还是构建脚本,都将使用同一种语言。相较 Groovy,由于是强类型的语言,KTS 拥有优秀的 API 联想,以及 IDE 高亮功能,助力开发者在编写 Gradle 构建脚本时获得更好的代码提示,以提升开发效率。

Kotlin Symbol Processor(KSP)

KSP 完全由 Google 开发,Android 开发者可以使用 KSP 进行高速的代码处理与生成,进而取代原有的 KAPT 工具。相比 KAPT,KSP 拥有 2 倍的处理速度、更佳的类型设计、Multiplatform 环境可用等特点。当下,Room、Glide 等 Google 官方项目都已迁移到 KSP,而 Dagger 和 Hilt 的迁移也正在进行中,Google 也专门新出了迁移至 KSP 的教程:developer.android.com/build/migra…

Kotlin Multiplatform in Google

Kotlin Multiplatform 是通过使用不同的 Kotlin 编译器将 Kotlin 编译为不同平台产物的跨平台技术。Google 已经在自家产品 Google Workspace 中大举引入 Kotlin Multiplatform 技术。此外 Jetpack 中的 Annotations、Collections、DataStore 都已发布支持 Kotlin Multiplatform 环境的 Alpha 版本。Google 也在官方文档中正式上线了 Kotlin Multiplatform 页面:developer.android.com/kotlin/mult…

Android 14

最后终于到了每年必更新的 Android 系统环节。Android 14 的更新点同样很多,当前最新的版本为 Android 14 Beta 3,这里只挑选一些目前为止我认为最重要的更新进行介绍,详情可参考 Google 的官方信息。

近几年 Android 系统更新的重点放在了用户隐私与安全性上,每个版本的更新带来的都是对 app 使用用户的数据与权限更加严格的限制。

用户相册等媒体文件的访问新权限

在 Android 13 推出时,Android 系统新增了两条权限:READ_MIDEIA_IMAGES 和 READ_MIDEIA_VIDEO,用于保护当 app 进入后台或被用户手动杀死后对用户媒体文件的潜在访问。而 Android 14 引入了新权限 READ_MEDIA_VISUAL_USER_SELECTED 来取代以上两条旧权限。在 Android 14 中,关于媒体资源的访问新增了“Select Photos and Videos”选项,用于仅授权给应用访问当前用户选择的媒体资源。在 Android 14 中如果不适配 READ_MEDIA_VISUAL_USER_SELECTED,在申请旧的 READ_MIDEIA_IMAGES 或 READ_MIDEIA_VIDEO 权限如果被用户同意时将仍能得到 PERMISSION_GRANTED 结果,但 app 只能访问用户选择的媒体资源,且如果 app 进入后台或被用户杀死,则权限会被系统收回,下次进行相同的访问时会重新申请权限。

Foreground Services 类型强制指定

Android 12 中引入了 Foreground Services,这种 Service 会展示在手机的通知栏,用于提示用户 app 仍然在系统上运行并消耗一定资源(在音乐、播客类的 app 中很常见)。在 Android 14 中,Foreground Service 必须强制声明其类型,以表明它的用途。比如说健康类的 app 需要声明为 FOREGROUND_SERVICE_TYPE_HEALTH,而在后台使用定位数据的服务则需要声明为 FOREGROUND_SERVICE_TYPE_LOCATION。

广播接收器限制

Android 14 之后,开发者如果动态注册一个广播接收器(boradcast receiver),必须声明它是否是向外暴露的(RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED)除非它仅注册为系统广播接收器。如果要用 intent 启动一个非向外暴露的四大组件,必须使用显式调用,而不再支持隐式调用。

OpenJDK 17 升级

Android 支持 OpenJDK 的版本是一个大问题,开发者总是抱怨无法使用 JDK 最新的功能。在 Android 14 中,OpenJDK 17 LTS 的最新发行版得到了支持。当然,考虑到兼容旧版 Android 系统的问题,目前距离开发者随心所欲地使用 OpenJDK 17 的功能还有很长的距离。

结语

受到篇幅所限,本文无法覆盖 Google I/O 与 Android 开发有关的所有细节。包括 Android Health、Goolge Play、Google Wallet 等诸多 Google 或 Android 功能升级本文没有提到,对出海有需求的开发者可以在 Google I/O 的官网搜索有关的信息,其中包括多场官方精彩的分享。

Android 虽然在 I/O 大会上的 Opening 演讲中占的篇幅不大,但是仔细盘下来,Android 系统的诸多升级给用户带来了更高的隐私安全性。而诸多开发者工具的升级也给应用开发者的开发效率带来了巨大的提升。