使用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

时间: 2024-10-10 06:05:19

使用j2objc实现iOS调java的相关文章

iOS 与 Java 服务器之间 SSL 握手失败的解决:Cipher Suites

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 先挖个坑,有机会填,没机会填也属正常,毕竟地球表面也布满了坑,只不过我们叫盆地或高山而已. Cipher Suites :加密套件?也许这么翻译也

[掌眼]iOS / Android / java / node.js 通用的 AES256 加解密算法

example.m NSString *text = @"text"; NSString *key32 = @"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; NSData *data = [text dataUsingEncoding:NSUTF8StringEncoding]; NSString *encryptedData = [[data AES256EncryptWithKey:key32] base64EncodedStringWi

AES256 = C# + Objective C(ios) + PHP + JAVA(Android) + Perl + Javascript

All Source sample_all_source_aes256_imcore_net.zip JAVA Sample : sample_java_aes256_imcore_net.zip  Java 6(only JDK6) security File : java_jdk6_security.zip Android (SDK 2.3.3) Sample : sample_android_aes256_imcore_net.zip  Java 6(only JDK6) security

iOS与Java原型设计模式,欢迎扫二维码加入订阅号进行讨论

什么是原型模式 什么时候用到原型模式 原型模式有那些优缺点 oc与java语法上原型模式有那些异同及简单的例子 首先看什么是原型模式: java:Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype.(用原型实例制定创建对象的种类,并且创建一个新的对象从原型对象拷贝而来.) iOS:客户端知道抽象prototype

iOS and JAVA 的 RSA 加密解密 (转载整理 )

参考原文地址:http://www.cnblogs.com/makemelike/articles/3802518.html (至于RSA的基本原理,大家可以看 阮一峰的网络日志 的 RSA算法原理(一) 和 RSA算法原理(二) ) 这篇文章只是做一个整理,帮大家理清一下步骤的而已( 英文版本请看 RSA Encrypt and Decrypt in IOS and JAVA ). 一.首先,打开终端Terminal, 生成必要的公钥.私钥.证书: openssl genrsa -out pr

三重Des对称加密在Android、Ios 和Java 平台的实现

引言 如今手机app五彩缤纷,确保手机用户的数据安全是开发人员必须掌握的技巧,下面通过实例介绍DES在android.ios.java平台的使用方法: DES加密是目前最常用的对称加密方式,性能优于非对称加密(RSA),是手机app请求数据加密的优先选择.   DES简介: DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法, 算法的入口参数有三个:Key.Data.Mode. Key:为7个字节共56位,是DES算法的工作密钥; Data:

【德州扑克开发记录】ios调facebook sdk时无法打开手机上装的fb客户端

之前同事说facebook后台->setting的bundle id没有关联到打包的bundle id,可是对应了之后ios依然不能挂起客户端. 调用时lua控制台输出错误:This app is not allowed to query for scheme fbauth 在以下网址找到答案http://www.jianshu.com/p/e38a609f786e 工程->ios下有个Info.plist文件,选中并在LSApplicationQueriesSchemes一栏中把fbauth

IOS、java支持DES加密

最近在考虑数据加密方面的需求,所以对数据加密简单的看了一下,当然不是看的原理,只是看看怎么能够实现.现在我们需要实现的是移动端和后台 (java)数据加解密的配合,开始的时候考虑的使用RSA,因为RSA是非对称加密,更加安全点,但是RSA加密的过程中,ios公钥加密的数据,后台 java是能够解密成功,但是后台java私钥加密的东西,前端ios,就没有解密成功,实验了很多方法,最终也没有成功,所以就放弃了,转向了安全性差 一点的DES加密. 对于DES.RSA的介绍,自己百度去吧,因为我也说不明

.net调java写的webService传过去的datetime,int等非string类型为null的问题

使用.NET向webService传double.int.DateTime 服务器得到的数据时null的问题 收藏 用C#.NET调用Java开发的WebService时,先在客户端封装的带有int属性的对象,当将该对象传到服务器端时,服务器端可以得到string类型的属性值,却不能得到int类型.double和DateTime类型的值(在服务端得到的均为null) 解决办法: VS2005封装WebService引用时,如果WebService发布的是一个基本数据类型组成的对象,则会对该对象的