构建和运行您的应用

默认情况下,Android Studio 仅需点击几下即可设置要部署至模拟器或物理设备的新项目。使用 Instant Run,您无需构建新的 APK,就可以将更改推送至方法,将现有应用资源推送至正在运行的应用,所以几乎立刻就能看到代码更改。

要构建和运行应用,请点击 Run构建和运行您的应用 - Build and run your app - 图1。Android Studio 使用 Gradle 构建您的应用,会要求您选择部署目标(模拟器或连接的设备),然后将您的应用部署至目标。您可以通过更改运行配置自定义一些这样的默认行为,例如选择自动部署目标。

如果想要使用 Android Emulator 运行您的应用,您需要准备好 Android Virtual Device (AVD)。如果您尚未创建模拟器,点击 Run 后,在 Select Deployment Target 对话框中点击 Create New Emulator。按照 Virtual Device Configuration 向导操作,定义您想要模拟的设备类型。如需了解详细信息,请参阅创建和管理虚拟设备

如果您正在使用物理 Android 设备,则需要在设备上启用 USB 调试。如需了解详细信息,请参阅在硬件设备上运行应用

:您也可以通过点击 Debug构建和运行您的应用 - Build and run your app - 图2,在调试模式下部署应用。在调试模式下运行应用让您可以在代码中设置断点、在运行时检查变体和评估表达式,以及运行调试工具。如需了解详细信息,请参阅调试应用

选择和构建不同模块

如果您的项目除默认应用模块之外还有多个模块,可以执行以下操作来构建特定模块:

  • Project 面板中选择模块,然后点击 Build > Make Module module-name
    Android Studio 使用 Gradle 构建模块。模块构建后,如果您已经为新应用或新设备构建了模块,可以运行和调试模块;或者如果您已构建了库或 Google 云模块,可以将其用作依赖项。

要运行构建的应用模块,请执行以下操作:

  • 点击 Run > Run,然后从 Run 对话框中选择模块。

更改运行/调试配置

运行/调试配置指定要运行的模块、要部署的软件包、要启动的行为、目标设备、模拟器设置、logcat 选项,等等。默认运行/调试配置会启动默认项目行为并使用 Select Deployment Target 对话框选择目标设备。如果默认设置不适合您的项目或模块,您可以自定义运行/调试配置,也可以在项目、默认和模块级别创建新配置。要编辑运行/调试配置,请选择 Run > Edit Configurations。如需了解详细信息,请参阅创建和编辑运行/调试配置

更改构建变体

默认情况下,在您点击 Run 后,Android Studio 可以构建应用的调试版本,不过仅用于测试目的。您需要构建发布版本,为应用公开发布做准备

要更改 Android Studio 使用的构建变体,请转到 Build > Select Build Variant,然后从下拉菜单中选择不同的变体。默认情况下,新项目使用调试和发布构建变体进行设置。

使用产品定制,您可以为不同版本的应用(每个版本的应用均具有不同功能或设备要求)创建其他的构建变体。要了解有关构建变体和产品定制的详细信息,请参阅配置构建

监控构建流程

您可以通过点击 Gradle Console构建和运行您的应用 - Build and run your app - 图3 来查看与构建流程相关的详细信息。控制台会显示为构建应用 Gradle 执行的每个任务,如图 1 所示。
构建和运行您的应用 - Build and run your app - 图4
图 1.Android Studio 中的 Gradle 控制台。

如果您的构建变体使用产品定制,Gradle 也会调用任务来构建这些产品定制。要查看所有可用构建任务的列表,请点击 IDE 窗口右侧的 Gradle构建和运行您的应用 - Build and run your app - 图5

如果构建过程中出现错误,会出现 Messages 窗口,对问题进行具体描述。Gradle 会建议一些命令行选项来帮助您解决问题,例如 —stacktrace—debug。要在构建流程中使用命令行选项,请执行以下操作:

  • 打开 SettingsPreferences 对话框:
    • 在 Windows 或 Linux 上,从主菜单中选择 File > Settings
    • 在 Mac OSX 上,从主菜单中选择 Android Studio > Preferences
  • 导航至 Build, Execution, Deployment > Compiler
  • Command-line Options 旁的文本字段中,输入您的命令行选项。
  • 点击 OK 保存,然后退出。
    Gradle 会在下次您尝试构建应用时应用这些命令行选项。

生成 APK

点击 Run 时,Android Studio 会生成调试 APK 并将其部署至您的目标设备。在您生成用于公开分发的应用发布版本前,必须首先学习如何签署应用。然后,您可以生成多个调试或发布构建变体的签署 APK。要定位生成的 APK 文件,请点击弹出对话框中的链接,如图 2 所示。

构建和运行您的应用 - Build and run your app - 图6

图 2.点击链接定位已生成的 APK 文件。

关于 Instant Run


Android Studio 2.0 中引入的 Instant Run 是 Run构建和运行您的应用 - Build and run your app - 图7Debug构建和运行您的应用 - Build and run your app - 图8 命令的行为,可以大幅缩短应用更新的时间。尽管首次构建可能需要花费较长的时间,Instant Run 在向应用推送后续更新时则无需构建新的 APK,因此,这样可以更快地看到更改。

仅在您部署调试构建变体、使用 Android Plugin for Gradle 版本 2.0.0 或更高版本,以及在应用的模块级别 build.gradle 文件中将 minSdkVersion 设置为 15 或以上时,Instant Run 才受支持。为获得最佳性能,可以将 minSdkVersion 设置为 21 或更高。

部署应用后,Run构建和运行您的应用 - Build and run your app - 图9 按钮(或 Debug构建和运行您的应用 - Build and run your app - 图10 按钮)中会出现黄色的小闪电图标,表明 Instant Run 已经准备好在您下次点击按钮时推送更新。无需构建新的 APK 即可推送新的更改,一些情况下,应用甚至无需重启就可以立即显示代码更改的效果。

Instant Run 通过执行热交换温和交换冷交换向连接的设备或模拟器推送更新的代码和资源。它会根据所做更改的类型自动确定要执行的交换类型。上面的视频提供了有关所有这些如何在后台运行的十分有趣的详细信息。要获得您将特定代码更改推送至目标设备时 Instant Run 如何工作的快速摘要,请参见下表。

代码更改 Instant Run 行为

- 更改现有方法的实现代码

通过热交换支持:这是最快的交换类型,使更改能够更快地显示。您的应用保持运行,下次调用存根方法时会使用具有新实现的存根方法。

热交换不会重新初始化您正在运行的应用中的对象。您需要重新启动当前的行为,或者重新启动应用才能看到特定更新。默认情况下,Android Studio 在执行热交换后会自动重新启动当前的行为。如果您不想重新启动,可以停用自动行为重新启动

- 更改或移除现有资源
通过温和交换支持:这种交换速度也非常快,但 Instant Run 在将更改的资源推送至您的应用时必须重新启动当前的行为。您的应用保持运行,行为重新启动时屏幕上会出现小闪烁 - 这是正常情况。
结构性的代码更改,例如:
- 添加、移除或更改:
- 注释
- 实例字段
- 静态字段
- 静态方法签名
- 实例方法签名
- 更改当前类从其继承的父类
- 更改实现的界面列表
- 更改类的静态初始值设定项
- 对使用动态资源 ID 的布局元素重新排序

通过冷交换支持(API 级别 21 或更高):这种交换速度有点慢,因为尽管不需要新的 APK,Instant Run 在推送结构性的代码更改时必须重新启动整个应用。

对于运行 API 级别 20 或更低的目标设备,Android Studio 会部署完整的 APK。

- 更改应用清单
- 更改应用清单引用的资源
- 更改 Android 小部件 UI 元素(需要清除并重新运行

对应用的清单或清单引用的资源进行更改时,Android Studio 会自动部署新构建以应用这些更改。这是因为设备上安装了 APK 时应用相关的特定信息(如它的名称、应用图标资源和 Intent 过滤器)均通过清单确定。

如果您的构建流程自动更新应用清单的任何部分,如自动循环访问 versionCodeversionName,您将无法体验到 Instant Run 的全部性能优势。使用 Instant Run 时,您应该在调试构建变体中停用对应用清单的任何部分进行自动更新。

更新 Android 小部件 UI 元素时,您需要执行清除并重新运行以查看更改。或者,因为使用 Instant Run 时执行整洁的构建可能需要花费较长时间,您也可以在对小部件 UI 进行更新时暂时停用 Instant Run

:如果您需要在崩溃后重新启动应用,请不要从目标设备启动应用。从目标设备重启应用将不会应用自上次冷交换或增量构建之后的任何代码更改。要启动应用并应用所有最近的更改,请在 Android Studio 中点击 Run构建和运行您的应用 - Build and run your app - 图11(或 Debug构建和运行您的应用 - Build and run your app - 图12)。

使用重新运行

推送影响特定初始值设定项的代码更改(例如对应用的 onCreate()) 方法的更改)时,您需要重新启动应用,以便使更改生效。要执行增量构建并重新启动应用,请点击 Rerun构建和运行您的应用 - Build and run your app - 图13

如果您需要部署整洁的构建,请从主菜单中选择 Run > Clean and Rerun构建和运行您的应用 - Build and run your app - 图14,也可以在点击 Rerun构建和运行您的应用 - Build and run your app - 图15 时按住 Shift 键。此操作会停止运行的应用,执行完整、整洁的构建,然后将新的 APK 部署至您的目标设备。

停用行为自动重新启动

执行热交换时,您的应用会保持运行,但 Android Studio 会自动重新启动当前的行为。要停用此默认设置,请执行以下操作:

  • 打开 SettingsPreferences 对话框:
    • 在 Windows 或 Linux 上,从主菜单中选择 File > Settings
    • 在 Mac OSX 上,从主菜单中选择 Android Studio > Preferences
  • 导航至 Build, Execution, Deployment > Instant Run
  • 取消选中 Restart activity on code changes 旁边的方框。
    如果停用活动自动重新启动,您可以选择 Run > Restart Activity,从菜单栏中手动重新启动当前的活动。

针对 Instant Run 配置和优化您的项目

默认情况下,Android Studio 会为使用 Android Plugin for Gradle 2.0.0 及更高版本构建的项目启用 Instant Run。

要使用最新版本的插件更新现有项目,请执行以下操作:

  • 打开 Settings 或者 Preferences 对话框。
  • 导航至 Build, Execution, Deployment > Instant Run,然后点击 Update Project,如图 3 所示。

    如果用于更新项目的选项未显示,则说明项目已经带有最新版本的 Android Plugin for Gradle,处于最新状态。
    构建和运行您的应用 - Build and run your app - 图16
    图 3.更新现有项目的 Android Plugin for Gradle。

    您还需要更改构建变体才能开始使用 Instant Run,将变体改为应用的调试版本。

通过配置 DEX 资源缩短构建时间

部署整洁的构建时,Android Studio 会将您的应用设置为允许 Instant Run 推送代码和资源更新。尽管更新正在运行的应用要快得多,第一次构建却可能需要较长的时间才能完成。您可以通过配置多个 DexOptions 设置来加快构建流程:

  • maxProcessCount
  • 设置可以并行启动的 DEX 进程的最大数量。如果 Gradle 后台进程已在运行,您需要先停止此进程,然后使用新的最大进程数进行初始化。您可以从 Terminal 窗口中调用下面的一种函数来终止 Gradle 后台进程:
    • 在 Windows 上,请调用 gradlew —stop
    • 在 Linux/Mac OSX 上,请调用 ./gradlew —stop
  • javaMaxHeapSize
  • 设置 dex 操作的最大内存分配池大小。传递值时,您可以附加字母“k”来表示千字节,附加“m”表示兆字节,或者附加“g”表示千兆字节。
    下面的示例会在模块级别的 build.gradle 文件中将 maxProcessCount 设为 4,以及将 javaMaxHeapSize 设为“2g”:
  1. android {
  2. ...
  3. dexOptions {
  4. maxProcessCount 4 // this is the default value
  5. javaMaxHeapSize "2g"
  6. }
  7. }

您应增大设置的值并观察对构建时间产生的影响,对这些设置进行测试。如果您向 dexing 进程分配过多的资源,则可能导致性能下降。

启用 dexing-in-process 和增量 Java 编译

Android Plugin for Gradle 版本 2.1.0 及更高版本还引入了其他的构建流程改进,包括增量 Java 编译和 dexing-in-process。增量 Java 编译默认情况下处于启用状态,这种编译方式仅对发生变化或需要重新编译的源代码部分进行重新编译,可以缩短开发过程中的编译时间。

dexing-in-process 在构建流程而不是单独的外部 VM 流程中执行 dexing。这样不仅可以让增量构建更快,也可以显著提高完整构建的速度。要启用此功能,您需要将 Gradle 后台进程的最大堆大小设置为至少 2048 MB。要进行设置,您可以将以下代码包含到项目的 gradle.properties 文件中:

  1. org.gradle.jvmargs = -Xmx2048m

如果您已经在模块级别的 build.gradle 文件中为 javaMaxHeapSize 定义值,则需要将后台进程的最大堆大小设置为 javaMaxHeapSize 的值 + 1024 MB。例如,如果您已将 javaMaxHeapSize 设为“2g”,则需要将以下代码添加到项目的 gradle.properties 文件中:

  1. org.gradle.jvmargs = -Xmx3072m

从 Windows Defender 中排除您的项目

在 Windows 系统上,Windows Defender 可能导致 Instant Run 的运行速度变慢。如果您正在使用 Windows Defender,应当从 Windows Defender 恶意软件扫描中排除您的 Android Studio 项目文件夹

缩短使用 Crashlytics 时的构建时间

如果您的 Fabric Gradle 插件版本低于 1.21.6,Crashlytics 可能会导致构建时间变长。要提升应用开发期间的构建性能,您可以将插件升级到最新版本或者为您的调试构建变体停用 Crashlytics

Instant Run 的限制

大多数情况下,Instant Run 可以加快构建和部署流程的速度。不过,使用 Instant Run 时有一些限制因素可能影响其行为以及与您应用的兼容性。如果您在使用 Instant Run 时遇到其他问题,请提交错误

部署到多种设备

Instant Run 使用多种不同的技术执行特定于目标设备 API 级别的热交换、温和交换和冷交换。因此,同时将应用部署到多种设备时,Android Studio 会暂时关闭 Instant Run。

应用的 Dalvik 可执行文件分包

如果您的项目面向旧版 Dalvik 可执行文件分包(即,使用 multiDexEnabled trueminSdkVersion 20 或更低版本配置 build.gradle)配置并且您将其部署到运行 Android 4.4(API 级别 20)或更低版本系统的目标设备上,Android Studio 会停用 Instant Run。

如果将 minSdkVersion 设为 21 或更高,Instant Run 会自动将应用配置为进行 Dalvik 可执行文件分包。由于 Instant Run 仅适用于调试版本的应用,在部署发布构建变体时,您需要配置应用进行 Dalvik 可执行文件分包

运行仪器测试和性能分析器

仪器测试会将调试 APK 和测试 APK 同时加载到测试设备上的相同进程中,这样,控制方法可以替换应用的正常生命周期并执行测试。在运行或调试仪器测试时,Android Studio 不会注入 Instant Run 需要的其他方法并将此功能关闭。

分析应用时,您应停用 Instant Run。使用 Instant Run 会轻微影响性能,而替换具有热交换的方法则会产生稍大的影响。这种性能影响会干扰性能分析工具提供的信息。此外,每次热交换生成的存根方法都会使堆叠追踪变得复杂。

使用第三方插件

使用 Instant Run 时,Android Studio 会暂时停用 Java Code Coverage Library (JaCoCo) 和 ProGuard。由于 Instant Run 仅适用于调试版本,停用不会影响您的发布版本。

某些执行字节码增强的第三方插件可能会对 Instant Run 设置应用的方式造成影响。如果您遇到这些问题,但是想要继续使用 Instant Run,那么应针对您的调试构建变体停用这些插件。您还可以通过提交错误的方式帮助提升与第三方插件的兼容性。

将更改推送至多进程应用

为了执行热交换和温和交换,Instant Run 仅设置应用的主进程。将代码更改(例如对方法实现或现有资源的更改)推送至其他应用进程时,Instant Run 会执行冷交换

停用 Instant Run

要停用 Instant Run,请执行以下操作:

  • 打开 Settings 或者 Preferences 对话框。
  • 导航至 Build, Execution, Deployment > Instant Run
  • 取消选中 Enable Instant Run 旁边的方框。