迭代式代码开发

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

实时编辑

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

实时编辑有三种模式

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

实时编辑侧重于与界面和用户体验相关的代码更改。实时编辑不支持方法签名更新、添加新方法或类层次结构更改等更改。如需了解详情,请参阅实时编辑的限制

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

最佳实践工作流如下

  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. 点击运行 界面按钮 以部署您的应用。

  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 函数所做的代码更改不会重置应用状态。

  • 经过实时编辑修改的类可能会带来一些性能损失。如果您正在评估应用性能,请运行您的应用并使用干净的发布 build。

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

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

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

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

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

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

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

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

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

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

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

  • 关于实时编辑的常见问题

实时编辑的当前状态是什么?

  • Android Studio Giraffe 中提供实时编辑功能。要启用它,请导航到文件 > 设置 > 编辑器 > 实时编辑(在 macOS 上为Android Studio > 设置 > 编辑器 > 实时编辑)。

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

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

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

  • 实时编辑侧重于与界面和用户体验相关的代码更改。它不支持方法签名更新、添加新方法或类层次结构更改等更改。如需了解详情,请参阅实时编辑的限制

    我应该何时使用 Compose 预览?

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

    使用 Compose 进行迭代式代码开发

实时编辑和 Compose Multiplatform 的热重载是可以在您使用 Compose 进行开发时节省时间并提高工作效率的功能。但是,它们服务于不同类型的开发需求

实时编辑支持使用 Jetpack Compose 进行Android 应用的迭代开发。它可让您在模拟器和实体设备中实时更新可组合项。此功能可最大程度地减少编写和构建应用之间的上下文切换,让您更长时间地专注于编写代码而不受中断。

  • Compose 热重载满足同样的需求,但支持使用 Compose Multiplatform 构建的桌面应用。它使您能够在 Compose Multiplatform 应用中更改界面代码,并通过在代码更改时智能地重新加载代码来实时查看结果。

  • 虽然这两个功能在 Compose 引擎内共享许多技术并支持许多相似的用例,但它们没有相同的功能,因为它们适用于不同类型的 Compose 开发。

如果您正在开发 Android 应用,应使用实时编辑来加快开发过程。如果您正在使用 Compose Multiplatform 开发桌面应用,则应使用 Compose 热重载。

字面量实时编辑(已弃用)

已弃用: 字面量实时编辑是实时编辑的早期版本,仅限于少数受支持的类型,现已弃用。我们建议使用实时编辑

Int

  • String
  • Color
  • Dp
  • Boolean
  • 您可以通过字面量实时编辑界面指示器启用字面量装饰,从而无需编译步骤即可查看触发实时更新的常量字面量

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

注意: 只要与模拟器或实体设备上的正在运行的应用有活动连接,字面量实时编辑界面指示器就会显示在代码/拆分/设计旁边。

Enabling Live Editing of
Literals

应用更改可让您更新代码和资源,而无需将应用重新部署到模拟器或实体设备(但有一些限制)。

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

为您推荐

User clicking the "apply changes"
button

本页面上的内容和代码示例受 内容许可中描述的许可限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的商标或注册商标。