在 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 操作仅在满足以下条件时可用:

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

使用 Apply Changes

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

“Apply Changes and Restart Activity”图标

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

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

“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”图标

)。不过,如果您不想在每次发生这种情况时都收到提示,则可以将 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 失败,但仍然要求您手动重启应用,然后才能看到这些更改。例如,如果您更改了某个 Activity 的 onCreate() 方法,则只有在该 Activity 重新启动后,这些更改才会生效,因此您必须重启应用才能看到这些更改。

Apply Changes 的限制

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

需要重启应用的代码更改

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

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

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

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

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

例如,Crashlytics 在每次构建过程中使用唯一的构建 ID 更新应用资源,这会阻止您使用 Apply Code Changes 图标

,并要求您重启应用的 Activity 才能看到相应更改。您可以停用此行为,以便能将 Apply Code Changes 与 Crashlytics 一起用于调试 build。

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

如果您的代码直接引用已在设备上安装的应用 APK 中的内容,在您点击了Apply Code Changes 图标

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

8089f9a5a92962ed11053c50cf30d3b1.png
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐