停止调试会话后,有没有办法强制上次热重载的更改持续存在?

Posted

技术标签:

【中文标题】停止调试会话后,有没有办法强制上次热重载的更改持续存在?【英文标题】:Is there a way to force changes from the last hot reload to persist after stopping debug session? 【发布时间】:2022-01-11 21:15:36 【问题描述】:

在结束调试/运行会话和/或从计算机上拔下我的手机并重新启动应用程序后,在 android Studio 中,本地安装的应用程序似乎没有保存上次热重载的更改。

我多次注意到这一点,并决定通过创建一个简单的页面并在单独的热重新加载(由我按 Ctrl+S 触发)中引入几个简单的 Text 小部件来运行实验,并且确实在重新启动应用程序后(拔掉电源后)只有两个Text 小部件中的第一个出现,表明确实最后一次热重载的更改已经丢失。

我不确定这是设计使然,还是我的开发环境中的某些东西不起作用。

无论哪种方式,我都希望能够轻松拔出并保留最后的更改,以便当我与远离我的计算机的其他开发人员讨论我的最新更改时,我们可以查看最新更改。

附:我知道我可以在每个开发会话结束时引入一个虚拟更改并拔下电源,以便所有 actual 更改都保留下来,但我想知道是否还有比添加更优雅的解决方案垃圾代码。

【问题讨论】:

只有在应用程序没有关闭/重新启动时,热重启/重新加载的更改才会持续存在。当您在手机上重新启动应用程序(不是通过 Android Studio 运行)时,它会打开最后安装的版本。如果要确保保留更改,则需要重新安装应用程序。在您的手机上卸载当前版本,然后使用您的更新在 Android Studio 中再次运行该应用程序。 【参考方案1】:

热重载的工作原理是将您的最新更改上传到可调试的进程中。源代码被编译成内核文件并发送到移动设备的 Dart VM。但是它们被加载到内存中。当您断开调试过程并终止您的应用程序时,在您再次打开后,它将从您磁盘中的最后一次实际编译中加载库。

应用更改并将它们同时保存在内存和磁盘中实际上会降低整个过程的效率并且目前不可用,很遗憾。

如果您想在不重新编译的情况下运行您的应用程序,您可以:

    连接您的设备 打开应用的旧安装版本 在 IDE 上单击带有箭头的小错误图标(参见屏幕截图)(或按两次 shift 然后输入“将调试器附加到 Android 进程”) 点击确定

请注意:如果您更改了本机代码,此方法将无法正常工作,例如安装通过平台通道添加功能的第三方库将需要您重新编译应用程序。

希望这会有所帮助。 VSCode 上也有同样的东西。

查看更多信息:https://docs.flutter.dev/development/tools/hot-reload

【讨论】:

我不确定你描述的四个步骤是否能解决我的目标,即拔掉电源并保持所有最新更改(很快就会尝试,我只是说我没有完全理解你!) .请澄清是否是这种情况。 否则,如何在拔出之前完全编译到磁盘?例如,我很高兴在结束一天的工作之前运行完整的编译。坦率地说,我只是找不到这样的按钮。我能找到的最接近的方法是创建一个 APK 并将其传输过来并从手机手动安装,这似乎比需要的更费力。 您试图实现的行为是不可能的。我强调,如果您担心加快开发过程,您可以执行上述步骤,这将允许您再次将本地更改应用到旧的 apk 文件。但也只存在于记忆中。如果您想在您的设备上安装最新版本的应用程序,您只需重新编译即可。 因此,就速度而言,我最好的选择是在拔掉电源之前使用虚拟更改方法。否则如果不是太麻烦的话,能否详细说明一下编译按钮在哪里?我找不到它(除了创建一个 APK 的那个,我必须手动移动到设备上)。再次感谢,如果您可以编辑您的答案以澄清我的目标是不可能的,那就太好了。不管怎样我都会接受你的回答! 我必须道歉,现在再读一遍,确实看起来有点混乱,但我写的有点匆忙,所以......正如我所说,我会尽快调整跨度>

以上是关于停止调试会话后,有没有办法强制上次热重载的更改持续存在?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 compojure 中进行热重载?

有没有办法在 Ktor 中热重载静态文件?

热重载不会热重载

无法在 Visual Studio 2022 上热重载

vscode中的颤动热重载按钮不起作用

Intellij idea 插件开发——热重载?