1) 在 Android 上启用热插拔调试是否需要任何特殊设置/配置?
示例案例:
- 在进入 Activity 的 onCreate 方法后添加断点。
- 在断点之后动态添加新行(虚拟“if (1==1) return;”代码)
- 转到下一条指令-> 问题:我的调试器没有在这一行中断,而是跳到下一条,导致我相信新行没有热交换到 VM 中。
2)只有模拟器支持热插拔吗?有没有同样支持的手机?
每次构建 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
模拟器本身不支持代码热插拔,但使用 InstaReloader 等附加工具可以实现所需的操作。您可以免费使用此Android 热插拔工具
不是真正的热交换,但 Github 上有一个库可以模拟它。你可以在这里找到它:https ://github.com/mmin18/LayoutCast
它有一些问题,但在撰写此答案时处于活动状态。
此外,ZeroTurnaround 似乎正在解决 JRebel for Android 的问题。您可以在此处请求测试版访问权限:http: //zeroturnaround.com/software/jrebel-for-android/