迭代代码开发

作为一名移动开发者,你通常会逐步开发应用的 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 运行时 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