Android:应用程序经常崩溃 运行

Android: App crashes frequently with instant run

在我的 android 应用程序中,我正在启用即时 运行 进行调试。

该应用程序经常出现意外错误,如果我进行全新构建,这些错误就会得到解决。

例如,有时 class not found 异常 class 实际上在那里。此外,有时在尝试将 findViewById() 返回的 View 转换为目标类型时会出现 class 转换异常(可能 android 工作室在热部署时误解了元素 ID布局)。

所有这些错误都可以在不更改代码的情况下得到解决,只需进行完整构建。 Instant 运行 已经成功地让我的构建过程慢了两到三倍。

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

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

Instant 运行 有几个交换步骤,如 this document describes。在您的情况下,Instant 运行 无法很好地识别您的更改,即使需要冷交换,热交换也是如此,等等。

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

如果您认为 Instant 运行 很花哨并且仍然想使用它,您可能会多次遇到这样的问题。为此,只需按照您的经验重建所有内容。这就是我们现在所能做的。

这是关于 Instant 运行 的文档:

  1. Android Studio now deploys clean builds faster than ever before. Additionally, pushing incremental code changes to the emulator or a physical device is now almost instantaneous. Review your updates without redeploying a new debug build or, in many cases, without restarting the app.
  2. Instant Run supports pushing the following changes to a running app:
    • Changes to the implementation of an existing instance method or static method
    • Changes to an existing app resource
    • Changes to structural code, such as a method signature or a static field (requires a target device running API level 21 or higher).

所以我认为当您添加新的 class 或添加新的 view_id 时,您需要清理 - 重建您的项目。这只是我的看法,如果我错了请纠正我。 More info about Instant Run

Instant 运行 现在仍然充满错误。甚至 google 也说:

Instant Run is designed to speed up the build and deploy process in most situations. However, there are some aspects to using Instant Run that might affect its behavior and compatibility with your app. If you experience any other issues while using Instant Run, please file a bug

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

现在,最好将其关闭:

To disable Instant Run:

  1. Open the Settings or Preferences dialog.
  2. Navigate to Build, Execution,Deployment > Instant Run.
  3. Uncheck the box next to Enable Instant Run.

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

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