本文整理了再在Mac上安装Protobuf 和编译Java的详细过程
Github:https://github.com/google/protobuf
我先下载了2.6.1版本的,安装了之后protoc命令报一个错
dyld: Library not loaded: /usr/local/lib/libprotobuf.9.dylibgoogle了一下然而并没有解决,然后就下载2.5.0版本的继续试,结果安装正常。
安装过程:
解压压缩包
cd到brotofbuf-2.5.0 目录
指定安装目录 ./configure --prefix=/User/Dev/Tools/protobuf /User/Dev/Tools/protobuf安装目录
安装 make
make install
环境变量 sudo vi .bash_profile
export PROTOBUF=/Users/mingwei/Dev/protobuf export ANDROID_HOME=/Users/mingwei/Dev/android-sdk-mac/platform-tools export PATH=${PATH}:$ANDROID_HOME:$PROTOBUF/bin环境变量生效 source .bash_profile
测试 protoc --version
参考:http://my.oschina.net/KingPan/blog/283881?fromerr=8vajR5S9
2.可以自己写,也可以复制example中的文件过来
protobuf.proto
option java_package = "com.example.demo"; option java_outer_classname = "PersonPb"; message Person { required string name = 1; required int32 id = 2; optional string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORKE = 2; } message PhoneNumber { required string number = 1; optional PhoneType type = 2 [default = HOME]; } repeated PhoneNumber phone = 4; message CountryInfo { required string name = 1; required string code = 2; optional int32 number = 3; } } message AddressBook { repeated Person person = 1; }
PersonPb.java
private PersonPb() {} public static void registerAllExtensions( com.google.protobuf.ExtensionRegistry registry) { } public interface PersonOrBuilder extends com.google.protobuf.MessageOrBuilder { // required string name = 1; /** * <code>required string name = 1;</code> */ boolean hasName(); ... ...内容很多,(稍后附件中有) ... com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] { }, assigner); } // @@protoc_insertion_point(outer_class_scope) }
public class MainTest { public static void main(String[] args) { System.out.println("Test_Systemout"); PersonPb.AddressBook.Builder build = PersonPb.AddressBook.newBuilder(); PersonPb.Person person1 = PersonPb.Person.newBuilder().setId(1).setName("xxxxxxi").setEmail("[email protected]"). addPhone(PersonPb.Person.PhoneNumber.newBuilder().setNumber("15211112222").setType(PersonPb.Person. PhoneType.HOME).build()).build(); build.addPerson(person1); PersonPb.Person person2 = PersonPb.Person.newBuilder().setId(2).setName("sasasasas").setEmail("[email protected]"). addPhone(PersonPb.Person.PhoneNumber.newBuilder().setNumber("15211112222").setType(PersonPb.Person. PhoneType.HOME).build()).build(); build.addPerson(person2); for (int i = 0; i < build.getPersonList().size(); i++) { System.out.println("name=" + build.getPersonList().get(i).getName()); } } }
参考:http://www.bubuko.com/infodetail-781200.html
Github:https://github.com/square/wire
compile 'com.squareup.wire:wire-runtime:2.1.0'libs中用到的压缩时用到的wire包
task generateWireFile(type: JavaExec ) { classpath = files("libs/wire-compiler-1.8.0-jar-with-dependencies.jar") args = ["--proto_path=src/main/resource/proto", "--java_out=src/main/java", "protobuf.proto"] main = "com.squareup.wire.WireCompiler" }