J2ObjC 大会背后的动机

J2ObjC 一开始感到沮丧;几个开发团队因尝试快速迭代其 Web 产品和移动产品而又不至于在功能方面出现偏差,这令人沮丧。Google 的许多客户端产品都是使用适用于 Web 应用的 GWT(现为 J2CL)和适用于 Android 移动设备的 Android API 创建的。那就离开了 iPod/iPad 应用,它们必须是 JavaScript Web 应用,或者用 Objective-C 手写。尽管 GWT 和 Android 应用可以共享业务逻辑(非界面)代码,但还没有任何解决方案来与 iOS 应用共享该代码。

我们研究了几种解决此问题的方法。 XMLVM 看起来前景光明,但当时其 iOS 翻译工具页面表示该项目已被暂停(它现在再次处于启用状态,是此项目的理想替代方案)。 其他转换工具则执行一次性代码转换,需要额外修改它们的输出才能成功构建并运行。

新项目诞生

从一开始,许多工程师就认为 J2ObjC 这样的翻译工具不可能实现。打造一款能够将所有 Java 应用代码准确转换为 iOS 同时完全保留其语义的工具确实不可能!这是因为 iOS 拥有严格的界面设计标准,如果应用不遵守这些标准,用户就会非常意识到。我们认为,要获得世界级、快速的 iOS 界面,唯一的方法就是使用 Apple 的 iOS SDK 框架以 Objective-C 语言编写该界面。

然而,正如大多数工程师从差分微积分的极限中学到的一样,接近不可能问题会非常有用。因此,我们制定了一系列限制,以提高 J2ObjC 取得成功的几率:

  • 仅支持客户端开发。理论上,命令行工具和服务器代码可以转换,但该用例可能存在 J2ObjC 无法解决的问题。
  • 仅支持业务逻辑代码,并远离界面 API(就像过去在偏远角落里那样,有“怪物”)。
  • 需要 iOS 基础框架,而不是更宽泛的基础框架。
  • 在实现 Apple 的内存管理最佳实践后,使用 Xcode 的插桩验证可接受的性能和内存使用情况。
  • 只需关注应用开发者需要的内容,而不是实现完整性所需的内容。真实应用的需求驱动项目要求。

我们觉得它很实用,也许您也会喜欢

我们开放了 J2ObjC 的源代码,因为一些内部项目发现它解决了与其 iOS 应用共享 Java 业务逻辑的问题。现在,有多个团队依赖于该翻译器,而我们正忙着添加新功能并修复许多 bug。我们欢迎其他移动应用团队试用此工具,告诉我们哪些方面行之有效,哪些方面需要改进。

我们也发现,参与这个项目也会带来丰厚的回报。任何 Java 翻译工具的两项最困难的任务是:1) 正确解析、类型检查和解析 Java 源代码,以及 2) 提供兼容的 Java 运行时环境。第一个任务由 javac 编译器妥善处理,而运行时环境(包括其单元测试)以 Android libcore 库为基础。这给我们留下了很多有趣的东西:更改抽象语法树,以及生成通常易于调试的源输出。如果您对 Java 工具或编译器感兴趣,欢迎加入我们!你还有很多事情要做,我们非常希望能够帮助到你。