j2objc

谷歌推出的j2objc可以将不涉及UI的java代码转换(翻译)为objective-c的代码。推出此工具的目的是能够使用java编写的逻辑部分、数据处理部分等不涉及UI的核心代码,而这些代码能够轻松的使用在web端,Android客户端,和ios客户端(j2objc)。前2个因为本身就是java环境,所以java的核心代码重复使用没有太大的问题,而ios客户端采用Objective-c作为编程语言,j2objc转制的代码可用性大吗?和相同业务逻辑用原生objective-c编写出来的代码,有多大的差异?虽然java有垃圾回收机制,但是ios5之后xcode不是有ARC么,唯一不同的地方仅仅是objective-c的垃圾回收由编译器在编译的时候就完成了。

注意注意注意:该j2objc不能转换jar包和UI代码!!!

接下来我们聊一下具体的转换操作:

1.项目->TARGETS->Build Rules新建Java Source files,内容:

/Users/gaolailong/Desktop/Java2OC/j2objc-2.0.5/j2objc -d ${DERIVED_FILE_DIR} -sourcepath ${PROJECT_DIR}/Java2OCTest \
--no-package-directories ${INPUT_FILE_PATH};

注意修改你自己的项目名字和你下载的j2objc目录的正确性。
/Users/gaolailong/Desktop/Java2OC/j2objc-2.0.5/j2objc为你下载的j2objc目录文件夹;
这里写图片描述
Java2OCTest为我自己的项目名字。

如图:
这里写图片描述

然后在Output Files中添加

$(DERIVED_FILE_DIR)/${INPUT_FILE_BASE}.h

$(DERIVED_FILE_DIR)/${INPUT_FILE_BASE}.m

2.Build Settings-Search Paths中添加你下载的j2objc目录中的子目录如图:
这里写图片描述

这里写图片描述

3.最后,Build Settings-Linking-Other Linker Flags中添加

$(inherited) -l"z" -l"jre_emul" -l"icucore" -l jre_emul -ObjC 

OK。是时候写一个项目实践一下了。
Demo地址:Java2OCTest 密码:bsrr

另外需要注意的是
1.当新增了java方法之后,直接调用的话是会报错的,因为j2objc还没有编译出对应的objc的代码,此时需要将整个工程Build编译一下,然后就可以调用了,当然,把工程clean之后也会默认报类似的错,Build一下工程即可。
2.如果java代码中使用了包,则j2objc会默认更改类名(在原有类名之前加包名),commod+鼠标左键进入查看具体变化,再根据实际情况调用。
有关包名加前缀的问题,可以参考官方文档 https://github.com/google/j2objc/wiki/Package-Prefixes
3.对于使用数组的情况,暂时还没发现把j2objc的数组直接转化为objectC数组的方法(强转当然是不行的),因此使用IOSIntArray取得数组中的元素,数组操作查看该类.h文件。

猜你喜欢

转载自blog.csdn.net/longlongvalue/article/details/79002597