ZeroTurnaround 宣布 JRebel for Android 1.0

  • Abraham Marín Pérez
  • 谢丽

2016 年 1 月 14 日

话题:JavaAndroid语言 & 开发

ZeroTurnaround 发布了JRebel for Android 的第一个稳定版本。它是流行插件 JRebel 的 Android 版本,允许修改正在运行中的应用程序,而且不必重新部署或重启。JRebel for Android 适用于 Android Studio,可以从JetBrains 插件库下载,支持所有运行 Android 4.0 及以上版本的手机和平板。ZeroTurnaround 提供了为期 21 天的免费试用,起步价为每年 49 美元。

Android 开发人员经常抱怨底层技术如何导致了缓慢的反馈回路。开发人员每次想要查看代码修改的效果时,都需要将 Android 应用重新编译、打包和安装到 Android 设备上并重启。除了需要耽误时间外,如果修改的特性是特定工作流中下游的一些步骤,开发人员还将不得不在每次变更部署后重新检查整个工作流。为此,开发者社区呼吁创建一种热交换功能至少已经有两年了。

为了满足这个需求,ZeroTurnaround 在 2014 年开始了与 JRebel for Android 相关的工作,并在 2015 年 4 月提供了一个测试版本。基于来自测试计划的反馈,ZeroTurnaround 在 2015 年 9 月推出了早期试用版。JRebel for Android 插件会向 Android Studio 的 Run 菜单添加新的操作选项,并修改 Gradle 构建文件,将允许同正在运行的应用程序进行代码热交换的工具包含进来。在Vimeo上,ZeroTurnaround 官方账号提供了一个演示视频——JRebel for Android 实战



JRebel for Android in Action from Official ZeroTurnaround Account on Vimeo.

技术细节

虽然提供了类似的功能,但底层技术的差别意味着传统的 JRebel 与 JRebel for Android 有着截然不同的工作方式。对于 JRebel,Java 代码的变化会被编译,而生成的字节码会通过类的重新加载插入到正在运行的 Web 应用程序。但是,Android 甚至都不使用 Java 虚拟机:直到 Android 4.0,Java 代码都是被编译成 DEX 文件,然后由Dalvik 虚拟机解释执行(在必要的打包和安装之后);从 Android 5.0 往后,DEX 文件接下来会被设备本身编译成原生机器代码;因此需要一种不同的方法。

按照 ZeroTurnaround 的说明,JRebel for Android 修改项目的 Gradle 构建文件,创建一个只包含 JRebel for Android 代理的 shell APK;这是唯一一个需要安装到开发用 Android 设备上的 APK。然后,实际的应用程序(DEX 文件和资源)会通过 ADB 发送给代理,后者会将它们作为一个正在运行的应用加载。一旦有修改,相关的 DEX 文件就会重新构建并同修改过的资源一起发送给代理,而不需要重新创建或安装一个新的 APK。

为了动态加载变化了的代码,代理会针对栈里最上面的活动调用 Activity.recreate,就是说会调用 onCreate、onStart、onResume。因此,为了使应用能够准确地在原处重新加载,开发人员需要恰当地处理 onSaveInstanceState。

JRebel for Android 代理只存在于开发过程中,当准备正式发布时,APK 中会只包含相关的 DEX 文件和资源。

可选方案

由于社区对于这类应用程序存在很大的需求,过去几年来已经出现了若干类似 JRebel for Android 的工具。虽然在 InfoQ 调查过的工具里面,没有一款同 JRebel 一样功能完善,但它们可能适合某些特定的需求,因此也值得一提。

Buck (Exopackage):由 Facebook 创建,使用它需要修改应用。免费使用。

Mirror:仅用于布局的快速编辑,不能向设备推送代码。一次性支付 79 美元即可获得使用许可,也可以免费试用 30 天。

Intel XDK中的“在线开发任务(Live Development Tasks)”:Intel XDK 是一个基于Cordova开发 HTML5 混合应用的 IDE,不支持原生 Android 应用开发。免费使用。

Android 设计预览:该工具仅简单地将部分桌面镜像到 Android 设备上;它不支持设备内交互,但可以提供一种快速测试布局的方法。免费使用。

LayoutCast:尚处于早期开发阶段,因此功能有限且存在稳定性问题。只能用于 Android 5 及更高版本。免费使用。


感谢谢丽对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群(已满),InfoQ 读者交流群(#2))。

JavaAndroid语言 & 开发