`
sillycat
  • 浏览: 2551260 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Build the iOS Things with J2Objc

 
阅读更多
Build the iOS Things with J2Objc

1. Install the J2Objc
Get the latest file from here https://j2objc.googlecode.com/files/j2objc-0.7.zip.

Unzip and put in the tool directory. Link it to the work directory.
>cd /opt
>sudo ln -s /Users/carl/tool/j2objc-0.7 ./j2objc-0.7
>sudo ln -s ./j2objc-0.7 ./j2objc

Add that directory to the bash path
>vi ~/.profile
export PATH=/opt/j2objc:$PATH
>. ~/.profile

2. Try the Sample
Follow the document, try a JAVA class hello world.
public class Hello {
  public static void main(String[] args) {
    System.out.println("hello, world");
  }
}

Compile the Java source code
>javac Hello.java
I got the class file Hello.class

Run the java class file based on JVM
>java Hello

Translate the JAVA source code to Object-C
>j2objc Hello.java
translating Hello.java
Translated 1 file: 0 errors, 0 warnings

I got 2 files, Hello.m and Hello.m

Compile the Object C source codes
>j2objcc -c Hello.m
Then there is a Hello.o file then.

Generate the executable file
>j2objcc -o hello Hello.o
Then there is a executable file named hello

Try to run that
>./hello
2013-04-11 13:52:44.019 hello[41640:707] hello, world

3. How to make that work with Maven
<build>
...
<plugin>     <groupId>org.codehaus.mojo</groupId>     <artifactId>exec-maven-plugin</artifactId>     <inherited>false</inherited>     <executions>          <execution>          <id>gen-objc</id>          <phase>package</phase>          <goals>               <goal>exec</goal>          </goals>          <configuration>               <executable>./gen-objc.sh</executable>               <arguments>                    <argument>${project.artifactId}</argument>               </arguments>          </configuration>          </execution>     </executions>

</plugin>
</build>

This make the execution of the shell script during the package phase
>mvn package

Here are the shell script gen-objc.sh
#!/bin/bash
#  call this shell script with the project artifactId

if [ ! -n "$1" ]
then
  echo "Usage: `basename $0` artifactId"
  exit
fi 

ARTIFACT_ID=$1
J2OBJC_OUT_DIR=gen-objc
SRC=target/${ARTIFACT_ID}-*-sources.jar
J2OBJCFLAGS="--no-package-directories -use-arc --prefixes sdk-core-prefixes.properties"

# Set this to point to j2objc home 
J2OBJC_DISTRIBUTION=/opt/j2objc
J2OBJC=${J2OBJC_DISTRIBUTION}/j2objc

if [ ! -e "$J2OBJC" ]; then
  echo "***************************************************"
  echo "***************************************************"
  echo " ERROR ... ERROR ... "
  echo " --> could not find ${J2OBJC} "
  echo " please install before continuing..."
  echo "***************************************************"
  echo "***************************************************"
  exit
fi

rm -rf ${J2OBJC_OUT_DIR}

${J2OBJC} -d ${J2OBJC_OUT_DIR} ${J2OBJCFLAGS} ${SRC};

cd ${J2OBJC_OUT_DIR}

rm I*.m

for y in `ls *`;
do
  sed -f ../objc_post_processing.sed $y > temp; mv temp $y;
done

# this is the customer things, if you do not need that, that is fine
# Replace SxxError with NSError *
rm SxxError.h

cd ..


In the file, sdk-core-prefixes.properties, they are the packages I think.
com.sillycat.easyrestapi.core:
com.sillycat.easyrestapi.core.impl:

Something like that.

For the file objc_post_pressing.sed, that maybe just get rid of some lines in the source codes.
# 0. generic preprocessing .. remove comments..
s/\(\/\/.*Created by \).*/\1 Xxxxxxx Compiler/g

# 1. j2objc generates fooWithNSString:(NSString *)name; for Java method
# foo(String name). We want foo:(NSString *)name;

s/With.*:(/:(/g

# 2. Replace JavaUtilDate with NSDate

s/JavaUtilDate/NSDate/g
s_#import "java/util/Date.h"__g
s/@class NSDate;//g

# 3. Replace JavaUtilList with NSArray *

s/id<JavaUtilList>/NSArray */g
s_#import "java/util/List.h"__g
s/@protocol JavaUtilList;//g

# 4. Replace JavaUtilSet with NSSet *

s/id<JavaUtilSet>/NSSet */g
s_#import "java/util/Set.h"__g
s/@protocol JavaUtilSet;//g

# 5. Replace XxxxxError with NSError *

s/id<XxxxxError>/NSError */g
s/@protocol XxxxxError;//g

# 6. Remove JreEmulation

s/#import "JreEmulation.h"//g

# 7. Replace 'withXxx' with 'with'

s/withXxx/with/g


4. Eclipse Plugin
http://j2objc-updatesite.hsapkota.com.au/4.2
Choose the directory of the installation j2obc and select a output directory. It works.

References:
https://code.google.com/p/j2objc/
http://hsapkota.com.au/index.php/projects/20-j2objc-eclipse-plugin-howto




分享到:
评论

相关推荐

    j2objc-annotations-1.3-API文档-中文版.zip

    赠送jar包:j2objc-annotations-1.3.jar; 赠送原API文档:j2objc-annotations-1.3-javadoc.jar; 赠送源代码:j2objc-annotations-1.3-sources.jar; 赠送Maven依赖信息文件:j2objc-annotations-1.3.pom; 包含...

    j2objc-annotations-1.1-API文档-中文版.zip

    赠送jar包:j2objc-annotations-1.1.jar; 赠送原API文档:j2objc-annotations-1.1-javadoc.jar; 赠送源代码:j2objc-annotations-1.1-sources.jar; 赠送Maven依赖信息文件:j2objc-annotations-1.1.pom; 包含...

    j2objc ios demo

    如果无法运行 查看J2OBJC_HOME是否正确; 查看Build Phases中的JRE.framework是否引入 相关的博客 http://blog.csdn.net/coooliang/article/details/79346001

    J2OBJC的demo

    J2OBJC的出现解决了跨平台开发中的一个重要问题,尤其是在企业级应用中,许多公司已经积累了大量的Java代码,通过J2OBJC可以轻松地将这些代码引入到iOS项目中。 **J2OBJC的工作原理** J2OBJC的工作流程大致分为...

    j2objc-annotations-1.1.jar

    The type com.google.j2objc.annotations.ReflectionSupport$Level cannot be resolved. It is indirectly referenced from required .class files

    j2objc-annotations-1.1-API文档-中英对照版.zip

    赠送jar包:j2objc-annotations-1.1.jar; 赠送原API文档:j2objc-annotations-1.1-javadoc.jar; 赠送源代码:j2objc-annotations-1.1-sources.jar; 赠送Maven依赖信息文件:j2objc-annotations-1.1.pom; 包含...

    j2objc-0.5.6.zip_J2ObjC_j2objc-0.5.6

    J2ObjC是一款强大的开源工具,主要功能是将Java语言编写的代码转换为Objective-C代码,使得Java开发者能够在iOS平台上进行开发,无需完全掌握Objective-C语言。这个工具由Google开发并维护,版本号为0.5.6,它为跨...

    j2objc-annotations-2.8.jar

    javaweb/javaee 常用jar包,亲测可用,若需其他版本其他jar包请留言我看到后会上传分享

    j2objc-annotations-1.3.jar

    java运行依赖jar包

    j2objc-annotations-1.3.jar中文-英文对照文档.zip

    Gradle依赖:【***.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【***-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: 中文-英文对照文档,中英对照文档,java,jar包...

    j2objcDemo

    **标题解析:** "j2objcDemo" 是一个基于j2objc框架的示例项目,旨在展示如何在iOS环境中调用Java代码。 **j2objc介绍:** j2objc 是Google开发的一个开源工具,它允许Java开发者将Java代码转换为Objective-C,以便...

    WSDL2Objc下载工具

    标题中的“WSDL2Objc下载工具”是一个专门为iOS开发者设计的实用程序,它的主要功能是自动生成Objective-C客户端代码,从而简化与Web服务的集成过程。这个工具可以解析WSDL文件,并生成对应的Objective-C类,使得...

    ios-cocos2d-objc实现的跑酷游戏.zip

    【标题】"ios-cocos2d-objc实现的跑酷游戏.zip" 提供的是一个基于Cocos2D-Objective-C框架开发的iOS平台上的跑酷类游戏源代码。Cocos2D-Objective-C是Cocos2D游戏引擎的一个版本,专为iOS应用设计,它允许开发者使用...

    演示如何在 使用J2ObjC 的 iOS 应用程序中使用 黑白棋游戏引擎的示例_java_Objective-C_代码_下载

    这是一个示例,展示了如何在使用 J2ObjC 的 iOS 应用程序中使用黑白棋游戏引擎。 最初的游戏奥赛罗由 Mats Luthman 编写,可从 他的网站获得。Mats 将其设计为既可以用作 Swing 应用程序,也可以用作命令行应用程序...

    j2objcJava转成Objective-C的用于移植Android库到iOS

    标题:“j2objc:Java转成Objective-C的用于移植Android库到iOS” j2objc 是一个开源工具,由Google开发,它的主要目的是帮助开发者将Java代码转换为Objective-C,使得Android库能够顺利地在iOS平台上运行。这个...

    j2objc-dagger:使用 J2Objc 对 Dagger2 进行测试翻译

    **标题解析:**"j2objc-dagger"指的是一个项目,它关注的是如何利用J2ObjC工具对Dagger2这个依赖注入框架进行翻译,以便在iOS平台上进行测试或运行。这里的“测试翻译”可能意味着将Java代码转换为Objective-C,以...

    j2objc_starter_kit

    J2objc入门套件入门工具包是使用入门的好方法。 它包括一个简单的演示,向您... 假设在Mac上, $ln -s /path_to/j2objc/dist/j2objc /usr/bin/j2bjc$ln -s /path_to/j2objc/dist/j2objcc /usr/bin/j2objcc 通过键入以下

    WSDL2Objc(iphone)

    `WSDL2Objc` 是一个非常实用的工具,它能够帮助开发者自动生成适用于iPhone端的Objective-C源代码,从而简化了在iOS应用中调用Web服务的过程。这一工具的核心功能在于,它能够解析WSDL(Web Services Description ...

    j2objc-gradle:该插件不再有效维护。 J2ObjC Gradle插件-Android app source code

    J2ObjC Gradle插件使Java源代码成为iOS应用程序构建的一部分,因此您可以用Java编写应用程序的非UI代码(例如应用程序逻辑和数据模型),然后由Android应用程序(本机为Java)和iOS共享应用程序(使用J2ObjC)。...

Global site tag (gtag.js) - Google Analytics