google / guice

Guice (pronounced 'juice') is a lightweight dependency injection framework for Java 11 and above, brought to you by Google.
https://github.com/google/guice
Apache License 2.0
12.47k stars 1.67k forks source link

java.lang.NoClassDefFoundError: com.google.common.base.Suppliers$SupplierOfInstance on Android 6 #1452

Open alxkzmn opened 3 years ago

alxkzmn commented 3 years ago

Android app crashes on Guice.createInjector(getModules());:

Platform: Android API 23

implementation 'com.google.inject:guice:4.2.3:no_aop'

java.lang.NoClassDefFoundError: f.f.b.a.r$a
        at f.f.b.a.r.a(Suppliers.java:268)
        at f.f.b.b.i.<clinit>(CacheBuilder.java:168)
        at f.f.f.y.s2.<init>(WeakKeySet.java:54)
        at f.f.f.y.o0.<init>(InheritingState.java:73)
        at f.f.f.y.v0$b.d(InjectorShell.java:208)
        at f.f.f.y.v0$b.e(InjectorShell.java:114)
        at f.f.f.y.c1.b(InternalInjectorCreator.java:104)
        at f.f.f.g.a(Guice.java:87)
        at f.f.f.g.b(Guice.java:69)

Some mapping entries for clarity:

com.google.common.base.Suppliers -> f.f.b.a.r:
    265:265:com.google.common.base.Supplier ofInstance(java.lang.Object) -> a
com.google.common.base.Suppliers$SupplierOfInstance -> f.f.b.a.r$a:
    java.lang.Object instance -> P
    271:273:void <init>(java.lang.Object) -> <init>
    282:286:boolean equals(java.lang.Object) -> equals
    277:277:java.lang.Object get() -> get
    291:291:int hashCode() -> hashCode
    296:296:java.lang.String toString() -> toString
com.google.common.cache.LongAddable -> f.f.b.b.i:
    void increment() -> a
    void add(long) -> b
com.google.inject.internal.WeakKeySet -> f.f.f.y.l2:
    java.util.Map backingMap -> a
    java.lang.Object lock -> b
    com.google.common.cache.Cache evictionCache -> c
    54:88:void <init>(java.lang.Object) -> <init>
    40:40:void access$000(com.google.inject.internal.WeakKeySet,java.util.Set) -> a
    91:115:void add(com.google.inject.Key,com.google.inject.internal.State,java.lang.Object) -> b
    73:84:void cleanUpForCollectedState(java.util.Set) -> c
    118:119:boolean contains(com.google.inject.Key) -> d
    123:125:java.util.Set getSources(com.google.inject.Key) -> e
com.google.inject.internal.WeakKeySet$1 -> f.f.f.y.l2$a:
    com.google.inject.internal.WeakKeySet this$0 -> P
    58:58:void <init>(com.google.inject.internal.WeakKeySet) -> <init>
    61:64:void onRemoval(com.google.common.cache.RemovalNotification) -> a
com.google.inject.internal.WeakKeySet$KeyAndSource -> f.f.f.y.l2$b:
    java.lang.Object source -> b
    com.google.inject.Key key -> a
    132:135:void <init>(com.google.inject.Key,java.lang.Object) -> <init>
    144:153:boolean equals(java.lang.Object) -> equals
    139:139:int hashCode() -> hashCode
com.google.inject.Guice -> f.f.f.g:
    50:50:void <init>() -> <init>
    87:87:com.google.inject.Injector createInjector(com.google.inject.Stage,java.lang.Iterable) -> a
    69:69:com.google.inject.Injector createInjector(java.lang.Iterable) -> b

Version 4.2.2 does not have this issue, so I had to roll back.

mohaned2014 commented 1 year ago

Did you figure it out?