다음은 프로젝트에 프로토콜 버퍼를 포함하는 방법을 보여주는 간단한 예입니다.
다음은 간단한 프로토콜 버퍼 정의인 geo.proto
입니다.
syntax = "proto2";
message Location {
optional string name = 1;
optional double latitude = 2;
optional double longitude = 3;
}
기본 자바 프로그램인 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 소스를 변환하고 컴파일된 자바 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