R8 raise warning that there are missing classes while optimizing
- 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
Assessment
This issue has not been assessed yet.