构建和运行应用

如果您想查看应用在设备上的外观和行为,则需要构建并运行该应用。Android Studio 会设置新的项目,这样您只需点击几下,就能将应用部署到虚拟设备或实体设备。

本概览重点介绍如何使用 Android Studio 构建和运行应用,以便进行测试和调试。如需了解如何使用 Android Studio 构建应用以便向用户发布,请参阅构建应用以向用户发布。如需详细了解如何管理和自定义 build(无论是否使用 Android Studio),请参阅配置 build

基本构建和运行

如需构建和运行应用,请按以下步骤操作:

  1. 在工具栏中,从运行配置下拉菜单中选择您的应用。
  2. 从目标设备下拉菜单中,选择要用来运行应用的设备。

    目标设备下拉菜单。

    如果您未配置任何设备,则需要创建 Android 虚拟设备以便使用 Android 模拟器,或连接实体设备

  3. 点击 Run 按钮

如果尝试将项目启动到存在相关错误或警告的设备,Android Studio 将发出警告。图标和样式变更分成了错误(导致配置失败的设备选择)和警告(可能导致意外行为但仍可运行的设备选择)。

监控构建流程

您可以通过依次点击 View > Tool Windows > Build(或点击工具窗口栏中的 Build 图标 ),查看有关构建流程的详细信息。该窗口显示 Gradle 为构建应用而执行的任务,如图 3 所示。

图 1. Android Studio 中的“Build Output”窗口

  1. “Build”标签页:以树状显示 Gradle 执行的任务,其中每个节点表示一个构建阶段或一组任务依赖项。如果您收到构建时错误或编译时错误,可以检查该树并选择一个元素来查看错误输出,如图 2 所示。

    图 2. 在“Build Output”窗口中检查错误消息

  2. “Sync”标签页:显示 Gradle 为与项目文件同步而执行的任务。与 Build 标签页类似,如果您遇到同步错误,可以在树中选择元素来查找有关错误的更多信息。
  3. Restart:通过为项目中的所有模块生成中间构建文件,执行与依次选择 Build > Make Project 相同的操作。
  4. Toggle view:在以图形树形式显示任务执行情况与显示 Gradle 中更详细的文本输出(这与在 Android Studio 3.0 及更低版本上的 Gradle Console 窗口中显示的输出相同)之间切换。

如果您的 build 变体使用产品变种,Gradle 也会调用任务来构建这些产品变种。如需查看所有可用构建任务的列表,请依次点击 View > Tool Windows > Gradle(或点击工具窗口栏中的 Gradle 图标 )。

如果在构建流程中出现错误,Gradle 可能会向您推荐一些命令行选项来帮助您解决问题,如 --stacktrace--debug。如需在构建流程中使用命令行选项,请执行以下操作:

  1. 打开 SettingsPreferences 对话框:
    • 在 Windows 或 Linux 上,从菜单栏中依次选择 File > Settings
    • 在 Mac OSX 上,从菜单栏中依次选择 Android Studio > Preferences
  2. 依次转到 Build, Execution, Deployment > Compiler
  3. 在“Command-line Options”旁边的文本字段中,输入您的命令行选项。
  4. 点击 OK 保存,然后退出。

当您下次尝试构建应用时,Gradle 会应用这些命令行选项。

高级构建和运行功能

Android Studio 默认部署应用的方法(如上一部分所述)应该足以测试简单的应用。对于更高级的用例,您可以从多个方面切换应用的构建和运行方式:

  • 您可以通过点击 Debug ,在调试模式下部署应用。在调试模式下运行应用,您就可以在代码中设置断点、在运行时检查变量和对表达式求值,以及运行调试工具。如需了解详情,请参阅调试您的应用

  • 如果应用较大且较复杂,您可以使用 Apply Changes 而不是点击 Run 以节省时间,因为这可以避免在每次部署更改时重启应用。如需详细了解 Apply Changes,请参阅本页面上的 使用 Apply Changes 进行增量部署

  • 如果您使用 Compose,可以通过实时编辑实时更新可组合项,而无需点击 Run。这样您就可以专注于编写界面代码而尽量不受干扰。如需了解详情,请参阅本页面中的实时编辑

  • 如果您的应用有多个 build 变体或版本,您可以使用 Build Variants 工具窗口选择要部署的 build 变体。如需详细了解如何运行特定 build 变体,请参阅本页面中的更改 build 变体

  • 如需调整应用安装、启动和测试选项,您可以更改运行/调试配置。运行/调试配置用于指定要通过 APK 还是 Android App Bundle 部署您的应用、要运行的模块、要部署的软件包、要启动的 activity、目标设备、模拟器设置、Logcat 选项,等等。如需详细了解如何创建自定义运行/调试配置,请参阅创建运行/调试配置

  • 您应该尝试使用 Android Studio 来满足开发需求,但您也可以通过命令行将应用部署到虚拟设备或实体设备。如需了解详情,请参阅从命令行构建您的应用

使用 Apply Changes 进行增量部署

在 Android Studio 3.5 及更高版本中,Apply Changes 可让您将代码和资源更改推送给正在运行的应用,而无需重启应用(在某些情况下,甚至无需重启当前的 activity)。当您要部署和测试小范围的增量更改,同时保持设备的当前状态时,这种灵活性可帮助您控制应用的重启范围。Apply Changes 使用搭载 Android 8.0(API 级别 26)或更高版本的设备上支持的 Android JVMTI 实现中的功能。如需详细了解 Apply Changes 的工作原理,请参阅 Android Studio Project Marble:Apply Changes

要求

Apply Changes 操作仅在满足以下条件时可用:

  • 您使用调试 build 变体来构建应用的 APK。
  • 您将应用部署到搭载 Android 8.0(API 级别 26)或更高版本的目标设备或模拟器上。

使用 Apply Changes

如果要将更改部署到兼容设备,请使用以下选项:

“Apply Changes and Restart Activity”图标 “Apply Changes and Restart Activity”图标

尝试通过重启 Activity 但不重启应用来应用资源和代码更改。通常,如果您修改了方法正文中的代码或修改了现有资源,则可以使用此选项。

您也可以按 Ctrl+Alt+F10(或者,在 macOS 上,按 Control+Shift+Command+R)来执行此操作。

“Apply Code Changes”图标 Apply Code Changes 图标

尝试仅应用代码更改而不重启任何内容。 通常,如果您修改了方法正文中的代码,但没有修改任何资源,则可以使用此选项。如果您既修改了代码,又修改了资源,则应改用 Apply Changes and Restart Activity

您也可以按 Ctrl+F10(或者,在 macOS 上,按 Control+Command+R)来执行此操作。

运行 “Run”图标

部署所有更改并重启应用。如果使用哪个 Apply Changes 选项都无法应用您所做的更改,请使用此选项。如需详细了解需要重启应用的更改类型,请参阅 Apply Changes 的限制

为 Apply Changes 启用 Run 回退机制

在您点击 Apply Changes and Restart ActivityApply Code Changes 后,Android Studio 会构建新 APK 并确定是否可以应用更改。如果无法应用更改并且会导致 Apply Changes 失败,则 Android Studio 会改为提示您重新运行您的应用(通过点击“Run”图标 “Run”图标)。不过,如果您不想在每次发生这种情况时都收到提示,则可以将 Android Studio 配置为在无法应用更改时自动重新运行您的应用。

如需启用此行为,请按以下步骤操作:

  1. 打开 SettingsPreferences 对话框:

    • 在 Windows 或 Linux 上,从菜单栏中依次选择 File > Settings
    • 在 macOS 上,从菜单栏中依次选择 Android Studio > Preferences
  2. 依次转到 Build, Execution, Deployment > Deployment

  3. 选中复选框以针对任一 Apply Changes 操作启用自动 Run fallback。

  4. 点击 OK

依赖于平台的更改

Apply Changes 的某些功能依赖于 Android 平台的特定版本。如要应用这些类型的更改,您的应用必须部署到搭载相应 Android 版本(或更高版本)的设备上。

更改类型 最低平台版本
添加方法 Android 11

Apply Changes 的限制

Apply Changes 旨在加快应用部署流程。不过,它的使用时机存在一些限制。如果您在使用 Apply Changes 时遇到任何问题,请提交错误

需要重启应用才能实现的代码更改

某些代码和资源更改必须在重启应用之后才能应用,其中包括以下更改:

  • 添加或移除字段
  • 移除方法
  • 更改方法签名
  • 更改方法或类的修饰符
  • 更改类继承行为
  • 更改枚举中的值
  • 添加或移除资源
  • 更改应用清单
  • 更改原生库(SO 文件)
库和插件

某些库和插件会自动更改应用的清单文件或清单中引用的资源。这些自动更新可能会通过以下方式干扰 Apply Changes:

  • 如果库或插件更改应用的清单,您不能使用 Apply Code Changes 图标 Apply Code Changes 图标Apply Changes and Restart Activity 图标 “Apply Changes and Restart Activity”图标,而必须重启应用,然后才能看到相应更改。
  • 如果库或插件更改应用的资源文件,您不能使用 Apply Code Changes 图标 Apply Code Changes 图标,而必须使用 Apply Changes and Restart Activity 图标 “Apply Changes and Restart Activity”图标 来查看相应更改。

您可以通过为调试构建变体停用所有自动更新来避免这些限制。

例如,Crashlytics 在每次构建过程中使用唯一的 build ID 更新应用资源,这会阻止您使用 Apply Code Changes 图标 Apply Code Changes 图标,并且您需要重启应用的 activity 才能看到相应更改。您可以停用此行为,以便能将 Apply Code Changes 与 Crashlytics 一起用于调试 build。

直接引用已安装 APK 中的内容的代码

如果您的代码直接引用已在设备上安装的应用 APK 中的内容,在您点击 Apply Code Changes 图标 Apply Code Changes 图标 后,该代码可能会导致崩溃或出现异常。 发生此行为的原因是,当您点击 Apply Code Changes 时,设备上的底层 APK 会在安装过程中被替换。在这些情况下,您可以改为点击 Apply Changes and Restart Activity 图标 “Apply Changes and Restart Activity”图标Run 图标 “Run”图标

实时编辑(实验性)

实时编辑是 Android Studio Electric Eel Canary 版本中的一项实验性功能,可用于实时更新模拟器和实体设备中的可组合项。更新可组合函数时,所做的更改会在您进行相应更改时应用于设备或模拟器中。此功能可最大限度地减少编写应用与构建应用之间的上下文切换,从而减少中断,让您有更多时间专注于代码编写。

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

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

最佳做法工作流程如下:

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

GIF:在设备上使用实时编辑

图 3. 每次进行实时编辑功能支持的修改时,设备或模拟器上正在运行的应用都会实时更新。

开始使用实时编辑功能

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

设置新项目
  1. 在开始之前,请确保您已安装最新的 Canary 版 Android Studio Electric Eel,并且实体设备或模拟器的 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 中的模板选择 图 4. 可供选择的模板。为实时编辑选择 Empty Compose Activity

  4. 按如下所示输入内容,然后点击 Finish

    • NameHelloWorld
    • Package namecom.example.helloworld
    • Save location:保留默认值。
    • LanguageKotlin
    • Minimum SDK:保留默认值。

    第 4 步中在 AS 中输入的项目设置示例 图 5. 项目设置示例。

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

    • 在 Windows 或 Linux 上,依次前往 File > Settings > Editor > Live Edit
    • 在 macOS 上,依次前往 Android Studio > Preferences > Editor > Live Edit

    Android Studio 设置中的“实时编辑”复选框界面 图 6. 从设置中选择实时编辑选项。

  2. 在编辑器中,打开 MainActivity 文件,这是应用的入口点。

  3. 点击 Run 图标 界面按钮 以部署应用,然后点击编辑器右上角的 Split 以打开预览。

  4. 启用实时编辑功能后,您将会在编辑器的右上角看到实时编辑绿色对勾标记。

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

进行更改并查看更改效果

在编辑器中,将 MainActivity 中的现有 Greeting 方法更改为以下内容。您的更改效果会立即呈现,如图 7 所示。

@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)
    )
}

应用到设备的 Greeting 方法更改

图 7. 通过实时编辑功能对 Greeting 方法进行的上述更改会立即显示。

问题排查

如果在预览窗格中没有看到修改效果,则说明 Android Studio 可能未能更新您的修改。请查看 Live Edit 界面指示器是否显示已暂停的图标,这表示发生了编译错误。

实时编辑状态界面

图 8. 如需详细了解该错误以及有关如何解决该错误的建议,请将鼠标悬停在界面中的 Live Edit: ON 上。

限制

以下是现有限制的列表。

  • 实时编辑功能要求实体设备或模拟器搭载 API 级别为 30 或更高级别的操作系统。
  • 实时编辑功能仅支持修改函数正文,也就是说,您无法进行下列操作:更改函数名称或签名、添加或移除函数、更改非函数字段。
  • 使用实时编辑功能修改过的类可能会导致性能下降。如果要评估应用的性能,建议您使用干净的发布 build 运行应用。
  • 您必须执行完整的运行,以便调试程序在使用实时编辑修改过的类上运行。
  • 使用实时编辑修改正在运行的应用,可能会导致应用崩溃。如果发生这种情况,可以使用 Run 按钮 界面按钮 重新部署应用。
  • 实时编辑不会执行项目 build 文件中定义的任何字节码处理,例如,使用 Build 中的选项或通过点击 BuildRun 按钮构建项目时要应用的字节码处理。
  • 非可组合函数会在设备或模拟器上实时更新,并且会触发完全重组。完全重组可能不会调用更新后的函数。对于非可组合函数,您必须触发新更新的函数或再次运行应用。
  • 应用重启后,实时编辑不会自动恢复。您必须再次运行应用。

常见问题解答

  • 实时编辑功能目前处于什么状态?
    • 实时编辑是 Android Studio Electric Eel Canary 版渠道中提供的一项实验性功能。您可以依次点击 File > Settings > Editor > Live Edit(在 macOS 上,依次点击 Android Studio > Preferences > Editor > Live Edit)来启用或停用该功能。
  • 何时应使用实时编辑功能?
    • 如果您想快速查看用户体验元素更新(例如,修饰符更新、动画更新)对整体应用体验的影响,就可以使用实时编辑功能。
  • 何时应避免使用实时编辑功能?
    • 实时编辑功能目前侧重于界面和用户体验方面的代码更改。请避免用它来进行不支持的更改,比如更新方法签名、添加新方法或更改类层次结构等。如需了解详情,请参阅限制
  • 何时应使用 Compose 预览?
    • 开发单个可组合项时,请使用组合预览。预览会直观呈现 Compose 元素,还会自动刷新来显示代码更改的效果。预览还支持在不同的配置和状态(例如深色模式、语言区域、字体大小)下查看界面元素。

更改 build 变体

默认情况下,在您点击 Run 后,Android Studio 会构建应用的调试版本,不过这仅供在开发期间使用。

如要更改 Android Studio 使用的 build 变体,请在菜单栏中依次选择 Build > Select Build Variant

对于不含原生/C++ 代码的项目,Build Variants 面板有两列:ModuleActive Build Variant。模块的 Active Build Variant 值决定了 IDE 部署到连接的设备并显示在编辑器中的 build 变体。

图 9. 对于不含原生/C++ 代码的项目,Build Variants 面板有两列

如需在变体之间切换,请点击模块的 Active Build Variant 单元格,然后从列表字段中选择所需的变体。

对于含有原生/C++ 代码的项目,Build Variants 面板包含三列:ModuleActive Build VariantActive ABI。模块的 Active Build Variant 值决定了 IDE 部署到设备并显示在编辑器中的 build 变体。对于原生模块,Active ABI 值决定了编辑器使用的 ABI,但不会影响部署的内容。

图 10. 对于含有原生/C++ 代码的项目,Build Variants 面板增加了 Active ABI

如要更改 build 变体或 ABI,请点击 Active Build VariantActive ABI 列的单元格,然后从列表中选择所需的变体或 ABI。您更改选择后,IDE 会自动同步您的项目。 更改应用或库模块的任一列都会将更改应用于所有相关行。

默认情况下,新项目设置有两个 build 变体:调试变体和发布变体。您需要构建发布变体来为应用的公开发布做好准备

如需构建应用的其他变体(每个变体具有不同的功能或设备要求),您可以定义其他 build 变体

Android Studio 的“Build Variants”对话框中的冲突

在 Android Studio 的“Build Variants”对话框中,您可能会看到一些错误消息,指出 build 变体之间存在冲突,示例如下:

显示变体冲突错误的“Build Variant”窗口

此错误并不表示 Gradle 存在 build 方面的问题,只表示 Android Studio IDE 本身无法解析所选模块不同变体之间使用的符号。

例如,如果您的模块 M1 依赖于模块 M2 的变体 v1,但在 IDE 中选定了 M2 的变体 v2,那么 IDE 中就会有未解析的符号。假设 M1 依赖于 Foo 类,但仅 v1 支持该类。当 v2 被选定时,该类无法被 IDE 识别,这就会导致 IDE 无法解析该类并在 M1 的代码中显示错误。

显示这些错误消息的原因在于 IDE 无法同时加载多个变体的代码。不过,在应用的 build 方面,此对话框中选定的变体不会产生任何影响;因为在构建您的应用时,Gradle 使用的是您的 Gradle 构建方案中指定的源代码,而不是基于 IDE 中当前已加载的代码。

更改运行/调试配置

当您首次运行应用时,Android Studio 会使用默认运行配置。运行配置用于指定要通过 APK 还是 Android App Bundle 部署您的应用、要运行的模块、要部署的软件包、要启动的 Activity、目标设备、模拟器设置、logcat 选项,等等。

默认运行/调试配置会构建 APK,启动默认项目 Activity,并使用 Select Deployment Target 对话框选择目标设备。如果默认设置不适合您的项目或模块,您可以自定义运行/调试配置,也可以在项目、默认和模块级别创建新配置。如要修改运行/调试配置,请依次选择 Run > Edit Configurations。如需了解详情,请参阅创建和修改运行/调试配置