Sử dụng vùng đệm giao thức

Sau đây là ví dụ ngắn gọn về cách đưa vùng đệm giao thức vào dự án.

Dưới đây là định nghĩa vùng đệm giao thức đơn giản: geo.proto:

syntax = "proto2";

message Location {
  optional string name = 1;
  optional double latitude = 2;
  optional double longitude = 3;
}

Và chương trình Java chính của chúng tôi, 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());
  }
}

Trước tiên, thiết lập một "dự án" nhỏ:

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

Tiếp theo, hãy sử dụng j2objc_protoc để tạo vùng đệm giao thức. Tạo mã Java bằng --java_out và mã Objective-C với --j2objc_out. Giá trị được chỉ định với mỗi cờ là thư mục đầu ra cho ngôn ngữ đích. Cả hai ngôn ngữ đầu ra đều có thể được tạo trong cùng một lệnh.

$J2OBJC_HOME/j2objc_protoc --java_out=java --j2objc_out=objc geo.proto
ls java
Geo.java
ls objc
Geo.h Geo.m

Bạn cần biên dịch các tệp proto Java đã tạo để tham chiếu đến các tệp đó trong Hello. Bạn có thể thực hiện việc này bằng cách sử dụng javac để không chuyển đổi sang Mục tiêu C trong bước sau.

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

Dịch các nguồn Java như bình thường, thêm giao thức java đã biên dịch vào 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

Bây giờ, chúng ta đã có tất cả nguồn Objective-C để biên dịch và liên kết. Bạn sẽ cần liên kết với thư viện libprotobuf_runtime.a để bao gồm thời gian chạy protobuf.

$J2OBJC_HOME/j2objcc -lprotobuf_runtime -o hello objc/*.m
./hello Hello
name: "CN Tower"
latitude: 43.6412
longitude: -79.3884