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

Sau đây là ví dụ nhanh minh hoạ cách đưa vùng đệm giao thức vào dự án của bạ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());
  }
}

Đầu tiên là một "dự án" nhỏ cài đặt:

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ã Mục tiêu-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. Bạn có thể tạo cả hai ngôn ngữ đầu ra 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 để các thông tin tham chiếu đến các tệp đó trong Hello được phân giải. Bạn có thể thực hiện việc này bằng cách sử dụng javac để các đối tượng này không được dịch sang Đối tượng 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 các giao thức java đã biên dịch vào đường dẫn lớp.

$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ả các nguồn Object-C để biên dịch và liên kết. Bạn cần liên kết với 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