使用j2objc实现iOS调java
来源:互联网 发布:小学九宫图算法 编辑:程序博客网 时间:2024/05/04 13:05
故事背景为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)
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目录的准确性
将$source-root改为工程名,这里我的工程名是j2objcTestDemo
在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
当然,如果没有正确配置环境的话是无法编译通过的
另外注意:
1、如果java代码中使用了包,则j2objc会默认更改类名(在原有类名之前加包名)
此时在objc中调用会报错,说类不存在
进入对应的.h会发现,类名被加了前缀
改为对应的类名,编译通过
有关包名加前缀的问题,可以参考官方文档 https://github.com/google/j2objc/wiki/Package-Prefixes
2、在java中使用了类属性的情况,j2objc同样更改了类属性名,调用的时候直接使用即可。显然查看j2objc转换后的文件才是王道。
3、对于使用数组的情况,暂时还没发现把j2objc的数组直接转化为objectC数组的方法(强转当然是不行的),因此使用如下方法取得数组中的元素
使用此方法取数组长度
使用此方法取数组元素
最后感谢flychen的分享:http://www.cnblogs.com/flychen/archive/2012/10/15/j2objc.html
- 使用j2objc实现iOS调java
- j2objc的使用
- j2objc
- j2objc java代码转换成objective-c
- VNWare+MAC+J2Objc+Eclipse 环境配置和搭建---(J2Objc的使用)
- 第八天 java转Objective-C工具 J2ObjC
- 谷歌J2ObjC:打破Android应用与iOS应用之间的语言障碍
- 谷歌J2ObjC:打破Android应用与iOS应用之间的语言障碍
- 谷歌J2ObjC:打破Android应用与iOS应用之间的语言障碍
- 谷歌J2ObjC:打破Android应用与iOS应用之间的语言障碍
- 【转载】J2ObjC:谷歌的Java/Objective-C代码转换工具
- 从Java到ObjC语言的桥梁:谷歌J2ObjC 0.7版本亮相
- j2objc简单调用
- iOS 使用Block实现函数回调
- java实现ios推送
- iOS 使用UICollectionView实现轮播图
- IOS推送消息(java实现)
- iOS推送实现 + JAVA后台
- 第十三周 项目一(1):动物这样叫(基础)
- HDU 2112— HDU Today,最短路径算法,Dijkstra
- Oracle分析函数
- js 跳出多层循环
- JS改变input的value值不触发onchange事件解决方案
- 使用j2objc实现iOS调java
- Linux体系结构相关
- Tyvj P1728 普通平衡树 (平衡树)
- Android Dex: [ActivityName] Unable to execute DX
- Setting up Gulp, Bower, Bootstrap Sass, & FontAwesome
- 3.8LongestCommonPrefix
- 电流互感器
- BZOJ 3456 城市规划 快速傅里叶变换
- Objective-c的@property 详解