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

您使用调试编译变体来编译应用的 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 配置为在无法应用更改时自动重新运行您的应用。

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

打开 SettingsPreferences 对话框:在 Windows 或 Linux 上,从菜单栏中依次选择 File > Settings。在 macOS 上,从菜单栏中依次选择 Android Studio > Preferences。 依次转到 Build, Execution, Deployment > Deployment。 选中复选框以针对任一 Apply Changes 操作启用自动 Run fallback。 点击 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 图标 。


...