android开发ApplyChanges功能,无需重启应用
在AndroidStudio3。5及更高版本中,ApplyChanges可让您将代码和资源更改推送到正在运行的应用,而无需重启应用(在某些情况下,无需重启当前Activity)。有了这种灵活性,您就可以控制在想部署和测试细微增量更改时应用的重启范围,同时保持设备的当前状态。ApplyChanges使用搭载Android8。0(API级别26)或更高版本的设备上支持的浪AndroidJVMTI实现中的功能。如需详细了解ApplyChanges的工作原理,请参阅AndroidStudioProjectMarble:ApplyChanges。要求
ApplyChanges操作仅在满足以下条件时可用:您使用调试编译变体来编译应用的APK。您将应用部署到搭载Android8。0(API级别26)或更高版本的目标设备或模拟器上。使用ApplyChanges
如果要将更改部署到兼容设备,请使用以下选项:
ApplyChangesandRestartActivity图标
尝试通过重启Activity但不重启应用来应用资源和代码更改。通常,如果您修改了方法正文中的代码或修改了现有资源,则可以使用此选项。
您也可以按CtrlAltF10(或者,在macOS上,按ControlShiftCommandR)来执行此操作。
ApplyCodeChanges图标
尝试仅应用代码更改而不重启任何内容。通常,如果您修改了方法正文中的代码,但没有修改任何资源,则可以使用此选项。如果您既修改了代码,又修改了资源,则应该用ApplyChangesandRestartActivity。
您也可以按CtrlF10(或者,在macOS上,按ControlCommandR)来执行此操作。
Run图标
部署所有更改并重启应用。如果使用任一ApplyChanges选项都无法应用您所做的更改,请使用此选项。要详细了解需要重启应用的更改类型,请参阅ApplyChanges的限制。为ApplyChanges启用Run回退机制
请您点击ApplyChangesandRestartActivity或ApplyCodeChanges后,AndroidStudio会构建新APK并确定是否可以应用更改。如果无法应用更改并且会导致ApplyChanges失败,则AndroidStudio会改为提示您重新运行您的应用(通过点击Run图标
)。不过,如果您不想在每次发生这种情况时都收到提示,则可以将AndroidStudio配置为在无法应用更改时自动重新运行您的应用。
要启用此行为,请按以下步骤操作:打开Settings或Preferences对话框:在Windows或Linux上,从菜单栏中依次选择FileSettings。在macOS上,从菜单栏中依次选择AndroidStudioPreferences。依次转到Build,Execution,DeploymentDeployment。选中复选框以针对任一ApplyChanges操作启用自动Runfallback。点击OK。
注意:某些类型的更改不会导致ApplyChanges失败,但仍然要求您手动重启应用,然后才能看到这些更改。例如,如果您更改了某个Activity的onCreate()方法,则只有在该Activity重新启动后,这些更改才会生效,因此您必须重启应用才能看到这些更改。ApplyChanges的限制
ApplyChanges旨在加快应用部署流程。不过,它的使用时机存在一些限制。如果您在使用ApplyChanges时遇到任何问题,请提交错误。需要重启应用的代码更改
某些代码和资源更改必须在重启应用之后才能应用,其中包括以下更改:添加或删除方法或字段更改方法签名更改方法或类的修饰符更改类继承行为更改枚举中的值添加或移除资源更改应用清单更改原生库(SO文件)库和插件
某些库和插件会自动更改应用的清单文件或清单中引用的资源。这些自动更新可能会通过以下方式干扰ApplyChanges:如果库或插件更改应用的清单,您不能使用ApplyCodeChanges图标或ApplyChangesandRestartActivity图标,而必须重启应用,然后才能看到相应更改。如果库或插件更改应用的资源文件,您不能使用ApplyCodeChanges图标,而必须使用ApplyChangesandRestartActivity图标来查看相应更改。
您可以通过为调试构建变体停用所有自动更新来避免这些限制。
例如,Crashlytics在每次构建过程中使用唯一的构建ID更新应用资源,这会阻止您使用ApplyCodeChanges图标
,并要求您重启应用的Activity才能看到相应更改。您可以停用此行为,以便能将ApplyCodeChanges与Crashlytics一起用于调试build。直接引用已安装APK中的内容的代码
如果您的代码直接引用已在设备上安装的应用APK中的内容,在您点击了ApplyCodeChanges图标
后,该代码可能会导致崩溃或出现异常。发生此行为的原因是,当您点击ApplyCodeChanges时,设备上的底层APK会在安装过程中被替换。在这些情况下,您可以改为点击ApplyChangesandRestartActivity图标或Run图标。