[メモ]j2objcでHello Worldやってみた


GoogleがJavaコードからObjective-Cコードに変換するツールを公開したので早速触ってみた。

xcodeを使わずにとりあえずコマンドラインから実行してみる。

広告

ソースは下記から落とし、makeすればbuild_resultにj2objcファイルが出来上がっていると思う。

j2objc – A Java to iOS Objective-C translation tool and runtime. – Google Project Hosting

git clone https://code.google.com/p/j2objc/
cd j2objc
make
package org.fukata.j2objc;
 
class Hoge {
    public static void main(String[] args) {
        System.out.println("Hello j2objc");
    }   
}

実際に変換してみる

~/usr/local/bin/j2objc \
-classpath /Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/jre/lib/rt.jar \
-d ./result/ ./src/org/fukata/j2objc/Hoge.java

すると、resultディレクトリ以下に下記のような感じでファイルが生成されているはず。

result
└── org
    └── fukata
        └── j2objc
            ├── Hoge.h
            └── Hoge.m

Hoge.h

//
//  Generated by the J2ObjC translator.  DO NOT EDIT!
//  source: ./src/org/fukata/j2objc/Hoge.java
//
//  Created by tatsuya on 9/19/12.
//
 
@class IOSObjectArray;
 
#import "JreEmulation.h"
 
@interface OrgFukataJ2objcHoge : NSObject {
}
 
@end

Hoge.m

//
//  Generated by the J2ObjC translator.  DO NOT EDIT!
//  source: ./src/org/fukata/j2objc/Hoge.java
//
//  Created by tatsuya on 9/19/12.
//
 
#import "IOSObjectArray.h"
#import "org/fukata/j2objc/Hoge.h"
 
@implementation OrgFukataJ2objcHoge
 
@end
 
 
int main( int argc, const char *argv[] ) { 
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  IOSObjectArray *args = JreEmulationMainArguments(argc, argv);
 
  NSLog(@"%@", @"Hello j2objc");
  int exitCode = 0;
 
  [pool release];
  return exitCode;
}

既存のjavaコードに対しても何かかけてみたくなる。

汎用性の高いライブラリ、コードをAndroid、iOSアプリで使いまわす時に便利なのかも。

関連記事