使用j2objc实现iOS调java

    故事背景为Google发布的j2objc可以将java代码转换为objc,这便为iOS,安卓,服务器大一统提供了有利前提。

可以在github上找到j2objc的项目源码(https://github.com/google/j2objc),其实wiki上已经有很详细的说明了

技术分享


技术分享


使用步骤:

1、下载JDK并安装(https://support.apple.com/kb/DL1572?viewlocale=en_US&locale=en_US)

2、下载j2objc并解压(https://github.com/google/j2objc/releases)


3、添加java文件到xcode项目,很明显此时是编译不通过的,因为头文件就找不到

技术分享


4、项目-taget-Build Rules,点击"+",添加一个Java source files类型的脚本,输入脚本

$distribution-path/j2objc -d ${DERIVED_FILE_DIR} -sourcepath ${PROJECT_DIR}/$source-root \ 
   --no-package-directories ${INPUT_FILE_PATH};

注意:需要将上述$distribution-path改为步骤2中j2objc的解压目录(我当前的j2objc是在桌面上),注意保证$distribution-path/j2objc目录的准确性

在Output Files中添加

$(DERIVED_FILE_DIR)/${INPUT_FILE_BASE}.h
$(DERIVED_FILE_DIR)/${INPUT_FILE_BASE}.m


技术分享


技术分享


5、Build Settings-Search Paths-Header Search Paths,添加j2objc的include目录

6、Build Settings-Search Paths- Library Search Paths,添加j2objc的lib目录
技术分享


7、Build Settings-Linking-Other Linker Flags,添加

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

技术分享


8、至此,编译通过

技术分享


另外需要注意的是,当新增了java方法之后,直接调用的话是会报错的,因为j2objc还没有编译出对应的objc的代码,此时需要将整个工程编译一下,然后就可以调用了,当然,把工程clean之后也会默认报类似的错,编译一下工程即可

技术分享


技术分享


技术分享


还有就是带有入参的java函数,j2objc会将其转换为带有With参数类型的函数供外界调用

技术分享


demo地址:http://download.csdn.net/detail/xyxjn/8745147

当然,如果没有正确配置环境的话是无法编译通过的


最后感谢flychen的分享:http://www.cnblogs.com/flychen/archive/2012/10/15/j2objc.html


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。