Using Java
Apportable は Android アプリを純粋な Objective-C で構築するのを容易にしています。
もしあなたが Java も使いたいなら、 Apportable BridgeKit フレームワーク で2つの言語間のコールが簡単に行えるようになります。
BridgeKit はプラットフォーム内部で広範囲に渡って使われます。
HelloJava サンプルアプリは、 Objective-C と Java の間で基本的な変数を送ったり受け取ったりするために BridgeKit を使っています。
Adding Java sources
あなたが必要としている java ファイルとソースパスを追加するために、あなたの .approj フォルダの中の configuration.json ファイルを編集して、Java ソースをあなたのアプリに追加して下さい。例えば以下の通りです:
"java_sources": [
"java/src/com/apportable/demo/HelloBridge.java",
],
"java_sourcepaths": [
"java/src",
],
Wrapping Java methods
JavaObject から派生した Objective-C クラスは、Java オブジェクトに対するラッパーとなります。
+initializeJava メソッドにおいて、 JavaObject は Objective-C のセレクタのリストを登録し、 一致したセレクタ名を指定します。
引数や戻り値の型を宣言するときには、int, float や double などのような基本的な型は、 [JavaClass intPrimitive], [JavaClass floatPrimitive], [JavaClass doublePrimitive] を使うことで指定することができます。
java.lang.String や byte[] の引数や戻り値を指定するためには、 [NSString className] や [NSData className] を使うことができます。
この件についてのさらなるドキュメントは、 JavaObject ドキュメントで確認することができます。
[HelloBridge registerConstructorWithSelector:@selector(initWithIntValue:doubleValue:)
arguments:[JavaClass intPrimitive],
[JavaClass doublePrimitive],
nil];
[HelloBridge registerInstanceMethod:@"getIntValue"
selector:@selector(intValue)
returnValue:[JavaClass intPrimitive]];
[HelloBridge registerInstanceMethod:@"setIntValue"
selector:@selector(setIntValue:)
arguments:[JavaClass intPrimitive], nil];
どの JavaObject クラスも +className メソッド中でラッピングしているクラスをまた指定しなければなりません。
+ (NSString *)className
{
return @"com.apportable.demo.HelloBridge";
}
これで、ブリッジされたオブジェクトは他の Objective-C オブジェクトのように使うことができるようになります:
HelloBridge *bridgeObject = [[HelloBridge alloc] initWithIntValue:42 doubleValue:55.4];
[bridgeObject setIntValue:99];
[bridgeObject setDoubleValue:11.44];
Objective-C のコールバックメソッドを登録することもできます。
[HelloBridge registerCallback:@"bridgeCallback"
selector:@selector(valueChanged:doubleValue:)
returnValue:nil
arguments:[JavaClass intPrimitive], [JavaClass doublePrimitive], nil];
ここで HelloObject.java において、このコールバックをネイティブメソッドとして宣言できます:
private native void bridgeCallback(int i, double d);
ネイティブメソッドをコールすることで、 JavaObject ラッパーの valueChanged:doubleValue: メソッドを起動することができます。
bridgeCallback(mIntValue, mDoubleVal);
完全に動作するサンプルとなる HelloJava を確認してみてください。
Calling Android methods
BridgeKit リファレンスは、既にラップされている Android クラスを説明しています。あなたは、これらをあなた自身でラップする必要はありません。