7

在我的 android 应用程序中,我在启用即时运行的情况下对其进行调试。

该应用程序经常给我意外错误,如果我进行了干净的构建,这些错误就会得到解决。

例如,有时在类实际存在的情况下会出现类未找到异常。此外,有时在尝试将View返回的 byfindViewById()转换为目标类型时会出现类转换异常(可能 android studio 在热部署布局时误解了元素 ID)。

所有这些错误都无需更改代码即可解决,只需进行完整构建即可。Instant run 成功地使构建过程对我来说慢了两到三倍。

为什么我会收到这些错误?有谁知道如何让即时运行正常工作?

4

4 回答 4

6

你不是唯一一个。Instant Run 目前不太稳定,或者我们可以说不可靠。

如本文档所述,Instant Run 有几个交换步骤。在您的情况下,Instant Run 无法很好地识别您的更改,即使需要冷交换,热交换也是如此,等等。

Instant Run 在编辑次要 GUI 位置时很有用,我想说它是目前唯一有用的场景,所以我建议您在一般开发过程中将其关闭。您可以通过取消选中Settings > Build, Execution, Deployment > Enable Instant Run to hot swap...复选框来禁用它。

如果你觉得 Instant Run 很花哨,还想用它,那么你可能会多次遇到这样的问题。为此,只需按照您的经验重建所有内容。这就是我们现在所能做的。

于 2016-06-24T02:19:01.690 回答
3

Instant Run 现在仍然充满错误。连谷歌都这么说:

Instant Run 旨在在大多数情况下加快构建和部署过程。但是,使用 Instant Run 的某些方面可能会影响其行为以及与您的应用程序的兼容性。如果您在使用 Instant Run 时遇到任何其他问题,请提交错误

它将一些 dex 文件添加到我们的应用程序以加快构建和部署过程。有时当更改布局然后构建并运行项目时,它仍然显示旧布局。甚至由它生成的 apk 也不会在某些设备上运行。

现在,最好将其关闭:

要禁用即时运行:

  1. 打开设置或首选项对话框。
  2. 导航到构建、执行、部署 > 即时运行。
  3. 取消选中启用即时运行旁边的框。
于 2016-06-24T06:21:06.843 回答
1

这是关于Instant Run的文档:

  1. Android Studio 现在部署干净构建的速度比以往任何时候都快。此外,将增量代码更改推送到模拟器或物理设备现在几乎是即时的。无需重新部署新的调试版本或在许多情况下无需重新启动应用程序即可查看您的更新。
  2. Instant Run 支持将以下更改推送到正在运行的应用程序:
    • 更改现有实例方法或静态方法的实现
    • 对现有应用资源的更改
    • 结构代码的更改,例如方法签名或静态字段(需要运行 API 级别 21 或更高级别的目标设备)。

所以我认为当您添加新类或添加新 view_id 时,您需要清理 - 重建您的项目。这只是我的看法,如果我错了,请纠正我。 有关即时运行的更多信息

于 2016-06-24T03:08:28.030 回答
0

如果我更改AndroidManifest.xml文件,android studio 会执行完整的构建,但这比先清理然后构建项目要快得多。

因此,每当我希望 android studio 完全构建项目时,我都会在清单文件中添加一个空行。这对于执行手动完整构建非常有效。

于 2016-09-05T10:58:27.413 回答