迭代代码开发

作为移动开发者,您通常需要逐步开发应用界面,而不是一次性开发所有内容。Android Studio 通过提供不需要完整 build 即可检查、修改值和验证最终结果的工具,支持使用 Jetpack Compose 进行逐步开发。

AI 辅助界面迭代

您可以使用 Android Studio 中的 AI 智能体,直接从设计预览中迭代优化和转换 Compose 界面。右键点击 Compose 预览,然后选择以下 AI 操作之一:

  • Match UI to target image:选择此选项可上传参考设计模拟。 然后,代理会建议代码更改,以使您的实现尽可能与设计保持一致。
图 1.更新界面以与目标图片匹配。
  • Transform UI:使用自然语言提示(例如“将 按钮颜色更改为蓝色”)来描述您要对界面进行的具体修改 。
图 2.要求代理转换界面。

实时编辑

借助实时编辑功能,您可以实时更新模拟器和实体设备中的可组合项。此功能可最大限度地减少编写应用与构建应用之间的上下文切换,从而减少中断,让您有更多时间专注于代码编写。

实时编辑有三种模式:

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

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

此功能不能代替构建和运行应用或 Apply Changes,而旨在优化 Compose 界面开发过程中的构建、部署和迭代工作流程。

最佳实践工作流程如下:

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

开始使用实时编辑功能

如需开始使用,请按照以下步骤创建空的 Compose activity,为项目启用实时编辑功能,并使用该功能来进行更改。

设置新项目

  1. 在开始之前,请确保您已安装 Android Studio Giraffe 或更高版本,并且实体设备或模拟器的 API 级别不低于 30。

  2. 打开 Android Studio,然后在 Welcome to Android Studio 对话框中选择 New Project 。如果您已打开某个项目,则可以依次前往 File > New > New Project 来创建新项目。

  3. 对于 Phone and Tablet ,选择 Empty Compose Activity 模板,然后点击 Next

    Android Studio 中的模板选择
    图 3. 您可以选择的模板。为实时编辑, 选择 Empty Compose Activity
  4. 使用所需信息填写 New Project 对话框,其中包含名称、软件包名称、保存位置、最低 SDK 和 build 配置语言。

    第 4 步中在 Android Studio 中输入的项目设置示例
    图 4. 示例项目设置。
  5. 点击 Finish

启用实时编辑功能

  1. 前往设置以启用实时编辑功能。

    • 在 Windows 或 Linux 上,依次前往 File > Settings > Editor > Live Edit
    • 在 macOS 上,依次前往 Android Studio > Settings > Editor > Live Edit
  2. 从设置中选择 实时编辑 选项和要运行的模式。

    在手动模式下,每次按 Control+'(在 macOS 上,则按 Command+')时,系统都会推送代码更改。在保存时手动模式下,所做的代码更改会在您每次使用 Control+S(在 macOS 上,则使用 Command+S)手动保存时应用。在自动模式下,所做的代码更改会即时应用到设备或模拟器中。

    Android Studio 设置中的“Live Edit”复选框界面
    图 5. 实时编辑设置。
  3. 在编辑器中,打开 MainActivity 文件,这是应用的入口点。

  4. 点击 Run 界面按钮 以部署应用。

  5. 开启实时编辑功能后,Running Devices 工具窗口的右上角会显示 Up-to-date 绿色对勾标记:

    实时编辑功能的绿色对勾标记界面

进行更改并查看更改效果

当您在编辑器中做出支持的更改时,虚拟或实体测试设备会自动更新。

例如,将 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)
    )
}

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

应用到设备的 Greeting 方法更改
图 6. 一台测试设备,其中显示了对 Greeting 方法的实时编辑更改。

排查实时编辑问题

如果在测试设备上没有看到修改效果,则说明 Android Studio 可能未能更新您的修改。请检查实时编辑指示器是否显示 Out Of Date (如图 7 所示),这表示发生了编译错误。如需了解有关错误的信息以及有关如何解决该错误的建议,请点击指示器。

实时编辑已过期图标
图 7. 实时编辑状态指示器。

实时编辑功能的限制

以下是现有限制的列表。

  • [仅适用于 Android Studio Giraffe 及更高版本] 实时编辑需要 Compose Runtime 1.3.0 或更高版本。 如果您的项目使用较低版本的 Compose,系统会停用实时编辑功能。

  • [仅适用于 Android Studio Giraffe 及更高版本] 实时编辑需要 AGP 8.1.0-alpha05 或更高版本。如果您的项目使用较低版本的 AGP,系统会停用实时编辑功能。

  • 实时编辑功能要求实体设备或模拟器搭载 API 级别为 30 或更高级别的操作系统。

  • 实时编辑功能仅支持修改函数正文,也就是说,您无法进行下列操作:更改函数名称或签名、添加或移除函数、更改非函数字段。

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

  • 使用实时编辑功能修改过的类可能会导致性能下降。如果要评估应用的 性能,请使用干净的发布 build 运行应用。

  • 您必须执行完整运行,以便调试程序在使用实时编辑修改过的类上运行。

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

  • 实时编辑不会执行项目 build 文件中定义的任何字节码处理,例如,使用 Build 菜单中的选项或通过点击 BuildRun 按钮构建项目时要应用的字节码处理。

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

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

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

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

  • 实时编辑功能不适用于多部署部署。这意味着,您不能先部署到一台设备,然后再部署到另一个设备。实时编辑功能仅在应用部署到的最后一组设备上有效。

  • 实时编辑功能支持多设备部署(部署到通过目标设备下拉菜单中的 Select multiple devices 创建的多台设备)。不过,此功能尚未获得正式支持,因此可能会出现问题。如果您遇到问题, 请报告该问题

  • Apply Changes/Apply Code Changes 与实时编辑不兼容,并且需要重启正在运行的应用。

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

关于实时编辑功能的常见问题解答

  • 实时编辑功能目前处于什么状态?

    实时编辑功能已在 Android Studio Giraffe 中推出。如需开启此功能,请依次前往 File > Settings > Editor > 实时编辑 (在 macOS 上,则依次前往 Android Studio > Settings > Editor > 实时编辑 )。

  • 何时应使用实时编辑功能?

    如果您想快速查看用户体验元素更新(例如,修饰符更新、动画更新)对整体应用体验的影响,就可以使用实时编辑功能。

  • 何时应避免使用实时编辑功能?

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

  • 何时应使用 Compose 预览?

    开发单个可组合项时,请使用 Compose 预览。预览会直观呈现 Compose 元素,还会自动刷新来显示代码更改的效果。预览还支持在不同的配置和状态(例如深色主题、语言区域、字体大小)下查看界面元素。

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

实时编辑和 Compose Multiplatform 的热重载功能可以节省 您的时间,并提高您在使用 Compose 进行开发时的效率。不过,它们满足了不同类型开发的需求:

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

  • Compose 热重载功能满足了 同样的需求,但支持 使用 Compose Multiplatform 构建的桌面应用。借助此功能,您可以更改 Compose Multiplatform 应用中的界面代码,并在代码发生更改时通过智能重载代码来实时查看结果。

虽然这两个功能在 Compose 引擎中共享许多技术,并且 支持许多类似的使用场景,但它们的功能并不相同 ,因为它们适用于不同类型的 Compose 开发。

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

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

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

  • Int
  • String
  • Color
  • Dp
  • Boolean

用户在源代码中更改字面量且预览动态更新的视频

通过“字面量实时编辑”界面指示器启用字面量修饰功能,无需进行编译即可查看触发实时更新的常量字面量:

启用“Live Editing of Literals”

Apply Changes

Apply Changes 可让您更新代码和资源 ,而不必将应用重新部署到模拟器或实体设备上(存在一些 限制)。

每当您添加、修改或删除可组合项时,您只需点击一下 Apply Code Changes 按钮,即可更新应用,而不必重新部署:

用户点击“Apply Changes”按钮