Merge commit '36bca61764984ff5395653cf8377ec5daa71b709' as 'libs/protobuf'
This commit is contained in:
54
libs/protobuf/java/lite.md
Normal file
54
libs/protobuf/java/lite.md
Normal file
@@ -0,0 +1,54 @@
|
||||
# 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>3.21.8</version>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
## 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
|
||||
Reference in New Issue
Block a user