作者 / 软件工程师 Anton Hansson
Android 10 及以上版本支持 模块化系统组件,这些组件便于我们在主要 API 级别版本之外加快 Android 生态系统的功能和安全更新速度,并使新功能向后兼容已经发布的 Android 版本。此类改进有助于提高开发工作的灵活性,同时扩大应用开发者的开发范围。为此,我们已经构建了一个全新的 Extension SDK 框架来与这些 API 集成。现在,我们将发布 Extension SDK 的首个公开版本 (Extension Level 4)。
加快 API 和功能的引入速度
开发者引入主要 API 级别版本之外的新功能后,可以更快地实现创新。正如之前的 博文 所述,自今年起,我们计划在 Android 13 设备上 推出首个 Android 隐私沙盒 Beta 版。如此一来,您便可开始使用 Extension SDK 将解决方案与 AdServices API 集成,以便为有限的生产测试做好准备。您可以访问官方文档,进一步了解 如何参与隐私沙盒 Beta 版的开发工作,以及如何借助测试设备或模拟器设置开发环境。
向后兼容性
我们还可以利用 Extension SDK 将某些平台功能的支持扩展到现有 Android 版本,进而扩大用户覆盖范围。例如,以前只有 API 级别 33 (Android 13) 及以上版本可以访问 照片选择器 API,而现在,搭载 R 扩展版本 2 及以上版本的设备也可以通过 Extension SDK 向后兼容至 API 级别 30 (Android 11)。
检查 API 的可用性
为了帮助您确定扩展 API 的可用性,我们在 API 参考文档中添加了额外信息,说明 API 适用的 API 级别和最低扩展版本。例如,适用于 ACTION_PICK_IMAGES 的 API 参考文档指出,该 API 可在 “Android R 扩展版本 2” 及以上版本中使用。
在运行时,您可以采用类似于 Build.VERSION.SDK_INT 通常用来检查 Android 版本的方式查询扩展的版本。例如,如果您需要验证 PhotoPicker API 的可用性,请使用全新 API SdkExtensions.getExtensionVersion。R 扩展使用与 R 对应的版本代码 (30):
fun isPhotoPickerAvailable(): Boolean {
return SdkExtensions.getExtensionVersion(VERSION_CODES.R) >= 2
}
或者,您也可以通过 Build.VERSION.SDK_INT 检查版本,如下所示:
fun isPhotoPickerAvailable(): Boolean {
return Build.VERSION.SDK_INT >= 33
}
这种检查依然是安全且准确的,但此函数将会在 API 现已可用的部分设备上返回 False。因此,在检查 API 的可用性时,SDK_INT 检查并非最佳选择,扩展版本检查更为合适。此外,SDK_INT >= 33 的所有设备上的 R 扩展版本 >= 2,但对于某些 SDK_INT < 33 的设备而言,其 R 扩展版本 >= 2。
类似地,AdServices API 参考文档可能会指出 “已在广告服务扩展 4 中添加此 API”。广告服务扩展使用 SdkExtensions.AD_SERVICES 常量。该可用性检查如下所示:
fun isAdServicesAvailable(): Boolean {
return SdkExtensions.getExtensionVersion(SdkExtensions.AD_SERVICES) >= 4
}
为了方便开发者,我们还将扩展 Jetpack,使其更易与扩展版本搭配使用。例如,您可以使用 Jetpack 库函数来检查 PhotoPicker 的可用性,该函数对条件版本检查进行了抽象化处理。我们希望发布更多 Jetpack 库 (如在隐私沙盒中发布隐私保护 API),以便帮助开发者正确使用通过 Extension SDK 发布的 API。
工具支持
为帮助确保应用质量,我们为 Android Lint 的 NewApi 检查添加了扩展版本工具支持。借助 Android Studio Flamingo,该工具可以为使用 SDK 扩展启动的 API 自动生成正确的版本检查。您完全可以自行选择是否使用这些全新版本检查,但采用此类检查有助于开发者进一步广泛采纳新的 API。
深入了解 SDK 扩展
我们刚刚步入 SDK 扩展开发者旅程,并且计划在未来推出更多功能。您可以立即在 SDK 管理器中获取最新 SDK 扩展 4。请访问 隐私沙盒 Beta 版 和 照片选择器,详细了解 SDK 扩展 及相关文档。也欢迎您持续关注我们,及时了解更多开发技术和产品更新等资讯动态。