在我的Android应用程序中,我正在调试它,启用了即时运行。
该应用程序经常给我意外错误,如果我做了一个干净的构建,它会得到解决。
例如,有时会发现类没有找到异常,其中类实际存在。此外,在尝试将View
返回的findViewById()
强制转换为目标类型时,有时会出现类强制转换异常(可能android studio在热部署布局时误解了元素ID)。
只需执行完整版本,所有这些错误都可以在不进行代码更改的情况下得到解决。即时运行已成功使构建过程慢了两到三倍。
为什么我会收到这些错误?有谁知道如何立即运行正常工作?
答案 0 :(得分:6)
你不是唯一的一个。 即时运行几乎没有稳定,或者我们现在说不可靠。
Instant Run有几个交换步骤为this document describes。在您的情况下,Instant Run无法很好地识别您的更改,因此即使需要冷交换也需要进行热交换,等等。
在编辑次要GUI放置时,Instant Run非常有用,我想说它是目前唯一有用的场景,因此我建议您在一般开发过程中将其关闭。您可以通过取消选中Settings > Build, Execution, Deployment > Enable Instant Run to hot swap...
复选框来禁用它。
如果您认为Instant Run很花哨并仍想使用它,您可能会多次遇到这样的问题。为此,只需按照您的经验重建所有内容。这就是我们现在所能做的一切。
答案 1 :(得分:3)
Instant Run现在仍然充满了bug。甚至谷歌都说:
Instant Run旨在加快构建和部署过程 大多数情况。但是,使用Instant Run还有一些方面 这可能会影响其行为和与您的应用程序的兼容性。如果你 在使用即时游戏时遇到任何其他问题,请file a bug
它会向我们的应用添加一些dex文件,以加快构建和部署过程。 有时在更改布局然后构建并运行项目时,它仍然显示旧布局。即使是由它生成的apk也无法在某些设备上运行。
现在,如果我们关闭它会更好:
禁用即时运行:
- 打开“设置”或“偏好设置”对话框。
- 导航至构建,执行,部署>即时跑步。
- 取消选中启用即时运行旁边的复选框。
醇>
答案 2 :(得分:1)
这是关于即时运行:
的文档
- Android Studio现在比以前更快地部署干净的构建。 此外,将增量代码更改推送到模拟器或 物理设备现在几乎是瞬间完成的。查看您的更新 无需重新部署新的调试版本,或者在许多情况下没有重新部署 重启应用程序。
- Instant Run支持将以下更改推送到正在运行的应用:
醇>
- 对现有实例方法或静态方法的实现的更改
- 对现有应用资源的更改
- 对结构代码的更改,例如方法签名或静态字段(需要运行API级别21或更高级别的目标设备)。
所以我认为当你添加新类或添加新的view_id时,你需要清理 - 重建你的项目。这只是我的意见,如果我错了,请纠正我。 More info about Instant Run
答案 3 :(得分:0)
如果我更改了AndroidManifest.xml
文件,android studio会执行完整版本,但是这可以更快地进行清理,然后构建项目。
所以,每当我想让android studio完全构建项目时,我就会在清单文件中添加一个空行。这对于执行手动完整构建非常有效。