迭代式代码开发

作为一名移动开发者,您通常会逐步开发应用的 UI,而不是一次性开发所有内容。Android Studio 通过 Jetpack Compose 采用了这种方法,提供了无需完整构建即可检查、修改值和验证最终结果的工具。

实时编辑

实时编辑是一项功能,可让您实时更新模拟器和物理设备中的可组合项。此功能最大程度地减少了编写和构建应用之间的上下文切换,让您可以更长时间地专注于编写代码而不会被打断。

实时编辑有三种模式

  • 手动:使用 Control+'(macOS 上为 Command+')手动推送时应用代码更改。
  • 保存时手动:使用 Control+S(macOS 上为 Command+S)手动保存时应用代码更改。
  • 自动:更新可组合函数时,在您的设备或模拟器中应用更改。

实时编辑侧重于与 UI 和 UX 相关的代码更改。实时编辑不支持方法签名更新、添加新方法或类层次结构更改等更改。有关更多信息,请参阅实时编辑的限制列表。

此功能并非构建和运行应用或应用更改的替代方案。相反,它旨在优化您在构建、部署和迭代以开发 Compose UI 时的工作流程。

最佳实践工作流程如下

  1. 设置您的应用,使其能够运行。
  2. 尽可能使用实时编辑,直到您需要进行实时编辑不支持的更改,例如在应用运行时添加新方法。
  3. 进行不支持的更改后,点击运行 运行图标 重新启动您的应用并恢复实时编辑。

开始使用实时编辑

要开始使用,请按照以下步骤创建空 Compose Activity、为您的项目启用实时编辑并在实时编辑中进行更改。

设置您的新项目

  1. 在开始之前,请确保您已安装 Android Studio Giraffe 或更高版本,并且物理设备或模拟器的 API 级别至少为 30。

  2. 打开 Android Studio,并在欢迎使用 Android Studio对话框中选择新建项目。如果您已经打开了项目,可以通过导航到文件>新建>新建项目来创建一个新项目。

  3. 手机和平板电脑选择空 Compose Activity模板,然后点击下一步

    Template selection in Android Studio
    图 1.您可以从中选择的模板。对于实时编辑,请选择空 Compose Activity
  4. 使用所需信息完成新建项目对话框:名称、包名、保存位置、最低 SDK 和构建配置语言。

    Example project settings from Step 4 entered in Android Studio
    图 2.项目设置示例。
  5. 点击完成

启用实时编辑

  1. 导航到设置以启用实时编辑。

    • 在 Windows 或 Linux 上,导航到文件>设置>编辑器>实时编辑
    • 在 macOS 上,导航到Android Studio>设置>编辑器>实时编辑
  2. 从设置中选择实时编辑选项以及您要运行的模式。

    在手动模式下,每次按下 Control+'(macOS 上为 Command+')时都会推送您的代码更改。在保存时手动模式下,每次手动保存(使用 Control+S(macOS 上为 Command+S))时都会应用您的代码更改。在自动模式下,在您进行更改时,您的代码更改将在您的设备或模拟器中应用。

    Live Edit checkbox UI in Android Studio settings
    图 3.实时编辑设置。
  3. 在编辑器中,打开MainActivity文件,它是应用的入口点。

  4. 点击运行 UI 按钮 部署您的应用。

  5. 启用实时编辑后,最新绿色复选标记将出现在正在运行的设备工具窗口的右上角

    Live Edit green checkmark UI

进行并查看更改

在编辑器中进行支持的更改时,虚拟或物理测试设备会自动更新。

例如,将MainActivity中现有的Greeting方法编辑为以下内容

@Composable
fun Greeting(name: String) {
    Text(
        text = "Hello $name!",
        Modifier
            .padding(80.dp) // Outer padding; outside background
            .background(color = Color.Cyan) // Solid element background color
            .padding(16.dp) // Inner padding; inside background, around text)
    )
}

您的更改会立即显示在测试设备上,如图 4 所示。

Changes to Greeting method applied on a device
图 4.测试设备显示对Greeting方法的实时编辑更改。

实时编辑故障排除

如果在测试设备上没有看到您的编辑内容,则 Android Studio 可能无法更新您的编辑内容。检查实时编辑指示器是否显示已过期,如图 5 所示,这表示编译错误。有关错误信息以及如何解决问题的建议,请点击指示器。

Live Edit out of date icon
图 5.实时编辑状态指示器。

实时编辑的限制

以下是当前限制的列表。

  • [仅适用于 Android Studio Giraffe 及更高版本] 实时编辑需要Compose Runtime 1.3.0 或更高版本。如果您的项目使用较低版本的 Compose,则实时编辑将被禁用。

  • [仅适用于 Android Studio Giraffe 及更高版本] 实时编辑需要 AGP 8.1.0-alpha05 或更高版本。如果您的项目使用较低版本的 AGP,则实时编辑将被禁用。

  • 实时编辑需要运行 API 级别 30 或更高的物理设备或模拟器。

  • 实时编辑仅支持编辑函数体,这意味着您无法更改函数名称或签名、添加或删除函数或更改非函数字段。

  • 第一次在文件中更改 Compose 函数时,实时编辑会重置应用的状态。这仅在第一次代码更改后发生——您对该文件中 Compose 函数进行的后续代码更改不会重置应用状态。

  • 使用实时编辑修改的类可能会导致一些性能损失。如果您正在评估其性能,请运行您的应用并使用干净的发布版本。

  • 您必须执行完整运行,才能使调试器在您使用实时编辑修改的类上运行。

  • 当您使用实时编辑编辑正在运行的应用时,它可能会崩溃。如果发生这种情况,您可以使用运行 UI 按钮 按钮重新部署应用。

  • 实时编辑不会执行项目构建文件中定义的任何字节码操作,例如使用构建菜单中的选项或点击构建运行按钮时应用的字节码操作。

  • 非可组合函数会在设备或模拟器上实时更新,并触发完整重新组合。完整重新组合可能不会调用更新后的函数。对于非可组合函数,您必须触发新更新的函数或再次运行应用。

  • 应用重新启动后,实时编辑不会恢复。您必须再次运行应用。

  • 实时编辑仅支持可调试进程。

  • 实时编辑不支持在构建配置中的kotlinOptions下使用自定义moduleName值的项目。

  • 实时编辑不适用于多部署部署。这意味着您无法部署到一个设备,然后部署到另一个设备。实时编辑仅在应用最后部署到的设备集上处于活动状态。

  • 实时编辑适用于多设备部署(通过目标设备下拉菜单中的选择多个设备创建的对多个设备的部署)。但是,它不受官方支持,可能会出现问题。如果您遇到问题,请报告

  • 应用更改/应用代码更改与实时编辑不兼容,需要重新启动正在运行的应用。

  • 实时编辑目前不支持 Android Automotive 项目。

有关实时编辑的常见问题

  • 实时编辑的当前状态如何?

    实时编辑在 Android Studio Giraffe 中可用。要打开它,请导航到文件>设置>编辑器>实时编辑(macOS 上为Android Studio>设置>编辑器>实时编辑)。

  • 我应该何时使用实时编辑?

    当您想快速查看对 UX 元素(例如修饰符更新和动画)的更新对整体应用体验的影响时,请使用实时编辑。

  • 我应该何时避免使用实时编辑?

    实时编辑侧重于与 UI 和 UX 相关的代码更改。它不支持方法签名更新、添加新方法或类层次结构更改等更改。有关更多信息,请参阅实时编辑的限制

  • 我应该何时使用 Compose 预览?

    在开发单个可组合项时,请使用 Compose 预览。预览可视化 Compose 元素并自动刷新以显示代码更改的效果。预览还支持在不同配置和状态下查看 UI 元素,例如深色主题、语言环境和字体缩放。

文字的实时编辑(已弃用)

Android Studio 可以实时更新预览、模拟器和物理设备中可组合项中使用的一些常量文字。以下是某些受支持的类型

  • Int
  • String
  • Color
  • Dp
  • Boolean

Video of the user changing literals in the source code, and the preview
updating
dynamically

您可以通过文字的实时编辑 UI 指示器启用文字装饰,从而查看触发实时更新而无需编译步骤的常量文字

Enabling Live Editing of
Literals

应用更改

应用更改允许您更新代码和资源,而无需将应用重新部署到模拟器或物理设备(存在一些限制)。

无论何时添加、修改或删除可组合项,您都可以通过点击应用代码更改按钮来更新您的应用,而无需重新部署它

User clicking the "apply changes"
button