| # Protocol Buffers - Google's data interchange format |
| |
| Copyright 2008 Google Inc. |
| |
| https://developers.google.com/protocol-buffers/ |
| |
| ## Use the Protobuf Java Lite Runtime |
| |
| The Protobuf Java Lite runtime is separated from the main Java runtime because |
| it's designed and implemented with different constraints. In particular, the Java |
| Lite runtime is much smaller which makes it more suitable to be used on Android. |
| |
| In order to achieve maximum performance and code size, we do |
| NOT guarantee API/ABI stability for Java Lite. If this is not acceptable |
| for your use-case, use the full Java runtime instead. Note that |
| the latest version of Java Lite is not compatible with the 3.0.0 version. |
| |
| You can generate Java Lite code for your .proto files: |
| |
| $ protoc --java_out=lite:${OUTPUT_DIR} path/to/your/proto/file |
| |
| The "optimize_for = LITE_RUNTIME" option in the .proto file no longer has any |
| effect on Java code. |
| |
| Include the generated Java files in your project and add a dependency on the |
| protobuf Java Lite runtime. If you are using Maven, include the following: |
| |
| ```xml |
| <dependency> |
| <groupId>com.google.protobuf</groupId> |
| <artifactId>protobuf-javalite</artifactId> |
| <version><!--version--></version> |
| </dependency> |
| ``` |
| |
| And **replace `<!--version-->` with a version from the |
| [Maven Protocol Buffers \[Lite\] Repository](https://mvnrepository.com/artifact/com.google.protobuf/protobuf-javalite).** |
| For example, `3.25.3`. |
| |
| ## R8 rule to make production app builds work |
| |
| The Lite runtime internally uses reflection to avoid generating hashCode/equals/(de)serialization methods. |
| R8 by default obfuscates the field names, which makes the reflection fail causing exceptions of the form |
| `java.lang.RuntimeException: Field {NAME}_ for {CLASS} not found. Known fields are [ {FIELDS} ]` in MessageSchema.java. |
| |
| There are open issues for this on the [protobuf Github project](https://github.com/protocolbuffers/protobuf/issues/6463) and [R8](https://issuetracker.google.com/issues/144631039). |
| |
| Until the issues is resolved you need to add the following line to your `proguard-rules.pro` file inside your project: |
| |
| ``` |
| -keep class * extends com.google.protobuf.GeneratedMessageLite { *; } |
| ``` |
| |
| ## Older versions |
| |
| For the older version of Java Lite (v3.0.0), please refer to: |
| |
| https://github.com/protocolbuffers/protobuf/blob/javalite/java/lite.md |