ここでは、プロジェクトにプロトコル バッファを含める方法を簡単に例示します。
シンプルなプロトコル バッファの定義である geo.proto
を次に示します。
syntax = "proto2";
message Location {
optional string name = 1;
optional double latitude = 2;
optional double longitude = 3;
}
メインの Java プログラムである Hello.java
は次のようになります。
class Hello {
public static void main(String[] args) {
Geo.Location.Builder locationBuilder = Geo.Location.newBuilder();
locationBuilder.setName("CN Tower");
locationBuilder.setLatitude(43.6412172);
locationBuilder.setLongitude(-79.3884058);
Geo.Location location = locationBuilder.build();
System.out.println(location.toString());
}
}
まず、少し「プロジェクト」を設定します。
export J2OBJC_HOME=~/j2objc # Change to where the j2objc distribution was unzipped.
ls $J2OBJC_HOME/j2objc # Fix above definition until this command works.
mkdir java objc classes # Output directories
次に、j2objc_protoc
を使用してプロトコル バッファを生成します。--java_out
を使用して Java コードを生成し、--j2objc_out
を使用して Objective-C コードを生成します。各フラグで指定された値は、ターゲット言語の出力ディレクトリです。同じコマンドで両方の出力言語を生成できます。
$J2OBJC_HOME/j2objc_protoc --java_out=java --j2objc_out=objc geo.proto
ls java Geo.java
ls objc Geo.h Geo.m
生成された Java proto ファイルをコンパイルすると、Hello
内での参照が解決されます。
これは javac
を使用して行われるため、次のステップで目標 C に変換されることはありません。
javac -source 1.8 -target 1.8 -bootclasspath $J2OBJC_HOME/lib/jre_emul.jar -cp $J2OBJC_HOME/lib/protobuf_runtime.jar -d classes java/*.java
ls classes/ Geo$1.class Geo$Location$Builder.class Geo$LocationOrBuilder.class Geo$Location$1.class Geo$Location.class Geo.class
通常どおりに Java ソースを変換し、コンパイルされた Java proto をクラスパスに追加します。
$J2OBJC_HOME/j2objc -cp classes:$J2OBJC_HOME/lib/protobuf_runtime.jar -d objc Hello.java
ls objc Geo.h Geo.m Hello.h Hello.m
これで、コンパイルしてリンクする Objective-C ソースがすべて揃いました。libprotobuf_runtime.a ライブラリにリンクし、protobuf ランタイムを含める必要があります。
$J2OBJC_HOME/j2objcc -lprotobuf_runtime -o hello objc/*.m
./hello Hello name: "CN Tower" latitude: 43.6412 longitude: -79.3884