24

1) 在 Android 上启用热插拔调试是否需要任何特殊设置/配置?

示例案例:

  • 在进入 Activity 的 onCreate 方法后添加断点。
  • 在断点之后动态添加新行(虚拟“if (1==1) return;”代码)
  • 转到下一条指令-> 问题:我的调试器没有在这一行中断,而是跳到下一条,导致我相信新行没有热交换到 VM 中。

2)只有模拟器支持热插拔吗?有没有同样支持的手机?

4

4 回答 4

22

每次构建 Android 项目时,它都会被 dexed 并放入一个调试签名的 apk 中,该 apk 会发送到您的手机/模拟器。因此,热插拔并不容易做到。

Hotswap 是精心设计的 JVM 的产物,它使交换类成为可能。在 Android 上,你有 Dalvik VM,它目前不支持热插拔。

不过,我猜 ADT 团队在他们的名单上有这个高分。

编辑:尽管这个答案已经过去了 2.5 年,但变化不大。然而,ZeroTurnaround 已经准备好了,Android 版的 JRebel 应该为我们提供了一种非常需要的热插拔方法。 http://zeroturnaround.com/software/jrebel-for-android/

EDIT2:随着 Android Studio 2.0 Instant Run 的发布,您可以进行热插拔。热交换将在您的应用程序运行时更改一个类。

它们还支持热交换,这比热交换更能影响您的应用程序。热交换仍然让您的应用程序运行。资源更改将触发热交换。

观看 2015 年 Android 开发者峰会的演讲以了解更多信息:https ://www.youtube.com/watch?v=fs0eira2pRY

于 2012-07-31T14:48:32.527 回答
8

Android Studio 2.0 预览版引入了热插拔功能。您可以通过升级到:

        classpath group: 'com.android.tools.build', name: 'gradle', version: '2.0.0-alpha1'

然后从菜单中设置它:

在此处输入图像描述

于 2015-11-25T01:07:05.270 回答
4

模拟器本身不支持代码热插拔,但使用 InstaReloader 等附加工具可以实现所需的操作。您可以免费使用此Android 热插拔工具

于 2013-11-21T23:34:06.367 回答
2

不是真正的热交换,但 Github 上有一个库可以模拟它。你可以在这里找到它:https ://github.com/mmin18/LayoutCast

它有一些问题,但在撰写此答案时处于活动状态。

此外,ZeroTurnaround 似乎正在解决 JRebel for Android 的问题。您可以在此处请求测试版访问权限:http: //zeroturnaround.com/software/jrebel-for-android/

于 2015-08-18T17:14:06.287 回答