以下範例說明如何在專案中加入通訊協定緩衝區。
以下是簡單的通訊協定緩衝區定義 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 和
含有 --j2objc_out 的 Objective-C 程式碼。每個旗標所指定的值是以下項目的輸出目錄:
目標語言您可以使用相同的指令產生這兩種輸出語言。
$J2OBJC_HOME/j2objc_protoc --java_out=java --j2objc_out=objc geo.protols java Geo.javals 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/*.javals classes/ Geo$1.class Geo$Location$Builder.class Geo$LocationOrBuilder.class Geo$Location$1.class Geo$Location.class Geo.class
照常翻譯 Java 來源,將已編譯的 Java protos 新增至類別路徑。
$J2OBJC_HOME/j2objc -cp classes:$J2OBJC_HOME/lib/protobuf_runtime.jar -d objc Hello.javals 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