ต่อไปนี้เป็นตัวอย่างสั้นๆ ที่สาธิตวิธีการรวมบัฟเฟอร์โปรโตคอลในโปรเจ็กต์ของคุณ
ต่อไปนี้คือคำจำกัดความบัฟเฟอร์โปรโตคอลอย่างง่าย 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 ด้วย --java_out
และ
โค้ด Objective-C ที่มี --j2objc_out
ค่าที่ระบุพร้อมแฟล็กแต่ละรายการคือไดเรกทอรีเอาต์พุตสำหรับ
ภาษาเป้าหมาย ภาษาเอาต์พุตทั้ง 2 ภาษาสามารถสร้างได้ด้วยคําสั่งเดียวกัน
$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 ที่คอมไพล์แล้วลงใน classpath
$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 ทั้งหมดที่ต้องการรวบรวมและลิงก์ คุณจะต้องลิงก์กับ libprotocolbuf_runtime.a ไลบรารีที่จะรวมรันไทม์ Protobuf
$J2OBJC_HOME/j2objcc -lprotobuf_runtime -o hello objc/*.m
./hello Hello name: "CN Tower" latitude: 43.6412 longitude: -79.3884