grpc / grpc/grpc-java

R8 raise warning that there are missing classes while optimizing

Open
#10,057 1 comment 0 reactions 1 assignee Claimed by @temawi View on GitHub
android
Dominant language
Java
Stars
12.1k
Forks
4k
Avg merge
2d 17h
Merged PRs (30d)
37

Description

### What version of gRPC-Java are you using?
- 1.54.0

### What is your environment?

* OS : Any
* Jdk : OpenJDK 11 / 17
* Gradle 8.0.2
* Android Gradle Plugin 7.4.2 / 8.0.0
* Kotlin 1.7.21

### What did you expect to see?
* Android App build can be succeed

### What did you see instead?
* App build is failed with following warnings / errors
```
 buffers
:app:minifyProductionReleaseWithR8 FAILED
WARNING: app/build/intermediates/merged_java_res/productionRelease/base.jar:
ERROR:Missing classes detected while running R8.
Please add the missing classes or apply additional keep rules that are generated in app/build/outputs/mapping/productionRelease/missing_rules.txt.
This will become an error in AGP 8.0.
ERROR:R8:
Missing class javax.naming.NamingEnumeration (referenced from: void io.grpc.internal.JndiResourceResolverFactory$JndiRecordFetcher.closeThenThrow(javax.naming.NamingEnumeration, javax.naming.NamingException) and 1 other context)
Missing class javax.naming.NamingException (referenced from: void io.grpc.internal.JndiResourceResolverFactory$JndiRecordFetcher.closeThenThrow(javax.naming.NamingEnumeration, javax.naming.NamingException) and 4 other contexts)
Missing class javax.naming.directory.Attribute (referenced from: java.util.List io.grpc.internal.JndiResourceResolverFactory$JndiRecordFetcher.getAllRecords(java.lang.String, java.lang.String))
Missing class javax.naming.directory.Attributes (referenced from: java.util.List io.grpc.internal.JndiResourceResolverFactory$JndiRecordFetcher.getAllRecords(java.lang.String, java.lang.String))
Missing class javax.naming.directory.DirContext (referenced from: void io.grpc.internal.JndiResourceResolverFactory$JndiRecordFetcher.closeThenThrow(javax.naming.directory.DirContext, javax.naming.NamingException) and 1 other context)
Missing class javax.naming.directory.InitialDirContext (referenced from: java.util.List io.grpc.internal.JndiResourceResolverFactory$JndiRecordFetcher.getAllRecords(java.lang.String, java.lang.String))
~
```
### Workaround
Add following rules for missing classes
```
-dontwarn javax.naming.NamingEnumeration
-dontwarn javax.naming.NamingException
-dontwarn javax.naming.directory.Attribute
-dontwarn javax.naming.directory.Attributes
-dontwarn javax.naming.directory.DirContext
-dontwarn javax.naming.directory.InitialDirContext
```
* It seems gRPC-java provides [proguard rules for android platform](https://github.com/grpc/grpc-java/blob/master/android/proguard-rules.txt), and above rules should be added for AGP 8.0
### Steps to reproduce the bug

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.