xref: /aosp_15_r20/external/cronet/third_party/protobuf/java/README.md (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker# Protocol Buffers - Google's data interchange format
2*6777b538SAndroid Build Coastguard Worker
3*6777b538SAndroid Build Coastguard WorkerCopyright 2008 Google Inc.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Workerhttps://developers.google.com/protocol-buffers/
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker## Use Java Protocol Buffers
8*6777b538SAndroid Build Coastguard Worker
9*6777b538SAndroid Build Coastguard WorkerTo use protobuf in Java, first obtain the protocol compiler (a.k.a., protoc,
10*6777b538SAndroid Build Coastguard Workersee instructions in the toplevel [README.md](../README.md)) and use it to
11*6777b538SAndroid Build Coastguard Workergenerate Java code for your .proto files:
12*6777b538SAndroid Build Coastguard Worker
13*6777b538SAndroid Build Coastguard Worker    $ protoc --java_out=${OUTPUT_DIR} path/to/your/proto/file
14*6777b538SAndroid Build Coastguard Worker
15*6777b538SAndroid Build Coastguard WorkerInclude the generated Java files in your project and add a dependency on the
16*6777b538SAndroid Build Coastguard Workerprotobuf Java runtime.
17*6777b538SAndroid Build Coastguard Worker
18*6777b538SAndroid Build Coastguard Worker### Maven
19*6777b538SAndroid Build Coastguard Worker
20*6777b538SAndroid Build Coastguard WorkerIf you are using Maven, use the following:
21*6777b538SAndroid Build Coastguard Worker
22*6777b538SAndroid Build Coastguard Worker```xml
23*6777b538SAndroid Build Coastguard Worker<dependency>
24*6777b538SAndroid Build Coastguard Worker  <groupId>com.google.protobuf</groupId>
25*6777b538SAndroid Build Coastguard Worker  <artifactId>protobuf-java</artifactId>
26*6777b538SAndroid Build Coastguard Worker  <version>3.21.12</version>
27*6777b538SAndroid Build Coastguard Worker</dependency>
28*6777b538SAndroid Build Coastguard Worker```
29*6777b538SAndroid Build Coastguard Worker
30*6777b538SAndroid Build Coastguard WorkerMake sure the version number of the runtime matches (or is newer than) the
31*6777b538SAndroid Build Coastguard Workerversion number of the protoc.
32*6777b538SAndroid Build Coastguard Worker
33*6777b538SAndroid Build Coastguard WorkerIf you want to use features like protobuf JsonFormat, add a dependency on the
34*6777b538SAndroid Build Coastguard Workerprotobuf-java-util package:
35*6777b538SAndroid Build Coastguard Worker
36*6777b538SAndroid Build Coastguard Worker```xml
37*6777b538SAndroid Build Coastguard Worker<dependency>
38*6777b538SAndroid Build Coastguard Worker  <groupId>com.google.protobuf</groupId>
39*6777b538SAndroid Build Coastguard Worker  <artifactId>protobuf-java-util</artifactId>
40*6777b538SAndroid Build Coastguard Worker  <version>3.21.12</version>
41*6777b538SAndroid Build Coastguard Worker</dependency>
42*6777b538SAndroid Build Coastguard Worker```
43*6777b538SAndroid Build Coastguard Worker
44*6777b538SAndroid Build Coastguard Worker### Gradle
45*6777b538SAndroid Build Coastguard Worker
46*6777b538SAndroid Build Coastguard WorkerIf you are using Gradle, add the following to your `build.gradle` file's dependencies:
47*6777b538SAndroid Build Coastguard Worker```
48*6777b538SAndroid Build Coastguard Worker    implementation 'com.google.protobuf:protobuf-java:3.21.12'
49*6777b538SAndroid Build Coastguard Worker```
50*6777b538SAndroid Build Coastguard WorkerAgain, be sure to check that the version number matches (or is newer than) the version number of protoc that you are using.
51*6777b538SAndroid Build Coastguard Worker
52*6777b538SAndroid Build Coastguard Worker### Use Java Protocol Buffers on Android
53*6777b538SAndroid Build Coastguard Worker
54*6777b538SAndroid Build Coastguard WorkerFor Android users, it's recommended to use protobuf Java Lite runtime because
55*6777b538SAndroid Build Coastguard Workerof its smaller code size. Java Lite runtime also works better with Proguard
56*6777b538SAndroid Build Coastguard Workerbecause it doesn't rely on Java reflection and is optimized to allow as much
57*6777b538SAndroid Build Coastguard Workercode stripping as possible. You can following these [instructions to use Java
58*6777b538SAndroid Build Coastguard WorkerLite runtime](lite.md).
59*6777b538SAndroid Build Coastguard Worker
60*6777b538SAndroid Build Coastguard Worker### Use Java Protocol Buffers with Bazel
61*6777b538SAndroid Build Coastguard Worker
62*6777b538SAndroid Build Coastguard WorkerBazel has native build rules to work with protobuf. For Java, you can use the
63*6777b538SAndroid Build Coastguard Worker`java_proto_library` rule for server and the `java_lite_proto_library` rule
64*6777b538SAndroid Build Coastguard Workerfor Android. Check out [our build files examples](../examples/BUILD) to learn
65*6777b538SAndroid Build Coastguard Workerhow to use them.
66*6777b538SAndroid Build Coastguard Worker
67*6777b538SAndroid Build Coastguard Worker## Build from Source
68*6777b538SAndroid Build Coastguard Worker
69*6777b538SAndroid Build Coastguard WorkerMost users should follow the instructions above to use protobuf Java runtime.
70*6777b538SAndroid Build Coastguard WorkerIf you are contributing code to protobuf or want to use a protobuf version
71*6777b538SAndroid Build Coastguard Workerthat hasn't been officially released yet, you can follow the instructions
72*6777b538SAndroid Build Coastguard Workerbelow to build protobuf from source code.
73*6777b538SAndroid Build Coastguard Worker
74*6777b538SAndroid Build Coastguard Worker### Build from Source - With Maven
75*6777b538SAndroid Build Coastguard Worker
76*6777b538SAndroid Build Coastguard Worker1) Install Apache Maven if you don't have it:
77*6777b538SAndroid Build Coastguard Worker
78*6777b538SAndroid Build Coastguard Worker     http://maven.apache.org/
79*6777b538SAndroid Build Coastguard Worker
80*6777b538SAndroid Build Coastguard Worker2) Build the C++ code, or obtain a binary distribution of protoc (see
81*6777b538SAndroid Build Coastguard Worker   the toplevel [README.md](../README.md)). If you install a binary
82*6777b538SAndroid Build Coastguard Worker   distribution, make sure that it is the same version as this package.
83*6777b538SAndroid Build Coastguard Worker   If in doubt, run:
84*6777b538SAndroid Build Coastguard Worker
85*6777b538SAndroid Build Coastguard Worker     $ protoc --version
86*6777b538SAndroid Build Coastguard Worker
87*6777b538SAndroid Build Coastguard Worker   You will need to place the protoc executable in ../src.  (If you
88*6777b538SAndroid Build Coastguard Worker   built it yourself, it should already be there.)
89*6777b538SAndroid Build Coastguard Worker
90*6777b538SAndroid Build Coastguard Worker3) Run the tests:
91*6777b538SAndroid Build Coastguard Worker
92*6777b538SAndroid Build Coastguard Worker     $ mvn test
93*6777b538SAndroid Build Coastguard Worker
94*6777b538SAndroid Build Coastguard Worker   If some tests fail, this library may not work correctly on your
95*6777b538SAndroid Build Coastguard Worker   system.  Continue at your own risk.
96*6777b538SAndroid Build Coastguard Worker
97*6777b538SAndroid Build Coastguard Worker4) Install the library into your Maven repository:
98*6777b538SAndroid Build Coastguard Worker
99*6777b538SAndroid Build Coastguard Worker     $ mvn install
100*6777b538SAndroid Build Coastguard Worker
101*6777b538SAndroid Build Coastguard Worker5) If you do not use Maven to manage your own build, you can build a
102*6777b538SAndroid Build Coastguard Worker   .jar file to use:
103*6777b538SAndroid Build Coastguard Worker
104*6777b538SAndroid Build Coastguard Worker     $ mvn package
105*6777b538SAndroid Build Coastguard Worker
106*6777b538SAndroid Build Coastguard Worker   The .jar will be placed in the "target" directory.
107*6777b538SAndroid Build Coastguard Worker
108*6777b538SAndroid Build Coastguard WorkerThe above instructions will install 2 maven artifacts:
109*6777b538SAndroid Build Coastguard Worker
110*6777b538SAndroid Build Coastguard Worker  * protobuf-java: The core Java Protocol Buffers library. Most users only
111*6777b538SAndroid Build Coastguard Worker                   need this artifact.
112*6777b538SAndroid Build Coastguard Worker  * protobuf-java-util: Utilities to work with protos. It contains JSON support
113*6777b538SAndroid Build Coastguard Worker                        as well as utilities to work with proto3 well-known
114*6777b538SAndroid Build Coastguard Worker                        types.
115*6777b538SAndroid Build Coastguard Worker
116*6777b538SAndroid Build Coastguard Worker### Build from Source - Without Maven
117*6777b538SAndroid Build Coastguard Worker
118*6777b538SAndroid Build Coastguard WorkerIf you would rather not install Maven to build the library, you may
119*6777b538SAndroid Build Coastguard Workerfollow these instructions instead.  Note that these instructions skip
120*6777b538SAndroid Build Coastguard Workerrunning unit tests and only describes how to install the core protobuf
121*6777b538SAndroid Build Coastguard Workerlibrary (without the util package).
122*6777b538SAndroid Build Coastguard Worker
123*6777b538SAndroid Build Coastguard Worker1) Build the C++ code, or obtain a binary distribution of protoc.  If
124*6777b538SAndroid Build Coastguard Worker   you install a binary distribution, make sure that it is the same
125*6777b538SAndroid Build Coastguard Worker   version as this package.  If in doubt, run:
126*6777b538SAndroid Build Coastguard Worker
127*6777b538SAndroid Build Coastguard Worker     $ protoc --version
128*6777b538SAndroid Build Coastguard Worker
129*6777b538SAndroid Build Coastguard Worker   If you built the C++ code without installing, the compiler binary
130*6777b538SAndroid Build Coastguard Worker   should be located in ../src.
131*6777b538SAndroid Build Coastguard Worker
132*6777b538SAndroid Build Coastguard Worker2) Invoke protoc to build DescriptorProtos.java:
133*6777b538SAndroid Build Coastguard Worker
134*6777b538SAndroid Build Coastguard Worker     $ protoc --java_out=core/src/main/java -I../src \
135*6777b538SAndroid Build Coastguard Worker         ../src/google/protobuf/descriptor.proto
136*6777b538SAndroid Build Coastguard Worker
137*6777b538SAndroid Build Coastguard Worker3) Compile the code in core/src/main/java using whatever means you prefer.
138*6777b538SAndroid Build Coastguard Worker
139*6777b538SAndroid Build Coastguard Worker4) Install the classes wherever you prefer.
140*6777b538SAndroid Build Coastguard Worker
141*6777b538SAndroid Build Coastguard Worker## Compatibility Notice
142*6777b538SAndroid Build Coastguard Worker
143*6777b538SAndroid Build Coastguard Worker* Protobuf minor version releases are backwards-compatible. If your code
144*6777b538SAndroid Build Coastguard Worker  can build/run against the old version, it's expected to build/run against
145*6777b538SAndroid Build Coastguard Worker  the new version as well. Both binary compatibility and source compatibility
146*6777b538SAndroid Build Coastguard Worker  are guaranteed for minor version releases if the user follows the guideline
147*6777b538SAndroid Build Coastguard Worker  described in this section.
148*6777b538SAndroid Build Coastguard Worker
149*6777b538SAndroid Build Coastguard Worker* Protobuf major version releases may also be backwards-compatible with the
150*6777b538SAndroid Build Coastguard Worker  last release of the previous major version. See the release notice for more
151*6777b538SAndroid Build Coastguard Worker  details.
152*6777b538SAndroid Build Coastguard Worker
153*6777b538SAndroid Build Coastguard Worker* APIs marked with the @ExperimentalApi annotation are subject to change. They
154*6777b538SAndroid Build Coastguard Worker  can be modified in any way, or even removed, at any time. Don't use them if
155*6777b538SAndroid Build Coastguard Worker  compatibility is needed. If your code is a library itself (i.e. it is used on
156*6777b538SAndroid Build Coastguard Worker  the CLASSPATH of users outside your own control), you should not use
157*6777b538SAndroid Build Coastguard Worker  experimental APIs, unless you repackage them (e.g. using ProGuard).
158*6777b538SAndroid Build Coastguard Worker
159*6777b538SAndroid Build Coastguard Worker* Deprecated non-experimental APIs will be removed two years after the release
160*6777b538SAndroid Build Coastguard Worker  in which they are first deprecated. You must fix your references before this
161*6777b538SAndroid Build Coastguard Worker  time. If you don't, any manner of breakage could result (you are not
162*6777b538SAndroid Build Coastguard Worker  guaranteed a compilation error).
163*6777b538SAndroid Build Coastguard Worker
164*6777b538SAndroid Build Coastguard Worker* Protobuf message interfaces/classes are designed to be subclassed by protobuf
165*6777b538SAndroid Build Coastguard Worker  generated code only. Do not subclass these message interfaces/classes
166*6777b538SAndroid Build Coastguard Worker  yourself. We may add new methods to the message interfaces/classes which will
167*6777b538SAndroid Build Coastguard Worker  break your own subclasses.
168*6777b538SAndroid Build Coastguard Worker
169*6777b538SAndroid Build Coastguard Worker* Don't use any method/class that is marked as "used by generated code only".
170*6777b538SAndroid Build Coastguard Worker  Such methods/classes are subject to change.
171*6777b538SAndroid Build Coastguard Worker
172*6777b538SAndroid Build Coastguard Worker* Protobuf LITE runtime APIs are not stable yet. They are subject to change even
173*6777b538SAndroid Build Coastguard Worker  in minor version releases.
174*6777b538SAndroid Build Coastguard Worker
175*6777b538SAndroid Build Coastguard Worker## Documentation
176*6777b538SAndroid Build Coastguard Worker
177*6777b538SAndroid Build Coastguard WorkerThe complete documentation for Protocol Buffers is available via the
178*6777b538SAndroid Build Coastguard Workerweb at:
179*6777b538SAndroid Build Coastguard Worker
180*6777b538SAndroid Build Coastguard Worker  https://developers.google.com/protocol-buffers/
181*6777b538SAndroid Build Coastguard Worker
182*6777b538SAndroid Build Coastguard Worker## Kotlin Protocol Buffers
183*6777b538SAndroid Build Coastguard Worker
184*6777b538SAndroid Build Coastguard WorkerCode to support more idiomatic Kotlin protocol buffers has been added to the
185*6777b538SAndroid Build Coastguard Workerrepository, and Kotlin support will be launched in the next numbered release.
186