Google已经将J2ObjC开源出来的,这是一个将Java代码转换为Objective-C的工具。
在此项目的wiki页面上有介绍,项目的初衷是解决一个app要在不同的平台上(Android,iOS)用不同语言开发两次的问题。
J2ObjC能够解决这个问题的大部分,它能够将你项目中的业务逻辑代码(Java)转换为对应的Objective-C代码;但是它不能转换界面代码。这是因为J2ObjC的开发者认为开发出高可用的iOS界面必须通过iOS的XCode工具,而不是生硬的转换或移植。
J2ObjC转换出的代码,使用了iOS Foundation Framework并能够集成到XCode中编译,运行或优化,与通过你自己新创建的XCode工程是一样的。
下面我们看看J2ObjC转换代码的几个关键步骤。
- Dead Code Elimination
这个步骤是用来删除Java文件中的无用代码,无用的代码当然无需转换了。
- Rewriter
这个步骤是将一些Java代码重写,这些Java代码是与Objective-C不能对应的代码,如静态变量。
- Autoboxer
这个步骤是处理整型类型数据,把Java中的原始的整型类型int转换为对象类型Integer。
- iOSTypeConverter
将Java的类转换为Objective C对应的类。
- iOSMethodConverter
将Java的方法申明中的参数和返回值类型转换为Objective C对应的参数和返回值类型。
- InitializationNormalizer
将Java中的初始化语句,全部转移到类的构造函数中。
- AnonymousClassConverter
将Java的匿名类转换为Objective C的内部类。
- InnerClassConverter
将Java内部类转换为Objective C的外部类,在同一个包内。
- DestructorGenerator
给每个生成的Objective C类增加一个析构方法。
Java代码转换为Objective C代码的最大问题是内存管理,Java代码是不会显示调用析构方法或finalize方法,而Objective C是需要的。
J2ObjC提供了几种管理无用对象的方法,默认的是对象引用技术方法。
J2ObjC还处于Alpha阶段,不过在Google内部已经有几个项目用了此工具。
另外一个类似的工具是XMLVM,它可以将Java,.NET, Ruby代码转换为.NET, Java, JavaScript, Python, Objective C代码。由它的名字可以想到,XVLVM将源代码的二进制文件先转换为XML,然后再将XML转换为另外一个虚拟机上的二进制文件,或者是源代码。
原文参考 Converting Java to Objective-C with Google’s J2ObjC
本文链接:http://www.yunweipai.com/933.html
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/53149.html