首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >j2ObjC是如何工作的

j2ObjC是如何工作的
EN

Stack Overflow用户
提问于 2019-09-05 15:47:59
回答 2查看 312关注 0票数 1

我来这里是为了澄清j2ObjC是如何工作的。我已经在android上开发了自己的应用程序,现在我正试图以尽可能少的问题进入IOS世界。我听说过j2objc,在我使用它之前我就知道它的机制了。我知道j2objc将UI创建留给开发人员,但是如果我尝试转换一个包含文本视图、回收器视图及其适配器等声明的java文件,它是如何工作的呢?它使得不可能转换整个文件,删除有问题的部分,或者尝试找到它们的等价物?最后,我是应该使用它来转换活动的所有Java文件,还是只转换最简单的java文件(比如构造函数、getter和setter等)。感谢每一个愿意花些时间帮助我的人:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-05 17:13:49

+1给伍德罗关于J2ObjC是如何工作的答案。我们选择从源代码到源代码,因为当项目启动时,苹果似乎非常坚决地不允许在iOS上使用类似于Java的语言:例如,不允许GC或动态代码执行。为了避免任何AppStore阻塞,我们生成了源代码,如果有必要的话,可以对其进行可视化检查以确保遵从性。当输出是另一种语言而不是对象代码时,它还帮助开发人员更容易地查找和报告编译错误。

不过,我认为你真正要问的问题是,J2ObjC在翻译现有的安卓应用程序时会有多大的用处。不幸的是,答案是“很少”。J2ObjC的第一个客户是Gmail的收件箱( Inbox ),它已经被设计成可以让它的服务器和Android客户端共享Java代码,然后由它的web客户机使用GWT共享。它的UI代码没有被共享,但是这个应用在发布时仍然有70%的共享Java代码,因为它从一开始就被设计为共享代码。专门为Android编写的较小的应用程序可能很少有可共享的代码,因为数据模型和业务逻辑被嵌入到控制UI的类中。

因此,如果您有一个较小的应用程序,特别是业务逻辑和数据模型都保存在服务器上(或者您的应用程序没有服务器组件),那么最好的方法是在iOS中进行完全重写。这听起来很难,但是设计这个应用程序的困难部分已经在你的Android应用程序中完成了。

票数 3
EN

Stack Overflow用户

发布于 2019-09-05 16:22:13

J2ObjC是一个转播器,或"源对源编译器“。

普通编译器接受源代码作为输入,并生成可执行二进制文件作为输出。另一方面,转换程序输出与输入不同形式的源代码。在这种情况下,J2ObjC输入Java源代码并输出目标C源代码。

编译器通常为源代码构建一个内部的中间结构表示,称为“抽象语法树”。构建此树的过程称为“解析”,其中的一部分包括查找会阻止代码编译的错误--例如引用从未声明过的变量。根据每种语言所具有的特性,每种语言的AST看起来有点不同,而且每种AST都是原始源文件的直接一对一的反射(这意味着它可以反转)。

J2ObjC的工作方式是解析您的Java源代码,从该源代码构建一个Java抽象语法树,然后在该树上进行一系列转换,将其转化为Objective抽象语法树。然后将该树反向解析为Objective源代码文件。

转换程序中最复杂的部分通常是将一种语言的AST转换成另一种语言所需的规则。通常,这是通过在每种语言中寻找等价的语法特性来实现的,而只是替换它们,但有时还需要重写大量代码,甚至省略对输入语言某些特性的支持。

作为一种简单的思维练习,想象一下一个可以将C代码转换为Python代码的转换程序。假设C提供了一个switch-case语句,但是Python没有这样的语言结构。在这个场景中,一个C到Python可以用一系列的switch-case .elif语句来代替这个elif

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57809007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档