# 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
