Skip to content

[Documentation] Proguard Rules for firebase products and other plugins as needed #37839

Closed as not planned

Description

@raveesh-me

Use case

In the build and release on android page,
https://flutter.dev/docs/deployment/android#step-1---configure-proguard
Screenshot (37)

There are indications that we need additional proguard rules for firebase products.

In the firebase launch checklist,
https://firebase.google.com/support/guides/launch-checklist#authentication
Screenshot (38)

We are told to configure proguard rules to work with auth. But clicking on the link (https://firebase.google.com/docs/auth/android/start/#proguard) produces nothing at all.

This is kind of confusing. And the warnings during minification/obfuscation of release build are also very scary as to the stability of the release builds.

Proposal

Readme of the official plugins should come with their release build instructions, that include precise guidance of if there are additional configuration like proguard needed, and exactly what those rules are, and should be updated if those rules change.

Activity

  1. changed the title [-][Doccumentation] Proguard Rules for firebase products[/-] [+][Doccumentation] Proguard Rules for firebase products and other plugins as needed[/+] on Aug 8, 2019
  2. changed the title [-][Doccumentation] Proguard Rules for firebase products and other plugins as needed[/-] [+][Documentation] Proguard Rules for firebase products and other plugins as needed[/+] on Aug 8, 2019
  3. jaumard commented on Sep 2, 2019

    @jaumard
    Contributor

    Is there somewhere where we can find those rules ? I've added firebase_auth (but was already using analytics, messaging, in-app) and my app doesn't compile in release mode anymore with some huge logs:

    Note: duplicate definition of library class [android.annotation.TargetApi]                                         
    Note: duplicate definition of library class [android.annotation.SuppressLint]                                      
    Reading library jar [/Users/jaumard/Library/Android/sdk/build-tools/28.0.3/core-lambda-stubs.jar]                  
    Reading library jar [/Users/jaumard/Library/Android/sdk/platforms/android-28/optional/org.apache.http.legacy.jar]  
    Reading library jar [/Users/jaumard/Library/Android/sdk/platforms/android-28/optional/android.test.mock.jar]       
    Reading library jar [/Users/jaumard/Library/Android/sdk/platforms/android-28/optional/android.test.base.jar]       
    Reading library jar [/Users/jaumard/Library/Android/sdk/platforms/android-28/optional/android.test.runner.jar]     
    Initializing...                                                                                                    
    Note: the configuration refers to the unknown class 'sun.misc.Unsafe'                                              
    Note: the configuration refers to the unknown class 'com.google.android.gms.common.api.internal.BasePendingResult$ReleasableResultGuardian'
    Note: there were 2 duplicate class definitions.                                                                    
          (http://proguard.sourceforge.net/manual/troubleshooting.html#duplicateclass)                                 
    Warning: com.bbpos.bbdevice.ota.a: can't find referenced class com.bbpos.emvswipe.EmvSwipeController               
    Warning: com.bbpos.bbdevice.ota.a: can't find referenced class com.bbpos.emvswipe.EmvSwipeController$ConnectionMode
    Warning: com.bbpos.bbdevice.ota.a: can't find referenced class com.bbpos.wisepad.WisePadController                 
    Warning: com.bbpos.bbdevice.ota.a: can't find referenced class com.bbpos.wisepad.WisePadController$ConnectionMode  
    Warning: com.bbpos.bbdevice.ota.a: can't find referenced class com.bbpos.emvswipe.EmvSwipeController$ConnectionMode
    Warning: com.bbpos.bbdevice.ota.a: can't find referenced class com.bbpos.emvswipe.EmvSwipeController$ConnectionMode
    Warning: com.bbpos.bbdevice.ota.a: can't find referenced class com.bbpos.wisepad.WisePadController$ConnectionMode  
    Warning: com.bbpos.bbdevice.ota.a: can't find referenced class com.bbpos.wisepad.WisePadController$ConnectionMode  
    Warning: com.bbpos.bbdevice.ota.a: can't find referenced class com.bbpos.wisepad.WisePadController$ConnectionMode  
    Warning: com.bbpos.bbdevice.ota.a: can't find referenced class com.bbpos.wisepad.WisePadController$ConnectionMode  
    Warning: com.bbpos.bbdevice.ota.a: can't find referenced class com.bbpos.wisepad.WisePadController$ConnectionMode  
    Warning: com.bbpos.bbdevice.ota.a: can't find referenced class com.bbpos.emvswipe.EmvSwipeController               
    Warning: com.bbpos.bbdevice.ota.a: can't find referenced class com.bbpos.emvswipe.EmvSwipeController               
    Warning: com.bbpos.bbdevice.ota.a: can't find referenced class com.bbpos.emvswipe.EmvSwipeController               
    Warning: com.bbpos.bbdevice.ota.a: can't find referenced class com.bbpos.emvswipe.EmvSwipeController               
    Warning: com.bbpos.bbdevice.ota.a: can't find referenced class com.bbpos.emvswipe.EmvSwipeController               
    Warning: com.bbpos.bbdevice.ota.a: can't find referenced class com.bbpos.emvswipe.EmvSwipeController               
    Warning: com.bbpos.bbdevice.ota.a: can't find referenced class com.bbpos.wisepad.WisePadController                 
    Warning: com.bbpos.bbdevice.ota.a: can't find referenced class com.bbpos.wisepad.WisePadController                 
    Warning: com.bbpos.bbdevice.ota.a: can't find referenced class com.bbpos.wisepad.WisePadController                 
    Warning: com.bbpos.bbdevice.ota.a: can't find referenced class com.bbpos.wisepad.WisePadController                 
    Warning: com.bbpos.bbdevice.ota.a: can't find referenced class com.bbpos.emvswipe.EmvSwipeController               
    Warning: com.bbpos.bbdevice.ota.a: can't find referenced class com.bbpos.wisepad.WisePadController                 
    Warning: com.bbpos.bbdevice.ota.a: can't find referenced class com.bbpos.wisepad.WisePadController                 
    Warning: com.bbpos.bbdevice.ota.a$2: can't find referenced class com.bbpos.wisepad.WisePadController               
    Warning: com.bbpos.bbdevice.ota.a$2: can't find referenced class com.bbpos.wisepad.WisePadController               
    Warning: com.bbpos.bbdevice.ota.a$3: can't find referenced class com.bbpos.wisepad.WisePadController               
    Warning: com.bbpos.bbdevice.ota.a$3: can't find referenced class com.bbpos.wisepad.WisePadController               
    Warning: com.bbpos.bbdevice.ota.a$5: can't find referenced class com.bbpos.wisepad.WisePadController               
    Warning: com.bbpos.bbdevice.ota.a$5: can't find referenced class com.bbpos.wisepad.WisePadController               
    Warning: com.bbpos.bbdevice.ota.a$6: can't find referenced class com.bbpos.wisepad.WisePadController               
    Warning: com.bbpos.bbdevice.ota.a$6: can't find referenced class com.bbpos.wisepad.WisePadController               
    Warning: com.bbpos.bbdevice001.aaa012zz: can't find referenced class android.app.CustServiceManager                
    Warning: com.bbpos.bbdevice001.aaa012zz: can't find referenced class android.app.CustServiceManager                
    Warning: com.bbpos.bbdevice001.aaa012zz: can't find referenced class android.app.CustServiceManager                
    Warning: com.bbpos.bbdevice001.aaa012zz: can't find referenced class android.app.CustServiceManager                
    Warning: com.dspread.xpos.ai: can't find referenced class gnu.io.CommPortIdentifier                                
    Warning: com.dspread.xpos.ai: can't find referenced class gnu.io.SerialPort                                        
    Warning: com.dspread.xpos.ai: can't find referenced class gnu.io.CommPortIdentifier                                
    Warning: com.dspread.xpos.ai: can't find referenced class gnu.io.CommPortIdentifier                                
    Warning: com.dspread.xpos.ai: can't find referenced class gnu.io.CommPortIdentifier                                
    Warning: com.dspread.xpos.ai: can't find referenced class gnu.io.CommPortIdentifier                                
    Warning: com.dspread.xpos.ai: can't find referenced class gnu.io.SerialPort                                        
    Warning: com.dspread.xpos.ai: can't find referenced class gnu.io.SerialPort                                        
    Warning: com.dspread.xpos.ai: can't find referenced class gnu.io.SerialPort                                        
    Warning: com.dspread.xpos.ai: can't find referenced class gnu.io.SerialPort                                        
    Warning: com.dspread.xpos.ai: can't find referenced class gnu.io.SerialPort                                        
    Warning: com.dspread.xpos.ai: can't find referenced class gnu.io.CommPortIdentifier                                
    Warning: com.dspread.xpos.ai: can't find referenced class gnu.io.SerialPort                                        
    Warning: com.dspread.xpos.al: can't find referenced class Decoder.BASE64Decoder                                    
    Warning: com.dspread.xpos.al: can't find referenced class org.bouncycastle.jce.provider.BouncyCastleProvider       
    Warning: com.dspread.xpos.al: can't find referenced class Decoder.BASE64Decoder                                    
    Warning: com.dspread.xpos.al: can't find referenced class Decoder.BASE64Decoder                                    
    Warning: com.dspread.xpos.al: can't find referenced class org.bouncycastle.jce.provider.BouncyCastleProvider       
    Warning: com.dspread.xpos.al: can't find referenced class Decoder.BASE64Decoder                                    
    Warning: com.dspread.xpos.al: can't find referenced class Decoder.BASE64Decoder                                    
    Warning: com.dspread.xpos.x: can't find referenced class org.bouncycastle.jce.provider.BouncyCastleProvider        
    Warning: com.dspread.xpos.x: can't find referenced class org.bouncycastle.jce.provider.BouncyCastleProvider        
    Note: com.crashlytics.android.core.CrashlyticsController: can't find dynamically referenced class com.google.firebase.crash.FirebaseCrash
    Note: com.google.android.gms.common.util.WorkSourceUtil: can't find dynamically referenced class android.os.WorkSource$WorkChain
    Note: com.google.android.gms.internal.clearcut.zzaw: can't find dynamically referenced class libcore.io.Memory     
    Note: com.google.android.gms.internal.clearcut.zzaw: can't find dynamically referenced class org.robolectric.Robolectric
    Note: com.google.android.gms.internal.clearcut.zzbs: can't find dynamically referenced class com.google.protobuf.ExtensionRegistry
    Note: com.google.android.gms.internal.clearcut.zzbt: can't find dynamically referenced class com.google.protobuf.Extension
    Note: com.google.android.gms.internal.clearcut.zzbx: can't find dynamically referenced class com.google.protobuf.ExtensionSchemaFull
    Note: com.google.android.gms.internal.clearcut.zzdd: can't find dynamically referenced class com.google.protobuf.DescriptorMessageInfoFactory
    Note: com.google.android.gms.internal.clearcut.zzdl: can't find dynamically referenced class com.google.protobuf.MapFieldSchemaFull
    Note: com.google.android.gms.internal.clearcut.zzdy: can't find dynamically referenced class com.google.protobuf.NewInstanceSchemaFull
    Note: com.google.android.gms.internal.clearcut.zzeh: can't find dynamically referenced class com.google.protobuf.GeneratedMessage
    Note: com.google.android.gms.internal.clearcut.zzeh: can't find dynamically referenced class com.google.protobuf.UnknownFieldSetSchema
    Note: com.google.android.gms.internal.firebase_auth.zzge: can't find dynamically referenced class libcore.io.Memory
    Note: com.google.android.gms.internal.firebase_auth.zzge: can't find dynamically referenced class org.robolectric.Robolectric
    Note: com.google.android.gms.internal.firebase_auth.zzhd: can't find dynamically referenced class com.google.protobuf.ExtensionRegistry
    Note: com.google.android.gms.internal.firebase_auth.zzhf: can't find dynamically referenced class com.google.protobuf.Extension
    Note: com.google.android.gms.internal.firebase_auth.zzhj: can't find dynamically referenced class com.google.protobuf.ExtensionSchemaFull
    Note: com.google.android.gms.internal.firebase_auth.zzip: can't find dynamically referenced class com.google.protobuf.DescriptorMessageInfoFactory
    Note: com.google.android.gms.internal.firebase_auth.zzix: can't find dynamically referenced class com.google.protobuf.MapFieldSchemaFull
    Note: com.google.android.gms.internal.firebase_auth.zzjj: can't find dynamically referenced class com.google.protobuf.NewInstanceSchemaFull
    Note: com.google.android.gms.internal.firebase_auth.zzju: can't find dynamically referenced class com.google.protobuf.GeneratedMessage
    Note: com.google.android.gms.internal.firebase_auth.zzju: can't find dynamically referenced class com.google.protobuf.UnknownFieldSetSchema
    Note: com.google.android.gms.internal.firebase_ml.zztk: can't find dynamically referenced class libcore.io.Memory  
    Note: com.google.android.gms.internal.firebase_ml.zztk: can't find dynamically referenced class org.robolectric.Robolectric
    Note: com.google.android.gms.internal.firebase_ml.zzuh: can't find dynamically referenced class com.google.protobuf.ExtensionRegistry
    Note: com.google.android.gms.internal.firebase_ml.zzuj: can't find dynamically referenced class com.google.protobuf.Extension
    Note: com.google.android.gms.internal.firebase_ml.zzun: can't find dynamically referenced class com.google.protobuf.ExtensionSchemaFull
    Note: com.google.android.gms.internal.firebase_ml.zzvv: can't find dynamically referenced class com.google.protobuf.DescriptorMessageInfoFactory
    Note: com.google.android.gms.internal.firebase_ml.zzwd: can't find dynamically referenced class com.google.protobuf.MapFieldSchemaFull
    Note: com.google.android.gms.internal.firebase_ml.zzwo: can't find dynamically referenced class com.google.protobuf.NewInstanceSchemaFull
    Note: com.google.android.gms.internal.firebase_ml.zzww: can't find dynamically referenced class com.google.protobuf.GeneratedMessage
    Note: com.google.android.gms.internal.firebase_ml.zzww: can't find dynamically referenced class com.google.protobuf.UnknownFieldSetSchema
    Note: com.google.android.gms.internal.firebase_remote_config.zzfr: can't find dynamically referenced class libcore.io.Memory
    Note: com.google.android.gms.internal.firebase_remote_config.zzfr: can't find dynamically referenced class org.robolectric.Robolectric
    Note: com.google.android.gms.internal.firebase_remote_config.zzgu: can't find dynamically referenced class com.google.protobuf.ExtensionRegistry
    Note: com.google.android.gms.internal.firebase_remote_config.zzgv: can't find dynamically referenced class com.google.protobuf.Extension
    Note: com.google.android.gms.internal.firebase_remote_config.zzgz: can't find dynamically referenced class com.google.protobuf.ExtensionSchemaFull
    Note: com.google.android.gms.internal.firebase_remote_config.zzid: can't find dynamically referenced class com.google.protobuf.DescriptorMessageInfoFactory
    Note: com.google.android.gms.internal.firebase_remote_config.zzil: can't find dynamically referenced class com.google.protobuf.MapFieldSchemaFull
    Note: com.google.android.gms.internal.firebase_remote_config.zziy: can't find dynamically referenced class com.google.protobuf.NewInstanceSchemaFull
    Note: com.google.android.gms.internal.firebase_remote_config.zzjl: can't find dynamically referenced class com.google.protobuf.GeneratedMessage
    Note: com.google.android.gms.internal.firebase_remote_config.zzjl: can't find dynamically referenced class com.google.protobuf.UnknownFieldSetSchema
    Note: com.google.android.gms.internal.measurement.zzdi: can't find dynamically referenced class libcore.io.Memory  
    Note: com.google.android.gms.internal.measurement.zzdi: can't find dynamically referenced class org.robolectric.Robolectric
    Note: com.google.android.gms.internal.measurement.zzej: can't find dynamically referenced class com.google.protobuf.ExtensionRegistry
    Note: com.google.android.gms.internal.measurement.zzel: can't find dynamically referenced class com.google.protobuf.Extension
    Note: com.google.android.gms.internal.measurement.zzep: can't find dynamically referenced class com.google.protobuf.ExtensionSchemaFull
    Note: com.google.android.gms.internal.measurement.zzfv: can't find dynamically referenced class com.google.protobuf.DescriptorMessageInfoFactory
    Note: com.google.android.gms.internal.measurement.zzgd: can't find dynamically referenced class com.google.protobuf.MapFieldSchemaFull
    Note: com.google.android.gms.internal.measurement.zzgs: can't find dynamically referenced class com.google.protobuf.NewInstanceSchemaFull
    Note: com.google.android.gms.internal.measurement.zzgz: can't find dynamically referenced class com.google.protobuf.GeneratedMessage
    Note: com.google.android.gms.internal.measurement.zzgz: can't find dynamically referenced class com.google.protobuf.UnknownFieldSetSchema
    Note: com.google.android.gms.internal.measurement.zzz: can't find dynamically referenced class android.os.SystemProperties
    Note: com.google.android.gms.internal.vision.zzeg: can't find dynamically referenced class libcore.io.Memory       
    Note: com.google.android.gms.internal.vision.zzeg: can't find dynamically referenced class org.robolectric.Robolectric
    Note: com.google.android.gms.internal.vision.zzfj: can't find dynamically referenced class com.google.protobuf.ExtensionRegistry
    Note: com.google.android.gms.internal.vision.zzfk: can't find dynamically referenced class com.google.protobuf.Extension
    Note: com.google.android.gms.internal.vision.zzfo: can't find dynamically referenced class com.google.protobuf.ExtensionSchemaFull
    Note: com.google.android.gms.internal.vision.zzgu: can't find dynamically referenced class com.google.protobuf.DescriptorMessageInfoFactory
    Note: com.google.android.gms.internal.vision.zzhc: can't find dynamically referenced class com.google.protobuf.MapFieldSchemaFull
    Note: com.google.android.gms.internal.vision.zzhp: can't find dynamically referenced class com.google.protobuf.NewInstanceSchemaFull
    Note: com.google.android.gms.internal.vision.zzhy: can't find dynamically referenced class com.google.protobuf.GeneratedMessage
    Note: com.google.android.gms.internal.vision.zzhy: can't find dynamically referenced class com.google.protobuf.UnknownFieldSetSchema
    Note: com.google.android.gms.measurement.internal.zzgp: can't find dynamically referenced class com.google.android.gms.tagmanager.TagManagerService
    Note: com.google.android.gms.measurement.internal.zzs: can't find dynamically referenced class android.os.SystemProperties
    Note: com.google.common.util.concurrent.MoreExecutors: can't find dynamically referenced class com.google.appengine.api.ThreadManager
    Note: com.google.common.util.concurrent.MoreExecutors: can't find dynamically referenced class com.google.apphosting.api.ApiProxy
    Note: com.google.gson.internal.UnsafeAllocator: can't find dynamically referenced class sun.misc.Unsafe            
    Note: com.google.gson.internal.reflect.UnsafeReflectionAccessor: can't find dynamically referenced class sun.misc.Unsafe
    Note: com.google.protobuf.ExtensionRegistryFactory: can't find dynamically referenced class com.google.protobuf.ExtensionRegistry
    Note: com.google.protobuf.ExtensionRegistryLite: can't find dynamically referenced class com.google.protobuf.Extension
    Note: com.squareup.okhttp.internal.Platform: can't find dynamically referenced class com.android.org.conscrypt.SSLParametersImpl
    Note: com.squareup.okhttp.internal.Platform: can't find dynamically referenced class org.apache.harmony.xnet.provider.jsse.SSLParametersImpl
    Note: com.squareup.okhttp.internal.Platform: can't find dynamically referenced class sun.security.ssl.SSLContextImpl
    Note: io.fabric.sdk.android.FabricKitsFinder: can't find dynamically referenced class com.google.android.gms.ads.AdView
    Note: io.flutter.view.AccessibilityViewEmbedder$ReflectionAccessors: can't find dynamically referenced class android.util.LongArray
    Note: io.grpc.Context$LazyStorage: can't find dynamically referenced class io.grpc.override.ContextStorageOverride 
    Note: io.grpc.ManagedChannelProvider$HardcodedClasses: can't find dynamically referenced class io.grpc.netty.NettyChannelProvider
    Note: io.grpc.internal.JndiResourceResolverFactory: can't find dynamically referenced class javax.naming.directory.InitialDirContext
    Note: io.grpc.internal.JndiResourceResolverFactory: can't find dynamically referenced class com.sun.jndi.dns.DnsContextFactory
    Note: io.grpc.okhttp.internal.Platform: can't find dynamically referenced class org.conscrypt.OpenSSLProvider      
    Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.jdk8.JDK8PlatformImplementations
    Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.JRE8PlatformImplementations
    Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.JRE7PlatformImplementations
    Note: kotlin.jvm.internal.Reflection: can't find dynamically referenced class kotlin.reflect.jvm.internal.ReflectionFactoryImpl
    Note: okhttp3.internal.platform.AndroidPlatform: can't find dynamically referenced class com.android.org.conscrypt.SSLParametersImpl
    Note: okhttp3.internal.platform.AndroidPlatform: can't find dynamically referenced class org.apache.harmony.xnet.provider.jsse.SSLParametersImpl
    Note: okhttp3.internal.platform.AndroidPlatform$CloseGuard: can't find dynamically referenced class dalvik.system.CloseGuard
    Note: okhttp3.internal.platform.ConscryptPlatform: can't find dynamically referenced class org.conscrypt.Conscrypt 
    Note: okhttp3.internal.platform.Platform: can't find dynamically referenced class sun.security.ssl.SSLContextImpl  
    Note: the configuration refers to the unknown field 'com.google.android.gms.common.api.internal.BasePendingResult$ReleasableResultGuardian mResultGuardian' in class 'com.google.android.gms.common.api.internal.BasePendingResult'
    Note: the configuration refers to the unknown method 'com.google.android.gms.measurement.AppMeasurement getInstance(android.content.Context,java.lang.String,java.lang.String)' in class 'com.google.android.gms.measurement.AppMeasurement'
    Note: the configuration keeps the entry point 'com.baseflow.geolocator.tasks.LocationUpdatesUsingLocationServicesTask$2 { void onComplete(com.google.android.gms.tasks.Task); }', but not the descriptor class 'com.google.android.gms.tasks.Task'
    Note: the configuration keeps the entry point 'com.google.android.datatransport.cct.CctBackendFactory { com.google.android.datatransport.runtime.backends.TransportBackend create(com.google.android.datatransport.runtime.backends.CreationContext); }', but not the descriptor class 'com.google.android.datatransport.runtime.backends.CreationContext'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.identifier.AdvertisingIdClient { com.google.android.gms.internal.ads_identifier.zze zza(android.content.Context,com.google.android.gms.common.BlockingServiceConnection); }', but not the descriptor class 'com.google.android.gms.common.BlockingServiceConnection'
    Note: the configuration keeps the entry point 'com.google.android.gms.common.api.internal.LifecycleCallback { com.google.android.gms.common.api.internal.LifecycleFragment getChimeraLifecycleFragmentImpl(com.google.android.gms.common.api.internal.LifecycleActivity); }', but not the descriptor class 'com.google.android.gms.common.api.internal.LifecycleActivity'
    Note: the configuration keeps the entry point 'com.google.android.gms.flags.impl.FlagProviderImpl { void init(com.google.android.gms.dynamic.IObjectWrapper); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void initialize(com.google.android.gms.dynamic.IObjectWrapper,com.google.android.gms.internal.measurement.zzx,long); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void initialize(com.google.android.gms.dynamic.IObjectWrapper,com.google.android.gms.internal.measurement.zzx,long); }', but not the descriptor class 'com.google.android.gms.internal.measurement.zzx'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void setUserProperty(java.lang.String,java.lang.String,com.google.android.gms.dynamic.IObjectWrapper,boolean,long); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void setCurrentScreen(com.google.android.gms.dynamic.IObjectWrapper,java.lang.String,java.lang.String,long); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void getMaxUserProperties(java.lang.String,com.google.android.gms.internal.measurement.zzp); }', but not the descriptor class 'com.google.android.gms.internal.measurement.zzp'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void getCurrentScreenName(com.google.android.gms.internal.measurement.zzp); }', but not the descriptor class 'com.google.android.gms.internal.measurement.zzp'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void getCurrentScreenClass(com.google.android.gms.internal.measurement.zzp); }', but not the descriptor class 'com.google.android.gms.internal.measurement.zzp'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void getCachedAppInstanceId(com.google.android.gms.internal.measurement.zzp); }', but not the descriptor class 'com.google.android.gms.internal.measurement.zzp'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void getAppInstanceId(com.google.android.gms.internal.measurement.zzp); }', but not the descriptor class 'com.google.android.gms.internal.measurement.zzp'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void getDeepLink(com.google.android.gms.internal.measurement.zzp); }', but not the descriptor class 'com.google.android.gms.internal.measurement.zzp'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void getGmpAppId(com.google.android.gms.internal.measurement.zzp); }', but not the descriptor class 'com.google.android.gms.internal.measurement.zzp'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void generateEventId(com.google.android.gms.internal.measurement.zzp); }', but not the descriptor class 'com.google.android.gms.internal.measurement.zzp'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void logEventAndBundle(java.lang.String,java.lang.String,android.os.Bundle,com.google.android.gms.internal.measurement.zzp,long); }', but not the descriptor class 'com.google.android.gms.internal.measurement.zzp'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void onActivityStarted(com.google.android.gms.dynamic.IObjectWrapper,long); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void onActivityStopped(com.google.android.gms.dynamic.IObjectWrapper,long); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void onActivityCreated(com.google.android.gms.dynamic.IObjectWrapper,android.os.Bundle,long); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void onActivityDestroyed(com.google.android.gms.dynamic.IObjectWrapper,long); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void onActivityPaused(com.google.android.gms.dynamic.IObjectWrapper,long); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void onActivityResumed(com.google.android.gms.dynamic.IObjectWrapper,long); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void onActivitySaveInstanceState(com.google.android.gms.dynamic.IObjectWrapper,com.google.android.gms.internal.measurement.zzp,long); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void onActivitySaveInstanceState(com.google.android.gms.dynamic.IObjectWrapper,com.google.android.gms.internal.measurement.zzp,long); }', but not the descriptor class 'com.google.android.gms.internal.measurement.zzp'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void performAction(android.os.Bundle,com.google.android.gms.internal.measurement.zzp,long); }', but not the descriptor class 'com.google.android.gms.internal.measurement.zzp'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void getUserProperties(java.lang.String,java.lang.String,boolean,com.google.android.gms.internal.measurement.zzp); }', but not the descriptor class 'com.google.android.gms.internal.measurement.zzp'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void logHealthData(int,java.lang.String,com.google.android.gms.dynamic.IObjectWrapper,com.google.android.gms.dynamic.IObjectWrapper,com.google.android.gms.dynamic.IObjectWrapper); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void logHealthData(int,java.lang.String,com.google.android.gms.dynamic.IObjectWrapper,com.google.android.gms.dynamic.IObjectWrapper,com.google.android.gms.dynamic.IObjectWrapper); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void logHealthData(int,java.lang.String,com.google.android.gms.dynamic.IObjectWrapper,com.google.android.gms.dynamic.IObjectWrapper,com.google.android.gms.dynamic.IObjectWrapper); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void setEventInterceptor(com.google.android.gms.internal.measurement.zzq); }', but not the descriptor class 'com.google.android.gms.internal.measurement.zzq'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void registerOnMeasurementEventListener(com.google.android.gms.internal.measurement.zzq); }', but not the descriptor class 'com.google.android.gms.internal.measurement.zzq'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void unregisterOnMeasurementEventListener(com.google.android.gms.internal.measurement.zzq); }', but not the descriptor class 'com.google.android.gms.internal.measurement.zzq'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void setInstanceIdProvider(com.google.android.gms.internal.measurement.zzv); }', but not the descriptor class 'com.google.android.gms.internal.measurement.zzv'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void getConditionalUserProperties(java.lang.String,java.lang.String,com.google.android.gms.internal.measurement.zzp); }', but not the descriptor class 'com.google.android.gms.internal.measurement.zzp'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void getTestFlag(com.google.android.gms.internal.measurement.zzp,int); }', but not the descriptor class 'com.google.android.gms.internal.measurement.zzp'
    Note: the configuration keeps the entry point 'com.google.android.gms.measurement.internal.AppMeasurementDynamiteService { void isDataCollectionEnabled(com.google.android.gms.internal.measurement.zzp); }', but not the descriptor class 'com.google.android.gms.internal.measurement.zzp'
    Note: the configuration keeps the entry point 'com.google.android.gms.vision.clearcut.DynamiteClearcutLogger { void zza(int,com.google.android.gms.internal.vision.zzdu); }', but not the descriptor class 'com.google.android.gms.internal.vision.zzdu'
    Note: the configuration keeps the entry point 'com.google.android.gms.vision.clearcut.LoggingConnectionCallbacks { void onConnectionFailed(com.google.android.gms.common.ConnectionResult); }', but not the descriptor class 'com.google.android.gms.common.ConnectionResult'
    Note: the configuration keeps the entry point 'com.google.android.gms.vision.clearcut.VisionClearcutLogger { void zzb(int,com.google.android.gms.internal.vision.zzdu); }', but not the descriptor class 'com.google.android.gms.internal.vision.zzdu'
    Note: the configuration keeps the entry point 'com.google.android.material.bottomnavigation.BottomNavigationMenuView { void setPresenter(com.google.android.material.bottomnavigation.BottomNavigationPresenter); }', but not the descriptor class 'com.google.android.material.bottomnavigation.BottomNavigationPresenter'
    Note: the configuration keeps the entry point 'com.google.android.material.bottomnavigation.BottomNavigationView { void setOnNavigationItemSelectedListener(com.google.android.material.bottomnavigation.BottomNavigationView$OnNavigationItemSelectedListener); }', but not the descriptor class 'com.google.android.material.bottomnavigation.BottomNavigationView$OnNavigationItemSelectedListener'
    Note: the configuration keeps the entry point 'com.google.android.material.bottomnavigation.BottomNavigationView { void setOnNavigationItemReselectedListener(com.google.android.material.bottomnavigation.BottomNavigationView$OnNavigationItemReselectedListener); }', but not the descriptor class 'com.google.android.material.bottomnavigation.BottomNavigationView$OnNavigationItemReselectedListener'
    Note: the configuration keeps the entry point 'com.google.android.material.chip.Chip { void setChipDrawable(com.google.android.material.chip.ChipDrawable); }', but not the descriptor class 'com.google.android.material.chip.ChipDrawable'
    Note: the configuration keeps the entry point 'com.google.android.material.chip.Chip { void setTextAppearance(com.google.android.material.resources.TextAppearance); }', but not the descriptor class 'com.google.android.material.resources.TextAppearance'
    Note: the configuration keeps the entry point 'com.google.android.material.chip.Chip { void setShowMotionSpec(com.google.android.material.animation.MotionSpec); }', but not the descriptor class 'com.google.android.material.animation.MotionSpec'
    Note: the configuration keeps the entry point 'com.google.android.material.chip.Chip { void setHideMotionSpec(com.google.android.material.animation.MotionSpec); }', but not the descriptor class 'com.google.android.material.animation.MotionSpec'
    Note: the configuration keeps the entry point 'com.google.android.material.chip.ChipGroup { void setOnCheckedChangeListener(com.google.android.material.chip.ChipGroup$OnCheckedChangeListener); }', but not the descriptor class 'com.google.android.material.chip.ChipGroup$OnCheckedChangeListener'
    Note: the configuration keeps the entry point 'com.google.android.material.circularreveal.CircularRevealFrameLayout { void setRevealInfo(com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo); }', but not the descriptor class 'com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo'
    Note: the configuration keeps the entry point 'com.google.android.material.circularreveal.CircularRevealGridLayout { void setRevealInfo(com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo); }', but not the descriptor class 'com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo'
    Note: the configuration keeps the entry point 'com.google.android.material.circularreveal.CircularRevealLinearLayout { void setRevealInfo(com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo); }', but not the descriptor class 'com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo'
    Note: the configuration keeps the entry point 'com.google.android.material.circularreveal.CircularRevealRelativeLayout { void setRevealInfo(com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo); }', but not the descriptor class 'com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo'
    Note: the configuration keeps the entry point 'com.google.android.material.circularreveal.cardview.CircularRevealCardView { void setRevealInfo(com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo); }', but not the descriptor class 'com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo'
    Note: the configuration keeps the entry point 'com.google.android.material.circularreveal.coordinatorlayout.CircularRevealCoordinatorLayout { void setRevealInfo(com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo); }', but not the descriptor class 'com.google.android.material.circularreveal.CircularRevealWidget$RevealInfo'
    Note: the configuration keeps the entry point 'com.google.android.material.floatingactionbutton.FloatingActionButton { void setShowMotionSpec(com.google.android.material.animation.MotionSpec); }', but not the descriptor class 'com.google.android.material.animation.MotionSpec'
    Note: the configuration keeps the entry point 'com.google.android.material.floatingactionbutton.FloatingActionButton { void setHideMotionSpec(com.google.android.material.animation.MotionSpec); }', but not the descriptor class 'com.google.android.material.animation.MotionSpec'
    Note: the configuration keeps the entry point 'com.google.android.material.navigation.NavigationView { void setNavigationItemSelectedListener(com.google.android.material.navigation.NavigationView$OnNavigationItemSelectedListener); }', but not the descriptor class 'com.google.android.material.navigation.NavigationView$OnNavigationItemSelectedListener'
    Note: the configuration keeps the entry point 'com.google.android.material.snackbar.BaseTransientBottomBar$SnackbarBaseLayout { void setOnLayoutChangeListener(com.google.android.material.snackbar.BaseTransientBottomBar$OnLayoutChangeListener); }', but not the descriptor class 'com.google.android.material.snackbar.BaseTransientBottomBar$OnLayoutChangeListener'
    Note: the configuration keeps the entry point 'com.google.android.material.snackbar.BaseTransientBottomBar$SnackbarBaseLayout { void setOnAttachStateChangeListener(com.google.android.material.snackbar.BaseTransientBottomBar$OnAttachStateChangeListener); }', but not the descriptor class 'com.google.android.material.snackbar.BaseTransientBottomBar$OnAttachStateChangeListener'
    Note: the configuration keeps the entry point 'com.google.android.material.tabs.TabLayout { void setOnTabSelectedListener(com.google.android.material.tabs.TabLayout$BaseOnTabSelectedListener); }', but not the descriptor class 'com.google.android.material.tabs.TabLayout$BaseOnTabSelectedListener'
    Note: the configuration keeps the entry point 'com.google.android.material.textfield.TextInputLayout { void setTextInputAccessibilityDelegate(com.google.android.material.textfield.TextInputLayout$AccessibilityDelegate); }', but not the descriptor class 'com.google.android.material.textfield.TextInputLayout$AccessibilityDelegate'
    Note: the configuration keeps the entry point 'com.google.firebase.abt.component.AbtRegistrar { com.google.firebase.abt.component.AbtComponent lambda$getComponents$0(com.google.firebase.components.ComponentContainer); }', but not the descriptor class 'com.google.firebase.components.ComponentContainer'
    Note: the configuration keeps the entry point 'com.google.firebase.auth.PhoneAuthProvider$OnVerificationStateChangedCallbacks { void onVerificationCompleted(com.google.firebase.auth.PhoneAuthCredential); }', but not the descriptor class 'com.google.firebase.auth.PhoneAuthCredential'
    Note: the configuration keeps the entry point 'com.google.firebase.auth.PhoneAuthProvider$OnVerificationStateChangedCallbacks { void onVerificationFailed(com.google.firebase.FirebaseException); }', but not the descriptor class 'com.google.firebase.FirebaseException'
    Note: the configuration keeps the entry point 'com.google.firebase.auth.PhoneAuthProvider$OnVerificationStateChangedCallbacks { void onCodeSent(java.lang.String,com.google.firebase.auth.PhoneAuthProvider$ForceResendingToken); }', but not the descriptor class 'com.google.firebase.auth.PhoneAuthProvider$ForceResendingToken'
    Note: the configuration keeps the entry point 'com.google.firebase.datatransport.TransportRegistrar { com.google.android.datatransport.TransportFactory lambda$getComponents$0(com.google.firebase.components.ComponentContainer); }', but not the descriptor class 'com.google.firebase.components.ComponentContainer'
    Note: the configuration keeps the entry point 'com.google.firebase.iid.zzc { void zza(com.google.firebase.iid.zzc,android.content.Intent); }', but not the descriptor class 'com.google.firebase.iid.zzc'
    Note: the configuration keeps the entry point 'com.google.firebase.inappmessaging.FirebaseInAppMessagingDisplay { void displayMessage(com.google.firebase.inappmessaging.model.InAppMessage,com.google.firebase.inappmessaging.FirebaseInAppMessagingDisplayCallbacks); }', but not the descriptor class 'com.google.firebase.inappmessaging.model.InAppMessage'
    Note: the configuration keeps the entry point 'com.google.firebase.inappmessaging.FirebaseInAppMessagingDisplay { void displayMessage(com.google.firebase.inappmessaging.model.InAppMessage,com.google.firebase.inappmessaging.FirebaseInAppMessagingDisplayCallbacks); }', but not the descriptor class 'com.google.firebase.inappmessaging.FirebaseInAppMessagingDisplayCallbacks'
    Note: the configuration keeps the entry point 'com.google.firebase.inappmessaging.FirebaseInAppMessagingRegistrar { com.google.firebase.inappmessaging.FirebaseInAppMessaging providesFirebaseInAppMessaging(com.google.firebase.components.ComponentContainer); }', but not the descriptor class 'com.google.firebase.components.ComponentContainer'
    Note: the configuration keeps the entry point 'com.google.firebase.inappmessaging.FirebaseInAppMessagingRegistrar { com.google.firebase.inappmessaging.FirebaseInAppMessaging access$lambda$0(com.google.firebase.inappmessaging.FirebaseInAppMessagingRegistrar,com.google.firebase.components.ComponentContainer); }', but not the descriptor class 'com.google.firebase.components.ComponentContainer'
    Note: the configuration keeps the entry point 'com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay { FirebaseInAppMessagingDisplay(com.google.firebase.inappmessaging.FirebaseInAppMessaging,java.util.Map,com.google.firebase.inappmessaging.display.internal.FiamImageLoader,com.google.firebase.inappmessaging.display.internal.RenewableTimer,com.google.firebase.inappmessaging.display.internal.RenewableTimer,com.google.firebase.inappmessaging.display.internal.FiamWindowManager,android.app.Application,com.google.firebase.inappmessaging.display.internal.BindingWrapperFactory,com.google.firebase.inappmessaging.display.internal.FiamAnimator); }', but not the descriptor class 'com.google.firebase.inappmessaging.display.internal.FiamImageLoader'
    Note: the configuration keeps the entry point 'com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay { FirebaseInAppMessagingDisplay(com.google.firebase.inappmessaging.FirebaseInAppMessaging,java.util.Map,com.google.firebase.inappmessaging.display.internal.FiamImageLoader,com.google.firebase.inappmessaging.display.internal.RenewableTimer,com.google.firebase.inappmessaging.display.internal.RenewableTimer,com.google.firebase.inappmessaging.display.internal.FiamWindowManager,android.app.Application,com.google.firebase.inappmessaging.display.internal.BindingWrapperFactory,com.google.firebase.inappmessaging.display.internal.FiamAnimator); }', but not the descriptor class 'com.google.firebase.inappmessaging.display.internal.RenewableTimer'
    Note: the configuration keeps the entry point 'com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay { FirebaseInAppMessagingDisplay(com.google.firebase.inappmessaging.FirebaseInAppMessaging,java.util.Map,com.google.firebase.inappmessaging.display.internal.FiamImageLoader,com.google.firebase.inappmessaging.display.internal.RenewableTimer,com.google.firebase.inappmessaging.display.internal.RenewableTimer,com.google.firebase.inappmessaging.display.internal.FiamWindowManager,android.app.Application,com.google.firebase.inappmessaging.display.internal.BindingWrapperFactory,com.google.firebase.inappmessaging.display.internal.FiamAnimator); }', but not the descriptor class 'com.google.firebase.inappmessaging.display.internal.RenewableTimer'
    Note: the configuration keeps the entry point 'com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay { FirebaseInAppMessagingDisplay(com.google.firebase.inappmessaging.FirebaseInAppMessaging,java.util.Map,com.google.firebase.inappmessaging.display.internal.FiamImageLoader,com.google.firebase.inappmessaging.display.internal.RenewableTimer,com.google.firebase.inappmessaging.display.internal.RenewableTimer,com.google.firebase.inappmessaging.display.internal.FiamWindowManager,android.app.Application,com.google.firebase.inappmessaging.display.internal.BindingWrapperFactory,com.google.firebase.inappmessaging.display.internal.FiamAnimator); }', but not the descriptor class 'com.google.firebase.inappmessaging.display.internal.FiamWindowManager'
    Note: the configuration keeps the entry point 'com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay { FirebaseInAppMessagingDisplay(com.google.firebase.inappmessaging.FirebaseInAppMessaging,java.util.Map,com.google.firebase.inappmessaging.display.internal.FiamImageLoader,com.google.firebase.inappmessaging.display.internal.RenewableTimer,com.google.firebase.inappmessaging.display.internal.RenewableTimer,com.google.firebase.inappmessaging.display.internal.FiamWindowManager,android.app.Application,com.google.firebase.inappmessaging.display.internal.BindingWrapperFactory,com.google.firebase.inappmessaging.display.internal.FiamAnimator); }', but not the descriptor class 'com.google.firebase.inappmessaging.display.internal.BindingWrapperFactory'
    Note: the configuration keeps the entry point 'com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay { FirebaseInAppMessagingDisplay(com.google.firebase.inappmessaging.FirebaseInAppMessaging,java.util.Map,com.google.firebase.inappmessaging.display.internal.FiamImageLoader,com.google.firebase.inappmessaging.display.internal.RenewableTimer,com.google.firebase.inappmessaging.display.internal.RenewableTimer,com.google.firebase.inappmessaging.display.internal.FiamWindowManager,android.app.Application,com.google.firebase.inappmessaging.display.internal.BindingWrapperFactory,com.google.firebase.inappmessaging.display.internal.FiamAnimator); }', but not the descriptor class 'com.google.firebase.inappmessaging.display.internal.FiamAnimator'
    Note: the configuration keeps the entry point 'com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay { void testMessage(android.app.Activity,com.google.firebase.inappmessaging.model.InAppMessage,com.google.firebase.inappmessaging.FirebaseInAppMessagingDisplayCallbacks); }', but not the descriptor class 'com.google.firebase.inappmessaging.model.InAppMessage'
    Note: the configuration keeps the entry point 'com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay { void testMessage(android.app.Activity,com.google.firebase.inappmessaging.model.InAppMessage,com.google.firebase.inappmessaging.FirebaseInAppMessagingDisplayCallbacks); }', but not the descriptor class 'com.google.firebase.inappmessaging.FirebaseInAppMessagingDisplayCallbacks'
    Note: the configuration keeps the entry point 'com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay { void inflateBinding(android.app.Activity,com.google.firebase.inappmessaging.display.internal.bindingwrappers.BindingWrapper); }', but not the descriptor class 'com.google.firebase.inappmessaging.display.internal.bindingwrappers.BindingWrapper'
    Note: the configuration keeps the entry point 'com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay { java.util.List extractActions(com.google.firebase.inappmessaging.model.InAppMessage); }', but not the descriptor class 'com.google.firebase.inappmessaging.model.InAppMessage'
    Note: the configuration keeps the entry point 'com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay { com.google.firebase.inappmessaging.model.ImageData extractImageData(com.google.firebase.inappmessaging.model.InAppMessage); }', but not the descriptor class 'com.google.firebase.inappmessaging.model.InAppMessage'
    Note: the configuration keeps the entry point 'com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay { boolean isValidImageData(com.google.firebase.inappmessaging.model.ImageData); }', but not the descriptor class 'com.google.firebase.inappmessaging.model.ImageData'
    Note: the configuration keeps the entry point 'com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay { void loadNullableImage(android.app.Activity,com.google.firebase.inappmessaging.display.internal.bindingwrappers.BindingWrapper,com.google.firebase.inappmessaging.model.ImageData,com.squareup.picasso.Callback); }', but not the descriptor class 'com.google.firebase.inappmessaging.display.internal.bindingwrappers.BindingWrapper'
    Note: the configuration keeps the entry point 'com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay { void loadNullableImage(android.app.Activity,com.google.firebase.inappmessaging.display.internal.bindingwrappers.BindingWrapper,com.google.firebase.inappmessaging.model.ImageData,com.squareup.picasso.Callback); }', but not the descriptor class 'com.google.firebase.inappmessaging.model.ImageData'
    Note: the configuration keeps the entry point 'com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay { void loadNullableImage(android.app.Activity,com.google.firebase.inappmessaging.display.internal.bindingwrappers.BindingWrapper,com.google.firebase.inappmessaging.model.ImageData,com.squareup.picasso.Callback); }', but not the descriptor class 'com.squareup.picasso.Callback'
    Note: the configuration keeps the entry point 'com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay { com.google.firebase.inappmessaging.model.InAppMessage access$002(com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay,com.google.firebase.inappmessaging.model.InAppMessage); }', but not the descriptor class 'com.google.firebase.inappmessaging.model.InAppMessage'
    Note: the configuration keeps the entry point 'com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay { com.google.firebase.inappmessaging.FirebaseInAppMessagingDisplayCallbacks access$202(com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay,com.google.firebase.inappmessaging.FirebaseInAppMessagingDisplayCallbacks); }', but not the descriptor class 'com.google.firebase.inappmessaging.FirebaseInAppMessagingDisplayCallbacks'
    Note: the configuration keeps the entry point 'com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay { void access$400(com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay,android.app.Activity,com.google.firebase.inappmessaging.display.internal.bindingwrappers.BindingWrapper); }', but not the descriptor class 'com.google.firebase.inappmessaging.display.internal.bindingwrappers.BindingWrapper'
    Note: the configuration keeps the entry point 'com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplayRegistrar { com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay buildFirebaseInAppMessagingUI(com.google.firebase.components.ComponentContainer); }', but not the descriptor class 'com.google.firebase.components.ComponentContainer'
    Note: the configuration keeps the entry point 'com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplayRegistrar { com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay access$lambda$0(com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplayRegistrar,com.google.firebase.components.ComponentContainer); }', but not the descriptor class 'com.google.firebase.components.ComponentContainer'
    Note: the configuration keeps the entry point 'com.google.firebase.inappmessaging.display.internal.FirebaseInAppMessagingDisplayImpl { void displayMessage(com.google.firebase.inappmessaging.model.InAppMessage,com.google.firebase.inappmessaging.FirebaseInAppMessagingDisplayCallbacks); }', but not the descriptor class 'com.google.firebase.inappmessaging.model.InAppMessage'
    Note: the configuration keeps the entry point 'com.google.firebase.inappmessaging.display.internal.FirebaseInAppMessagingDisplayImpl { void displayMessage(com.google.firebase.inappmessaging.model.InAppMessage,com.google.firebase.inappmessaging.FirebaseInAppMessagingDisplayCallbacks); }', but not the descriptor class 'com.google.firebase.inappmessaging.FirebaseInAppMessagingDisplayCallbacks'
    Note: the configuration keeps the entry point 'com.google.firebase.messaging.FirebaseMessagingService { void onMessageReceived(com.google.firebase.messaging.RemoteMessage); }', but not the descriptor class 'com.google.firebase.messaging.RemoteMessage'
    Note: the configuration keeps the entry point 'com.squareup.picasso.Picasso { Picasso(android.content.Context,com.squareup.picasso.Dispatcher,com.squareup.picasso.Cache,com.squareup.picasso.Picasso$Listener,com.squareup.picasso.Picasso$RequestTransformer,java.util.List,com.squareup.picasso.Stats,android.graphics.Bitmap$Config,boolean,boolean); }', but not the descriptor class 'com.squareup.picasso.Dispatcher'
    Note: the configuration keeps the entry point 'com.squareup.picasso.Picasso { Picasso(android.content.Context,com.squareup.picasso.Dispatcher,com.squareup.picasso.Cache,com.squareup.picasso.Picasso$Listener,com.squareup.picasso.Picasso$RequestTransformer,java.util.List,com.squareup.picasso.Stats,android.graphics.Bitmap$Config,boolean,boolean); }', but not the descriptor class 'com.squareup.picasso.Cache'
    Note: the configuration keeps the entry point 'com.squareup.picasso.Picasso { Picasso(android.content.Context,com.squareup.picasso.Dispatcher,com.squareup.picasso.Cache,com.squareup.picasso.Picasso$Listener,com.squareup.picasso.Picasso$RequestTransformer,java.util.List,com.squareup.picasso.Stats,android.graphics.Bitmap$Config,boolean,boolean); }', but not the descriptor class 'com.squareup.picasso.Picasso$Listener'
    Note: the configuration keeps the entry point 'com.squareup.picasso.Picasso { Picasso(android.content.Context,com.squareup.picasso.Dispatcher,com.squareup.picasso.Cache,com.squareup.picasso.Picasso$Listener,com.squareup.picasso.Picasso$RequestTransformer,java.util.List,com.squareup.picasso.Stats,android.graphics.Bitmap$Config,boolean,boolean); }', but not the descriptor class 'com.squareup.picasso.Picasso$RequestTransformer'
    Note: the configuration keeps the entry point 'com.squareup.picasso.Picasso { Picasso(android.content.Context,com.squareup.picasso.Dispatcher,com.squareup.picasso.Cache,com.squareup.picasso.Picasso$Listener,com.squareup.picasso.Picasso$RequestTransformer,java.util.List,com.squareup.picasso.Stats,android.graphics.Bitmap$Config,boolean,boolean); }', but not the descriptor class 'com.squareup.picasso.Stats'
    Note: the configuration keeps the entry point 'com.squareup.picasso.Picasso { void cancelRequest(com.squareup.picasso.Target); }', but not the descriptor class 'com.squareup.picasso.Target'
    Note: the configuration keeps the entry point 'com.squareup.picasso.Picasso { com.squareup.picasso.Request transformRequest(com.squareup.picasso.Request); }', but not the descriptor class 'com.squareup.picasso.Request'
    Note: the configuration keeps the entry point 'com.squareup.picasso.Picasso { void defer(android.widget.ImageView,com.squareup.picasso.DeferredRequestCreator); }', but not the descriptor class 'com.squareup.picasso.DeferredRequestCreator'
    Note: the configuration keeps the entry point 'com.squareup.picasso.Picasso { void enqueueAndSubmit(com.squareup.picasso.Action); }', but not the descriptor class 'com.squareup.picasso.Action'
    Note: the configuration keeps the entry point 'com.squareup.picasso.Picasso { void submit(com.squareup.picasso.Action); }', but not the descriptor class 'com.squareup.picasso.Action'
    Note: the configuration keeps the entry point 'com.squareup.picasso.Picasso { void complete(com.squareup.picasso.BitmapHunter); }', but not the descriptor class 'com.squareup.picasso.BitmapHunter'
    Note: the configuration keeps the entry point 'com.squareup.picasso.Picasso { void resumeAction(com.squareup.picasso.Action); }', but not the descriptor class 'com.squareup.picasso.Action'
    Note: the configuration keeps the entry point 'com.squareup.picasso.Picasso { void deliverAction(android.graphics.Bitmap,com.squareup.picasso.Picasso$LoadedFrom,com.squareup.picasso.Action,java.lang.Exception); }', but not the descriptor class 'com.squareup.picasso.Picasso$LoadedFrom'
    Note: the configuration keeps the entry point 'com.squareup.picasso.Picasso { void deliverAction(android.graphics.Bitmap,com.squareup.picasso.Picasso$LoadedFrom,com.squareup.picasso.Action,java.lang.Exception); }', but not the descriptor class 'com.squareup.picasso.Action'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebase.firebaseremoteconfig.FirebaseRemoteConfigPlugin { java.util.Map createRemoteConfigValueMap(com.google.firebase.remoteconfig.FirebaseRemoteConfigValue); }', but not the descriptor class 'com.google.firebase.remoteconfig.FirebaseRemoteConfigValue'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebase.firebaseremoteconfig.FirebaseRemoteConfigPlugin$1 { FirebaseRemoteConfigPlugin$1(io.flutter.plugins.firebase.firebaseremoteconfig.FirebaseRemoteConfigPlugin,com.google.firebase.remoteconfig.FirebaseRemoteConfig,io.flutter.plugin.common.MethodChannel$Result); }', but not the descriptor class 'com.google.firebase.remoteconfig.FirebaseRemoteConfig'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebase.firebaseremoteconfig.FirebaseRemoteConfigPlugin$1 { void onComplete(com.google.android.gms.tasks.Task); }', but not the descriptor class 'com.google.android.gms.tasks.Task'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebaseauth.FirebaseAuthPlugin { java.util.Map getVerifyPhoneNumberExceptionMap(com.google.firebase.FirebaseException); }', but not the descriptor class 'com.google.firebase.FirebaseException'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebaseauth.FirebaseAuthPlugin { java.util.Map userInfoToMap(com.google.firebase.auth.UserInfo); }', but not the descriptor class 'com.google.firebase.auth.UserInfo'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebaseauth.FirebaseAuthPlugin { java.util.Map mapFromUser(com.google.firebase.auth.FirebaseUser); }', but not the descriptor class 'com.google.firebase.auth.FirebaseUser'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebaseauth.FirebaseAuthPlugin { java.util.Map mapFromAdditionalUserInfo(com.google.firebase.auth.AdditionalUserInfo); }', but not the descriptor class 'com.google.firebase.auth.AdditionalUserInfo'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebaseauth.FirebaseAuthPlugin { java.util.Map access$100(io.flutter.plugins.firebaseauth.FirebaseAuthPlugin,com.google.firebase.FirebaseException); }', but not the descriptor class 'com.google.firebase.FirebaseException'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebaseauth.FirebaseAuthPlugin { java.util.Map access$300(io.flutter.plugins.firebaseauth.FirebaseAuthPlugin,com.google.firebase.auth.FirebaseUser); }', but not the descriptor class 'com.google.firebase.auth.FirebaseUser'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebaseauth.FirebaseAuthPlugin { java.util.Map access$400(io.flutter.plugins.firebaseauth.FirebaseAuthPlugin,com.google.firebase.auth.AdditionalUserInfo); }', but not the descriptor class 'com.google.firebase.auth.AdditionalUserInfo'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebaseauth.FirebaseAuthPlugin$1 { void onVerificationCompleted(com.google.firebase.auth.PhoneAuthCredential); }', but not the descriptor class 'com.google.firebase.auth.PhoneAuthCredential'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebaseauth.FirebaseAuthPlugin$1 { void onVerificationFailed(com.google.firebase.FirebaseException); }', but not the descriptor class 'com.google.firebase.FirebaseException'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebaseauth.FirebaseAuthPlugin$1 { void onCodeSent(java.lang.String,com.google.firebase.auth.PhoneAuthProvider$ForceResendingToken); }', but not the descriptor class 'com.google.firebase.auth.PhoneAuthProvider$ForceResendingToken'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebaseauth.FirebaseAuthPlugin$2 { void onComplete(com.google.android.gms.tasks.Task); }', but not the descriptor class 'com.google.android.gms.tasks.Task'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebaseauth.FirebaseAuthPlugin$GetSignInMethodsCompleteListener { void onComplete(com.google.android.gms.tasks.Task); }', but not the descriptor class 'com.google.android.gms.tasks.Task'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebaseauth.FirebaseAuthPlugin$SignInCompleteListener { void onComplete(com.google.android.gms.tasks.Task); }', but not the descriptor class 'com.google.android.gms.tasks.Task'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebaseauth.FirebaseAuthPlugin$TaskVoidCompleteListener { void onComplete(com.google.android.gms.tasks.Task); }', but not the descriptor class 'com.google.android.gms.tasks.Task'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin { java.util.Map parseRemoteMessage(com.google.firebase.messaging.RemoteMessage); }', but not the descriptor class 'com.google.firebase.messaging.RemoteMessage'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin$1 { void onComplete(com.google.android.gms.tasks.Task); }', but not the descriptor class 'com.google.android.gms.tasks.Task'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin$2 { void onComplete(com.google.android.gms.tasks.Task); }', but not the descriptor class 'com.google.android.gms.tasks.Task'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin$3 { void onComplete(com.google.android.gms.tasks.Task); }', but not the descriptor class 'com.google.android.gms.tasks.Task'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin$4 { void onComplete(com.google.android.gms.tasks.Task); }', but not the descriptor class 'com.google.android.gms.tasks.Task'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService { void onMessageReceived(com.google.firebase.messaging.RemoteMessage); }', but not the descriptor class 'com.google.firebase.messaging.RemoteMessage'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebasemlvision.BarcodeDetector { void handleDetection(com.google.firebase.ml.vision.common.FirebaseVisionImage,java.util.Map,io.flutter.plugin.common.MethodChannel$Result); }', but not the descriptor class 'com.google.firebase.ml.vision.common.FirebaseVisionImage'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebasemlvision.Detector { void handleDetection(com.google.firebase.ml.vision.common.FirebaseVisionImage,java.util.Map,io.flutter.plugin.common.MethodChannel$Result); }', but not the descriptor class 'com.google.firebase.ml.vision.common.FirebaseVisionImage'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebasemlvision.FaceDetector { void handleDetection(com.google.firebase.ml.vision.common.FirebaseVisionImage,java.util.Map,io.flutter.plugin.common.MethodChannel$Result); }', but not the descriptor class 'com.google.firebase.ml.vision.common.FirebaseVisionImage'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebasemlvision.FaceDetector { java.util.Map getLandmarkData(com.google.firebase.ml.vision.face.FirebaseVisionFace); }', but not the descriptor class 'com.google.firebase.ml.vision.face.FirebaseVisionFace'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebasemlvision.FaceDetector { double[] landmarkPosition(com.google.firebase.ml.vision.face.FirebaseVisionFace,int); }', but not the descriptor class 'com.google.firebase.ml.vision.face.FirebaseVisionFace'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebasemlvision.FaceDetector { java.util.Map access$000(io.flutter.plugins.firebasemlvision.FaceDetector,com.google.firebase.ml.vision.face.FirebaseVisionFace); }', but not the descriptor class 'com.google.firebase.ml.vision.face.FirebaseVisionFace'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebasemlvision.ImageLabeler { void handleDetection(com.google.firebase.ml.vision.common.FirebaseVisionImage,java.util.Map,io.flutter.plugin.common.MethodChannel$Result); }', but not the descriptor class 'com.google.firebase.ml.vision.common.FirebaseVisionImage'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebasemlvision.TextRecognizer { void handleDetection(com.google.firebase.ml.vision.common.FirebaseVisionImage,java.util.Map,io.flutter.plugin.common.MethodChannel$Result); }', but not the descriptor class 'com.google.firebase.ml.vision.common.FirebaseVisionImage'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebasemlvision.TextRecognizer$2 { void onSuccess(com.google.firebase.ml.vision.text.FirebaseVisionText); }', but not the descriptor class 'com.google.firebase.ml.vision.text.FirebaseVisionText'
    Note: the configuration keeps the entry point 'io.flutter.plugins.googlesignin.BackgroundTaskRunner$1 { BackgroundTaskRunner$1(io.flutter.plugins.googlesignin.BackgroundTaskRunner,io.flutter.plugins.googlesignin.BackgroundTaskRunner$Callback,com.google.common.util.concurrent.ListenableFuture); }', but not the descriptor class 'com.google.common.util.concurrent.ListenableFuture'
    Note: the configuration keeps the entry point 'io.flutter.plugins.googlesignin.BackgroundTaskRunner$2 { BackgroundTaskRunner$2(io.flutter.plugins.googlesignin.BackgroundTaskRunner,com.google.common.util.concurrent.SettableFuture,java.util.concurrent.Callable); }', but not the descriptor class 'com.google.common.util.concurrent.SettableFuture'
    Note: the configuration keeps the entry point 'io.flutter.plugins.googlesignin.GoogleSignInPlugin$Delegate { void onSignInResult(com.google.android.gms.tasks.Task); }', but not the descriptor class 'com.google.android.gms.tasks.Task'
    Note: the configuration keeps the entry point 'io.flutter.plugins.googlesignin.GoogleSignInPlugin$Delegate { void access$000(io.flutter.plugins.googlesignin.GoogleSignInPlugin$Delegate,com.google.android.gms.tasks.Task); }', but not the descriptor class 'com.google.android.gms.tasks.Task'
    Note: the configuration keeps the entry point 'io.flutter.plugins.googlesignin.GoogleSignInPlugin$Delegate$1 { void onComplete(com.google.android.gms.tasks.Task); }', but not the descriptor class 'com.google.android.gms.tasks.Task'
    Note: the configuration keeps the entry point 'io.flutter.plugins.googlesignin.GoogleSignInPlugin$Delegate$2 { void onComplete(com.google.android.gms.tasks.Task); }', but not the descriptor class 'com.google.android.gms.tasks.Task'
    Note: the configuration keeps the entry point 'io.flutter.plugins.googlesignin.GoogleSignInPlugin$Delegate$3 { void onComplete(com.google.android.gms.tasks.Task); }', but not the descriptor class 'com.google.android.gms.tasks.Task'
    Note: there were 2 references to unknown classes.                                                                  
          You should check your configuration for typos.                                                               
          (http://proguard.sourceforge.net/manual/troubleshooting.html#unknownclass)                                   
    Note: there were 2 references to unknown class members.                                                            
          You should check your configuration for typos.                                                               
    Note: there were 148 unkept descriptor classes in kept class members.                                              
          You should consider explicitly keeping the mentioned classes                                                 
          (using '-keep').                                                                                             
          (http://proguard.sourceforge.net/manual/troubleshooting.html#descriptorclass)                                
    Note: there were 90 unresolved dynamic references to classes or interfaces.                                        
          You should check if you need to specify additional program jars.                                             
          (http://proguard.sourceforge.net/manual/troubleshooting.html#dynamicalclass)                                 
    Warning: there were 58 unresolved references to classes or interfaces.                                             
             You may need to add missing library jars or update their versions.                                        
             If your code works fine without the missing classes, you can suppress                                     
             the warnings with '-dontwarn' options.                                                                    
             (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass)                             
    Running Gradle task 'assembleRelease'...                                                                           
    Running Gradle task 'assembleRelease'... Done                     191,5s (!)
    *******************************************************************************************
    The Gradle failure may have been because of AndroidX incompatibilities in this Flutter app.
    See https://goo.gl/CP92wY for more information on the problem and how to fix it.
    *******************************************************************************************
    Gradle task assembleRelease failed with exit code 1
    

    Never touch the proguard conf for that project yet

  4. eseidelGoogle commented on Sep 6, 2019

    @eseidelGoogle
    Contributor

    Related in part to #27371

    I wonder what our story is for handling proguard with plugins is? @blasten or @collinjackson might know.

  5. duduf15 commented on Sep 17, 2019

    @duduf15

    Same problem for, all was working with firebase_analytics and now with firebase_remote_config and my app doesn't compile with theses errors

    Note: com.google.android.gms.common.util.WorkSourceUtil: can't find dynamically referenced class android.os.WorkSource$WorkChain
    Note: com.google.android.gms.internal.ads.zzbbp: can't find dynamically referenced class libcore.io.Memory         
    Note: com.google.android.gms.internal.ads.zzbbp: can't find dynamically referenced class org.robolectric.Robolectric
    Note: com.google.android.gms.internal.ads.zzbcp: can't find dynamically referenced class com.google.protobuf.ExtensionRegistry
    Note: com.google.android.gms.internal.ads.zzbcq: can't find dynamically referenced class com.google.protobuf.Extension
    Note: com.google.android.gms.internal.ads.zzbct: can't find dynamically referenced class com.google.protobuf.ExtensionSchemaFull
    Note: com.google.android.gms.internal.ads.zzbea: can't find dynamically referenced class com.google.protobuf.DescriptorMessageInfoFactory
    Note: com.google.android.gms.internal.ads.zzbei: can't find dynamically referenced class com.google.protobuf.MapFieldSchemaFull
    Note: com.google.android.gms.internal.ads.zzbev: can't find dynamically referenced class com.google.protobuf.NewInstanceSchemaFull
    Note: com.google.android.gms.internal.ads.zzbfe: can't find dynamically referenced class com.google.protobuf.GeneratedMessage
    Note: com.google.android.gms.internal.ads.zzbfe: can't find dynamically referenced class com.google.protobuf.UnknownFieldSetSchema
    Note: com.google.android.gms.internal.measurement.zzua: can't find dynamically referenced class libcore.io.Memory  
    Note: com.google.android.gms.internal.measurement.zzua: can't find dynamically referenced class org.robolectric.Robolectric
    Note: com.google.android.gms.internal.measurement.zzuy: can't find dynamically referenced class com.google.protobuf.ExtensionRegistry
    Note: com.google.android.gms.internal.measurement.zzuz: can't find dynamically referenced class com.google.protobuf.Extension
    Note: com.google.android.gms.internal.measurement.zzvc: can't find dynamically referenced class com.google.protobuf.ExtensionSchemaFull
    Note: com.google.android.gms.internal.measurement.zzwi: can't find dynamically referenced class com.google.protobuf.DescriptorMessageInfoFactory
    Note: com.google.android.gms.internal.measurement.zzwq: can't find dynamically referenced class com.google.protobuf.MapFieldSchemaFull
    Note: com.google.android.gms.internal.measurement.zzxc: can't find dynamically referenced class com.google.protobuf.NewInstanceSchemaFull
    Note: com.google.android.gms.internal.measurement.zzxl: can't find dynamically referenced class com.google.protobuf.GeneratedMessage
    Note: com.google.android.gms.internal.measurement.zzxl: can't find dynamically referenced class com.google.protobuf.UnknownFieldSetSchema
    Note: com.google.android.gms.measurement.internal.zzcs: can't find dynamically referenced class com.google.android.gms.tagmanager.TagManagerService
    Note: com.google.android.gms.measurement.internal.zzn: can't find dynamically referenced class android.os.SystemProperties
    Note: com.google.android.youtube.player.internal.aa: can't find dynamically referenced class com.google.android.youtube.api.locallylinked.LocallyLinkedFactory
    Note: com.google.firebase.iid.FirebaseInstanceId$zza: can't find dynamically referenced class com.google.firebase.messaging.FirebaseMessaging
    Note: io.flutter.view.AccessibilityViewEmbedder$ReflectionAccessors: can't find dynamically referenced class android.util.LongArray
    Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.jdk8.JDK8PlatformImplementations
    Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.JRE8PlatformImplementations
    Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.JRE7PlatformImplementations
    Note: kotlin.jvm.internal.Reflection: can't find dynamically referenced class kotlin.reflect.jvm.internal.ReflectionFactoryImpl
    Note: the configuration refers to the unknown field 'com.google.android.gms.common.api.internal.BasePendingResult$ReleasableResultGuardian mResultGuardian' in class 'com.google.android.gms.common.api.internal.BasePendingResult'
    Note: the configuration keeps the entry point 'com.facebook.stetho.dumpapp.Dumper { Dumper(java.lang.Iterable,org.apache.commons.cli.CommandLineParser); }', but not the descriptor class 'org.apache.commons.cli.CommandLineParser'
    Note: the configuration keeps the entry point 'com.facebook.stetho.dumpapp.Dumper { void dumpPluginOutput(java.io.InputStream,java.io.PrintStream,java.io.PrintStream,org.apache.commons.cli.CommandLine); }', but not the descriptor class 'org.apache.commons.cli.CommandLine'
    Note: the configuration keeps the entry point 'com.facebook.stetho.dumpapp.DumperContext { DumperContext(java.io.InputStream,java.io.PrintStream,java.io.PrintStream,org.apache.commons.cli.CommandLineParser,java.util.List); }', but not the descriptor class 'org.apache.commons.cli.CommandLineParser'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.AbstractAdViewAdapter { com.google.android.gms.ads.AdRequest zza(android.content.Context,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationAdRequest'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.AbstractAdViewAdapter { void requestBannerAd(android.content.Context,com.google.android.gms.ads.mediation.MediationBannerListener,android.os.Bundle,com.google.android.gms.ads.AdSize,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationBannerListener'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.AbstractAdViewAdapter { void requestBannerAd(android.content.Context,com.google.android.gms.ads.mediation.MediationBannerListener,android.os.Bundle,com.google.android.gms.ads.AdSize,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.AdSize'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.AbstractAdViewAdapter { void requestBannerAd(android.content.Context,com.google.android.gms.ads.mediation.MediationBannerListener,android.os.Bundle,com.google.android.gms.ads.AdSize,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationAdRequest'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.AbstractAdViewAdapter { void requestInterstitialAd(android.content.Context,com.google.android.gms.ads.mediation.MediationInterstitialListener,android.os.Bundle,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationInterstitialListener'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.AbstractAdViewAdapter { void requestInterstitialAd(android.content.Context,com.google.android.gms.ads.mediation.MediationInterstitialListener,android.os.Bundle,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationAdRequest'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.AbstractAdViewAdapter { void requestNativeAd(android.content.Context,com.google.android.gms.ads.mediation.MediationNativeListener,android.os.Bundle,com.google.android.gms.ads.mediation.NativeMediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationNativeListener'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.AbstractAdViewAdapter { void requestNativeAd(android.content.Context,com.google.android.gms.ads.mediation.MediationNativeListener,android.os.Bundle,com.google.android.gms.ads.mediation.NativeMediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.NativeMediationAdRequest'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.AbstractAdViewAdapter { void initialize(android.content.Context,com.google.android.gms.ads.mediation.MediationAdRequest,java.lang.String,com.google.android.gms.ads.reward.mediation.MediationRewardedVideoAdListener,android.os.Bundle,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationAdRequest'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.AbstractAdViewAdapter { void initialize(android.content.Context,com.google.android.gms.ads.mediation.MediationAdRequest,java.lang.String,com.google.android.gms.ads.reward.mediation.MediationRewardedVideoAdListener,android.os.Bundle,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.reward.mediation.MediationRewardedVideoAdListener'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.AbstractAdViewAdapter { void loadAd(com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationAdRequest'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.AbstractAdViewAdapter { com.google.android.gms.ads.InterstitialAd zza(com.google.ads.mediation.AbstractAdViewAdapter,com.google.android.gms.ads.InterstitialAd); }', but not the descriptor class 'com.google.android.gms.ads.InterstitialAd'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.MediationBannerAdapter { void requestBannerAd(com.google.ads.mediation.MediationBannerListener,android.app.Activity,com.google.ads.mediation.MediationServerParameters,com.google.ads.AdSize,com.google.ads.mediation.MediationAdRequest,com.google.ads.mediation.NetworkExtras); }', but not the descriptor class 'com.google.ads.mediation.MediationBannerListener'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.MediationBannerAdapter { void requestBannerAd(com.google.ads.mediation.MediationBannerListener,android.app.Activity,com.google.ads.mediation.MediationServerParameters,com.google.ads.AdSize,com.google.ads.mediation.MediationAdRequest,com.google.ads.mediation.NetworkExtras); }', but not the descriptor class 'com.google.ads.mediation.MediationServerParameters'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.MediationBannerAdapter { void requestBannerAd(com.google.ads.mediation.MediationBannerListener,android.app.Activity,com.google.ads.mediation.MediationServerParameters,com.google.ads.AdSize,com.google.ads.mediation.MediationAdRequest,com.google.ads.mediation.NetworkExtras); }', but not the descriptor class 'com.google.ads.AdSize'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.MediationBannerAdapter { void requestBannerAd(com.google.ads.mediation.MediationBannerListener,android.app.Activity,com.google.ads.mediation.MediationServerParameters,com.google.ads.AdSize,com.google.ads.mediation.MediationAdRequest,com.google.ads.mediation.NetworkExtras); }', but not the descriptor class 'com.google.ads.mediation.MediationAdRequest'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.MediationBannerAdapter { void requestBannerAd(com.google.ads.mediation.MediationBannerListener,android.app.Activity,com.google.ads.mediation.MediationServerParameters,com.google.ads.AdSize,com.google.ads.mediation.MediationAdRequest,com.google.ads.mediation.NetworkExtras); }', but not the descriptor class 'com.google.ads.mediation.NetworkExtras'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.MediationInterstitialAdapter { void requestInterstitialAd(com.google.ads.mediation.MediationInterstitialListener,android.app.Activity,com.google.ads.mediation.MediationServerParameters,com.google.ads.mediation.MediationAdRequest,com.google.ads.mediation.NetworkExtras); }', but not the descriptor class 'com.google.ads.mediation.MediationInterstitialListener'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.MediationInterstitialAdapter { void requestInterstitialAd(com.google.ads.mediation.MediationInterstitialListener,android.app.Activity,com.google.ads.mediation.MediationServerParameters,com.google.ads.mediation.MediationAdRequest,com.google.ads.mediation.NetworkExtras); }', but not the descriptor class 'com.google.ads.mediation.MediationServerParameters'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.MediationInterstitialAdapter { void requestInterstitialAd(com.google.ads.mediation.MediationInterstitialListener,android.app.Activity,com.google.ads.mediation.MediationServerParameters,com.google.ads.mediation.MediationAdRequest,com.google.ads.mediation.NetworkExtras); }', but not the descriptor class 'com.google.ads.mediation.MediationAdRequest'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.MediationInterstitialAdapter { void requestInterstitialAd(com.google.ads.mediation.MediationInterstitialListener,android.app.Activity,com.google.ads.mediation.MediationServerParameters,com.google.ads.mediation.MediationAdRequest,com.google.ads.mediation.NetworkExtras); }', but not the descriptor class 'com.google.ads.mediation.NetworkExtras'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.customevent.CustomEventAdapter { void requestBannerAd(com.google.ads.mediation.MediationBannerListener,android.app.Activity,com.google.ads.mediation.customevent.CustomEventServerParameters,com.google.ads.AdSize,com.google.ads.mediation.MediationAdRequest,com.google.android.gms.ads.mediation.customevent.CustomEventExtras); }', but not the descriptor class 'com.google.ads.mediation.MediationBannerListener'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.customevent.CustomEventAdapter { void requestBannerAd(com.google.ads.mediation.MediationBannerListener,android.app.Activity,com.google.ads.mediation.customevent.CustomEventServerParameters,com.google.ads.AdSize,com.google.ads.mediation.MediationAdRequest,com.google.android.gms.ads.mediation.customevent.CustomEventExtras); }', but not the descriptor class 'com.google.ads.mediation.customevent.CustomEventServerParameters'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.customevent.CustomEventAdapter { void requestBannerAd(com.google.ads.mediation.MediationBannerListener,android.app.Activity,com.google.ads.mediation.customevent.CustomEventServerParameters,com.google.ads.AdSize,com.google.ads.mediation.MediationAdRequest,com.google.android.gms.ads.mediation.customevent.CustomEventExtras); }', but not the descriptor class 'com.google.ads.AdSize'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.customevent.CustomEventAdapter { void requestBannerAd(com.google.ads.mediation.MediationBannerListener,android.app.Activity,com.google.ads.mediation.customevent.CustomEventServerParameters,com.google.ads.AdSize,com.google.ads.mediation.MediationAdRequest,com.google.android.gms.ads.mediation.customevent.CustomEventExtras); }', but not the descriptor class 'com.google.ads.mediation.MediationAdRequest'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.customevent.CustomEventAdapter { void requestBannerAd(com.google.ads.mediation.MediationBannerListener,android.app.Activity,com.google.ads.mediation.customevent.CustomEventServerParameters,com.google.ads.AdSize,com.google.ads.mediation.MediationAdRequest,com.google.android.gms.ads.mediation.customevent.CustomEventExtras); }', but not the descriptor class 'com.google.android.gms.ads.mediation.customevent.CustomEventExtras'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.customevent.CustomEventAdapter { void requestInterstitialAd(com.google.ads.mediation.MediationInterstitialListener,android.app.Activity,com.google.ads.mediation.customevent.CustomEventServerParameters,com.google.ads.mediation.MediationAdRequest,com.google.android.gms.ads.mediation.customevent.CustomEventExtras); }', but not the descriptor class 'com.google.ads.mediation.MediationInterstitialListener'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.customevent.CustomEventAdapter { void requestInterstitialAd(com.google.ads.mediation.MediationInterstitialListener,android.app.Activity,com.google.ads.mediation.customevent.CustomEventServerParameters,com.google.ads.mediation.MediationAdRequest,com.google.android.gms.ads.mediation.customevent.CustomEventExtras); }', but not the descriptor class 'com.google.ads.mediation.customevent.CustomEventServerParameters'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.customevent.CustomEventAdapter { void requestInterstitialAd(com.google.ads.mediation.MediationInterstitialListener,android.app.Activity,com.google.ads.mediation.customevent.CustomEventServerParameters,com.google.ads.mediation.MediationAdRequest,com.google.android.gms.ads.mediation.customevent.CustomEventExtras); }', but not the descriptor class 'com.google.ads.mediation.MediationAdRequest'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.customevent.CustomEventAdapter { void requestInterstitialAd(com.google.ads.mediation.MediationInterstitialListener,android.app.Activity,com.google.ads.mediation.customevent.CustomEventServerParameters,com.google.ads.mediation.MediationAdRequest,com.google.android.gms.ads.mediation.customevent.CustomEventExtras); }', but not the descriptor class 'com.google.android.gms.ads.mediation.customevent.CustomEventExtras'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.customevent.CustomEventAdapter { void requestBannerAd(com.google.ads.mediation.MediationBannerListener,android.app.Activity,com.google.ads.mediation.MediationServerParameters,com.google.ads.AdSize,com.google.ads.mediation.MediationAdRequest,com.google.ads.mediation.NetworkExtras); }', but not the descriptor class 'com.google.ads.mediation.MediationBannerListener'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.customevent.CustomEventAdapter { void requestBannerAd(com.google.ads.mediation.MediationBannerListener,android.app.Activity,com.google.ads.mediation.MediationServerParameters,com.google.ads.AdSize,com.google.ads.mediation.MediationAdRequest,com.google.ads.mediation.NetworkExtras); }', but not the descriptor class 'com.google.ads.mediation.MediationServerParameters'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.customevent.CustomEventAdapter { void requestBannerAd(com.google.ads.mediation.MediationBannerListener,android.app.Activity,com.google.ads.mediation.MediationServerParameters,com.google.ads.AdSize,com.google.ads.mediation.MediationAdRequest,com.google.ads.mediation.NetworkExtras); }', but not the descriptor class 'com.google.ads.AdSize'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.customevent.CustomEventAdapter { void requestBannerAd(com.google.ads.mediation.MediationBannerListener,android.app.Activity,com.google.ads.mediation.MediationServerParameters,com.google.ads.AdSize,com.google.ads.mediation.MediationAdRequest,com.google.ads.mediation.NetworkExtras); }', but not the descriptor class 'com.google.ads.mediation.MediationAdRequest'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.customevent.CustomEventAdapter { void requestBannerAd(com.google.ads.mediation.MediationBannerListener,android.app.Activity,com.google.ads.mediation.MediationServerParameters,com.google.ads.AdSize,com.google.ads.mediation.MediationAdRequest,com.google.ads.mediation.NetworkExtras); }', but not the descriptor class 'com.google.ads.mediation.NetworkExtras'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.customevent.CustomEventAdapter { void requestInterstitialAd(com.google.ads.mediation.MediationInterstitialListener,android.app.Activity,com.google.ads.mediation.MediationServerParameters,com.google.ads.mediation.MediationAdRequest,com.google.ads.mediation.NetworkExtras); }', but not the descriptor class 'com.google.ads.mediation.MediationInterstitialListener'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.customevent.CustomEventAdapter { void requestInterstitialAd(com.google.ads.mediation.MediationInterstitialListener,android.app.Activity,com.google.ads.mediation.MediationServerParameters,com.google.ads.mediation.MediationAdRequest,com.google.ads.mediation.NetworkExtras); }', but not the descriptor class 'com.google.ads.mediation.MediationServerParameters'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.customevent.CustomEventAdapter { void requestInterstitialAd(com.google.ads.mediation.MediationInterstitialListener,android.app.Activity,com.google.ads.mediation.MediationServerParameters,com.google.ads.mediation.MediationAdRequest,com.google.ads.mediation.NetworkExtras); }', but not the descriptor class 'com.google.ads.mediation.MediationAdRequest'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.customevent.CustomEventAdapter { void requestInterstitialAd(com.google.ads.mediation.MediationInterstitialListener,android.app.Activity,com.google.ads.mediation.MediationServerParameters,com.google.ads.mediation.MediationAdRequest,com.google.ads.mediation.NetworkExtras); }', but not the descriptor class 'com.google.ads.mediation.NetworkExtras'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.customevent.CustomEventBanner { void requestBannerAd(com.google.ads.mediation.customevent.CustomEventBannerListener,android.app.Activity,java.lang.String,java.lang.String,com.google.ads.AdSize,com.google.ads.mediation.MediationAdRequest,java.lang.Object); }', but not the descriptor class 'com.google.ads.mediation.customevent.CustomEventBannerListener'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.customevent.CustomEventBanner { void requestBannerAd(com.google.ads.mediation.customevent.CustomEventBannerListener,android.app.Activity,java.lang.String,java.lang.String,com.google.ads.AdSize,com.google.ads.mediation.MediationAdRequest,java.lang.Object); }', but not the descriptor class 'com.google.ads.AdSize'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.customevent.CustomEventBanner { void requestBannerAd(com.google.ads.mediation.customevent.CustomEventBannerListener,android.app.Activity,java.lang.String,java.lang.String,com.google.ads.AdSize,com.google.ads.mediation.MediationAdRequest,java.lang.Object); }', but not the descriptor class 'com.google.ads.mediation.MediationAdRequest'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.customevent.CustomEventInterstitial { void requestInterstitialAd(com.google.ads.mediation.customevent.CustomEventInterstitialListener,android.app.Activity,java.lang.String,java.lang.String,com.google.ads.mediation.MediationAdRequest,java.lang.Object); }', but not the descriptor class 'com.google.ads.mediation.customevent.CustomEventInterstitialListener'
    Note: the configuration keeps the entry point 'com.google.ads.mediation.customevent.CustomEventInterstitial { void requestInterstitialAd(com.google.ads.mediation.customevent.CustomEventInterstitialListener,android.app.Activity,java.lang.String,java.lang.String,com.google.ads.mediation.MediationAdRequest,java.lang.Object); }', but not the descriptor class 'com.google.ads.mediation.MediationAdRequest'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.AdView { void setAdSize(com.google.android.gms.ads.AdSize); }', but not the descriptor class 'com.google.android.gms.ads.AdSize'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.AdView { void setAdListener(com.google.android.gms.ads.AdListener); }', but not the descriptor class 'com.google.android.gms.ads.AdListener'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.BaseAdView { void setAdListener(com.google.android.gms.ads.AdListener); }', but not the descriptor class 'com.google.android.gms.ads.AdListener'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.BaseAdView { void setAdSize(com.google.android.gms.ads.AdSize); }', but not the descriptor class 'com.google.android.gms.ads.AdSize'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.NativeExpressAdView { void setVideoOptions(com.google.android.gms.ads.VideoOptions); }', but not the descriptor class 'com.google.android.gms.ads.VideoOptions'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.NativeExpressAdView { void setAdSize(com.google.android.gms.ads.AdSize); }', but not the descriptor class 'com.google.android.gms.ads.AdSize'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.NativeExpressAdView { void setAdListener(com.google.android.gms.ads.AdListener); }', but not the descriptor class 'com.google.android.gms.ads.AdListener'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.doubleclick.PublisherAdView { void setVideoOptions(com.google.android.gms.ads.VideoOptions); }', but not the descriptor class 'com.google.android.gms.ads.VideoOptions'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.doubleclick.PublisherAdView { void setAdListener(com.google.android.gms.ads.AdListener); }', but not the descriptor class 'com.google.android.gms.ads.AdListener'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.doubleclick.PublisherAdView { void setAdSizes(com.google.android.gms.ads.AdSize[]); }', but not the descriptor class 'com.google.android.gms.ads.AdSize'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.doubleclick.PublisherAdView { void setAppEventListener(com.google.android.gms.ads.doubleclick.AppEventListener); }', but not the descriptor class 'com.google.android.gms.ads.doubleclick.AppEventListener'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.doubleclick.PublisherAdView { void setCorrelator(com.google.android.gms.ads.Correlator); }', but not the descriptor class 'com.google.android.gms.ads.Correlator'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.doubleclick.PublisherAdView { void setOnCustomRenderedAdLoadedListener(com.google.android.gms.ads.doubleclick.OnCustomRenderedAdLoadedListener); }', but not the descriptor class 'com.google.android.gms.ads.doubleclick.OnCustomRenderedAdLoadedListener'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.formats.NativeAdView { void setAdChoicesView(com.google.android.gms.ads.formats.AdChoicesView); }', but not the descriptor class 'com.google.android.gms.ads.formats.AdChoicesView'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.formats.NativeAdView { void setNativeAd(com.google.android.gms.ads.formats.NativeAd); }', but not the descriptor class 'com.google.android.gms.ads.formats.NativeAd'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.formats.NativeAppInstallAdView { void setMediaView(com.google.android.gms.ads.formats.MediaView); }', but not the descriptor class 'com.google.android.gms.ads.formats.MediaView'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.formats.NativeContentAdView { void setMediaView(com.google.android.gms.ads.formats.MediaView); }', but not the descriptor class 'com.google.android.gms.ads.formats.MediaView'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.formats.UnifiedNativeAdView { void setMediaView(com.google.android.gms.ads.formats.MediaView); }', but not the descriptor class 'com.google.android.gms.ads.formats.MediaView'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.formats.UnifiedNativeAdView { void setAdChoicesView(com.google.android.gms.ads.formats.AdChoicesView); }', but not the descriptor class 'com.google.android.gms.ads.formats.AdChoicesView'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.formats.UnifiedNativeAdView { void setNativeAd(com.google.android.gms.ads.formats.UnifiedNativeAd); }', but not the descriptor class 'com.google.android.gms.ads.formats.UnifiedNativeAd'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.internal.ClientApi { com.google.android.gms.internal.ads.zzku createBannerAdManager(com.google.android.gms.dynamic.IObjectWrapper,com.google.android.gms.internal.ads.zzjo,java.lang.String,com.google.android.gms.internal.ads.zzyn,int); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.internal.ClientApi { com.google.android.gms.internal.ads.zzku createBannerAdManager(com.google.android.gms.dynamic.IObjectWrapper,com.google.android.gms.internal.ads.zzjo,java.lang.String,com.google.android.gms.internal.ads.zzyn,int); }', but not the descriptor class 'com.google.android.gms.internal.ads.zzyn'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.internal.ClientApi { com.google.android.gms.internal.ads.zzku createSearchAdManager(com.google.android.gms.dynamic.IObjectWrapper,com.google.android.gms.internal.ads.zzjo,java.lang.String,int); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.internal.ClientApi { com.google.android.gms.internal.ads.zzku createInterstitialAdManager(com.google.android.gms.dynamic.IObjectWrapper,com.google.android.gms.internal.ads.zzjo,java.lang.String,com.google.android.gms.internal.ads.zzyn,int); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.internal.ClientApi { com.google.android.gms.internal.ads.zzku createInterstitialAdManager(com.google.android.gms.dynamic.IObjectWrapper,com.google.android.gms.internal.ads.zzjo,java.lang.String,com.google.android.gms.internal.ads.zzyn,int); }', but not the descriptor class 'com.google.android.gms.internal.ads.zzyn'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.internal.ClientApi { com.google.android.gms.internal.ads.zzkp createAdLoaderBuilder(com.google.android.gms.dynamic.IObjectWrapper,java.lang.String,com.google.android.gms.internal.ads.zzyn,int); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.internal.ClientApi { com.google.android.gms.internal.ads.zzkp createAdLoaderBuilder(com.google.android.gms.dynamic.IObjectWrapper,java.lang.String,com.google.android.gms.internal.ads.zzyn,int); }', but not the descriptor class 'com.google.android.gms.internal.ads.zzyn'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.internal.ClientApi { com.google.android.gms.internal.ads.zzll getMobileAdsSettingsManager(com.google.android.gms.dynamic.IObjectWrapper); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.internal.ClientApi { com.google.android.gms.internal.ads.zzll getMobileAdsSettingsManagerWithClientJarVersion(com.google.android.gms.dynamic.IObjectWrapper,int); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.internal.ClientApi { com.google.android.gms.internal.ads.zzqo createNativeAdViewDelegate(com.google.android.gms.dynamic.IObjectWrapper,com.google.android.gms.dynamic.IObjectWrapper); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.internal.ClientApi { com.google.android.gms.internal.ads.zzqo createNativeAdViewDelegate(com.google.android.gms.dynamic.IObjectWrapper,com.google.android.gms.dynamic.IObjectWrapper); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.internal.ClientApi { com.google.android.gms.internal.ads.zzqt createNativeAdViewHolderDelegate(com.google.android.gms.dynamic.IObjectWrapper,com.google.android.gms.dynamic.IObjectWrapper,com.google.android.gms.dynamic.IObjectWrapper); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.internal.ClientApi { com.google.android.gms.internal.ads.zzqt createNativeAdViewHolderDelegate(com.google.android.gms.dynamic.IObjectWrapper,com.google.android.gms.dynamic.IObjectWrapper,com.google.android.gms.dynamic.IObjectWrapper); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.internal.ClientApi { com.google.android.gms.internal.ads.zzqt createNativeAdViewHolderDelegate(com.google.android.gms.dynamic.IObjectWrapper,com.google.android.gms.dynamic.IObjectWrapper,com.google.android.gms.dynamic.IObjectWrapper); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.internal.ClientApi { com.google.android.gms.internal.ads.zzaid createRewardedVideoAd(com.google.android.gms.dynamic.IObjectWrapper,com.google.android.gms.internal.ads.zzyn,int); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.internal.ClientApi { com.google.android.gms.internal.ads.zzaid createRewardedVideoAd(com.google.android.gms.dynamic.IObjectWrapper,com.google.android.gms.internal.ads.zzyn,int); }', but not the descriptor class 'com.google.android.gms.internal.ads.zzyn'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.internal.ClientApi { com.google.android.gms.internal.ads.zzaid createRewardedVideoAdSku(com.google.android.gms.dynamic.IObjectWrapper,int); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.internal.ClientApi { com.google.android.gms.internal.ads.zzacg createInAppPurchaseManager(com.google.android.gms.dynamic.IObjectWrapper); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.internal.ClientApi { com.google.android.gms.internal.ads.zzabw createAdOverlay(com.google.android.gms.dynamic.IObjectWrapper); }', but not the descriptor class 'com.google.android.gms.dynamic.IObjectWrapper'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.internal.gmsg.HttpClient { org.json.JSONObject zza(com.google.android.gms.ads.internal.gmsg.HttpClient$zzd); }', but not the descriptor class 'com.google.android.gms.ads.internal.gmsg.HttpClient$zzd'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.internal.gmsg.HttpClient { com.google.android.gms.ads.internal.gmsg.HttpClient$zzc zza(com.google.android.gms.ads.internal.gmsg.HttpClient$zzb); }', but not the descriptor class 'com.google.android.gms.ads.internal.gmsg.HttpClient$zzb'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.mediation.MediationBannerAdapter { void requestBannerAd(android.content.Context,com.google.android.gms.ads.mediation.MediationBannerListener,android.os.Bundle,com.google.android.gms.ads.AdSize,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationBannerListener'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.mediation.MediationBannerAdapter { void requestBannerAd(android.content.Context,com.google.android.gms.ads.mediation.MediationBannerListener,android.os.Bundle,com.google.android.gms.ads.AdSize,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.AdSize'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.mediation.MediationBannerAdapter { void requestBannerAd(android.content.Context,com.google.android.gms.ads.mediation.MediationBannerListener,android.os.Bundle,com.google.android.gms.ads.AdSize,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationAdRequest'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.mediation.MediationInterstitialAdapter { void requestInterstitialAd(android.content.Context,com.google.android.gms.ads.mediation.MediationInterstitialListener,android.os.Bundle,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationInterstitialListener'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.mediation.MediationInterstitialAdapter { void requestInterstitialAd(android.content.Context,com.google.android.gms.ads.mediation.MediationInterstitialListener,android.os.Bundle,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationAdRequest'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.mediation.MediationNativeAdapter { void requestNativeAd(android.content.Context,com.google.android.gms.ads.mediation.MediationNativeListener,android.os.Bundle,com.google.android.gms.ads.mediation.NativeMediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationNativeListener'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.mediation.MediationNativeAdapter { void requestNativeAd(android.content.Context,com.google.android.gms.ads.mediation.MediationNativeListener,android.os.Bundle,com.google.android.gms.ads.mediation.NativeMediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.NativeMediationAdRequest'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.mediation.customevent.CustomEventAdapter { void requestBannerAd(android.content.Context,com.google.android.gms.ads.mediation.MediationBannerListener,android.os.Bundle,com.google.android.gms.ads.AdSize,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationBannerListener'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.mediation.customevent.CustomEventAdapter { void requestBannerAd(android.content.Context,com.google.android.gms.ads.mediation.MediationBannerListener,android.os.Bundle,com.google.android.gms.ads.AdSize,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.AdSize'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.mediation.customevent.CustomEventAdapter { void requestBannerAd(android.content.Context,com.google.android.gms.ads.mediation.MediationBannerListener,android.os.Bundle,com.google.android.gms.ads.AdSize,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationAdRequest'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.mediation.customevent.CustomEventAdapter { void requestInterstitialAd(android.content.Context,com.google.android.gms.ads.mediation.MediationInterstitialListener,android.os.Bundle,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationInterstitialListener'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.mediation.customevent.CustomEventAdapter { void requestInterstitialAd(android.content.Context,com.google.android.gms.ads.mediation.MediationInterstitialListener,android.os.Bundle,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationAdRequest'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.mediation.customevent.CustomEventAdapter { void requestNativeAd(android.content.Context,com.google.android.gms.ads.mediation.MediationNativeListener,android.os.Bundle,com.google.android.gms.ads.mediation.NativeMediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationNativeListener'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.mediation.customevent.CustomEventAdapter { void requestNativeAd(android.content.Context,com.google.android.gms.ads.mediation.MediationNativeListener,android.os.Bundle,com.google.android.gms.ads.mediation.NativeMediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.NativeMediationAdRequest'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.mediation.customevent.CustomEventBanner { void requestBannerAd(android.content.Context,com.google.android.gms.ads.mediation.customevent.CustomEventBannerListener,java.lang.String,com.google.android.gms.ads.AdSize,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.customevent.CustomEventBannerListener'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.mediation.customevent.CustomEventBanner { void requestBannerAd(android.content.Context,com.google.android.gms.ads.mediation.customevent.CustomEventBannerListener,java.lang.String,com.google.android.gms.ads.AdSize,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.AdSize'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.mediation.customevent.CustomEventBanner { void requestBannerAd(android.content.Context,com.google.android.gms.ads.mediation.customevent.CustomEventBannerListener,java.lang.String,com.google.android.gms.ads.AdSize,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationAdRequest'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.mediation.customevent.CustomEventInterstitial { void requestInterstitialAd(android.content.Context,com.google.android.gms.ads.mediation.customevent.CustomEventInterstitialListener,java.lang.String,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.customevent.CustomEventInterstitialListener'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.mediation.customevent.CustomEventInterstitial { void requestInterstitialAd(android.content.Context,com.google.android.gms.ads.mediation.customevent.CustomEventInterstitialListener,java.lang.String,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationAdRequest'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.mediation.customevent.CustomEventNative { void requestNativeAd(android.content.Context,com.google.android.gms.ads.mediation.customevent.CustomEventNativeListener,java.lang.String,com.google.android.gms.ads.mediation.NativeMediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.customevent.CustomEventNativeListener'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.mediation.customevent.CustomEventNative { void requestNativeAd(android.content.Context,com.google.android.gms.ads.mediation.customevent.CustomEventNativeListener,java.lang.String,com.google.android.gms.ads.mediation.NativeMediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.NativeMediationAdRequest'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.reward.mediation.InitializableMediationRewardedVideoAdAdapter { void initialize(android.content.Context,com.google.android.gms.ads.reward.mediation.MediationRewardedVideoAdListener,java.util.List); }', but not the descriptor class 'com.google.android.gms.ads.reward.mediation.MediationRewardedVideoAdListener'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.reward.mediation.MediationRewardedVideoAdAdapter { void initialize(android.content.Context,com.google.android.gms.ads.mediation.MediationAdRequest,java.lang.String,com.google.android.gms.ads.reward.mediation.MediationRewardedVideoAdListener,android.os.Bundle,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationAdRequest'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.reward.mediation.MediationRewardedVideoAdAdapter { void initialize(android.content.Context,com.google.android.gms.ads.mediation.MediationAdRequest,java.lang.String,com.google.android.gms.ads.reward.mediation.MediationRewardedVideoAdListener,android.os.Bundle,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.reward.mediation.MediationRewardedVideoAdListener'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.reward.mediation.MediationRewardedVideoAdAdapter { void loadAd(com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationAdRequest'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.search.SearchAdView { void setAdListener(com.google.android.gms.ads.AdListener); }', but not the descriptor class 'com.google.android.gms.ads.AdListener'
    Note: the configuration keeps the entry point 'com.google.android.gms.ads.search.SearchAdView { void setAdSize(com.google.android.gms.ads.AdSize); }', but not the descriptor class 'com.google.android.gms.ads.AdSize'
    Note: the configuration keeps the entry point 'com.google.android.gms.common.api.internal.LifecycleCallback { com.google.android.gms.common.api.internal.LifecycleFragment getChimeraLifecycleFragmentImpl(com.google.android.gms.common.api.internal.LifecycleActivity); }', but not the descriptor class 'com.google.android.gms.common.api.internal.LifecycleActivity'
    Note: the configuration keeps the entry point 'com.google.android.gms.internal.ads.zzabb { void requestInterstitialAd(android.content.Context,com.google.android.gms.ads.mediation.MediationInterstitialListener,android.os.Bundle,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationInterstitialListener'
    Note: the configuration keeps the entry point 'com.google.android.gms.internal.ads.zzabb { void requestInterstitialAd(android.content.Context,com.google.android.gms.ads.mediation.MediationInterstitialListener,android.os.Bundle,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationAdRequest'
    Note: the configuration keeps the entry point 'com.google.android.youtube.player.YouTubePlayerView { YouTubePlayerView(android.content.Context,android.util.AttributeSet,int,com.google.android.youtube.player.YouTubePlayerView$b); }', but not the descriptor class 'com.google.android.youtube.player.YouTubePlayerView$b'
    Note: the configuration keeps the entry point 'com.google.firebase.abt.FirebaseABTesting { boolean zza(com.google.android.gms.internal.firebase_abt.zzo); }', but not the descriptor class 'com.google.android.gms.internal.firebase_abt.zzo'
    Note: the configuration keeps the entry point 'com.google.firebase.abt.FirebaseABTesting { com.google.android.gms.measurement.AppMeasurement$ConditionalUserProperty zzb(com.google.android.gms.internal.firebase_abt.zzo); }', but not the descriptor class 'com.google.android.gms.internal.firebase_abt.zzo'
    Note: the configuration keeps the entry point 'com.google.firebase.analytics.FirebaseAnalytics { FirebaseAnalytics(com.google.android.gms.measurement.internal.zzbt); }', but not the descriptor class 'com.google.android.gms.measurement.internal.zzbt'
    Note: the configuration keeps the entry point 'com.google.firebase.iid.FirebaseInstanceId { java.lang.Object zza(com.google.android.gms.tasks.Task); }', but not the descriptor class 'com.google.android.gms.tasks.Task'
    Note: the configuration keeps the entry point 'com.google.firebase.iid.FirebaseInstanceId { void zza(java.lang.String,java.lang.String,com.google.android.gms.tasks.TaskCompletionSource,java.lang.String); }', but not the descriptor class 'com.google.android.gms.tasks.TaskCompletionSource'
    Note: the configuration keeps the entry point 'com.google.firebase.iid.FirebaseInstanceId { void zza(java.lang.String,java.lang.String,com.google.android.gms.tasks.TaskCompletionSource,java.lang.String,com.google.android.gms.tasks.Task); }', but not the descriptor class 'com.google.android.gms.tasks.TaskCompletionSource'
    Note: the configuration keeps the entry point 'com.google.firebase.iid.FirebaseInstanceId { void zza(java.lang.String,java.lang.String,com.google.android.gms.tasks.TaskCompletionSource,java.lang.String,com.google.android.gms.tasks.Task); }', but not the descriptor class 'com.google.android.gms.tasks.Task'
    Note: the configuration keeps the entry point 'com.google.firebase.iid.zzaq { com.google.android.gms.tasks.Task zza(android.util.Pair,com.google.android.gms.tasks.Task); }', but not the descriptor class 'com.google.android.gms.tasks.Task'
    Note: the configuration keeps the entry point 'com.google.firebase.iid.zzar { java.lang.Object then(com.google.android.gms.tasks.Task); }', but not the descriptor class 'com.google.android.gms.tasks.Task'
    Note: the configuration keeps the entry point 'com.google.firebase.iid.zzn { zzn(com.google.firebase.iid.FirebaseInstanceId,java.lang.String,java.lang.String,com.google.android.gms.tasks.TaskCompletionSource,java.lang.String); }', but not the descriptor class 'com.google.android.gms.tasks.TaskCompletionSource'
    Note: the configuration keeps the entry point 'com.google.firebase.iid.zzp { zzp(com.google.firebase.iid.FirebaseInstanceId,java.lang.String,java.lang.String,com.google.android.gms.tasks.TaskCompletionSource,java.lang.String); }', but not the descriptor class 'com.google.android.gms.tasks.TaskCompletionSource'
    Note: the configuration keeps the entry point 'com.google.firebase.iid.zzp { void onComplete(com.google.android.gms.tasks.Task); }', but not the descriptor class 'com.google.android.gms.tasks.Task'
    Note: the configuration keeps the entry point 'com.google.firebase.iid.zzr { com.google.android.gms.tasks.Task zzb(com.google.android.gms.tasks.Task); }', but not the descriptor class 'com.google.android.gms.tasks.Task'
    Note: the configuration keeps the entry point 'com.google.firebase.iid.zzr { com.google.android.gms.tasks.Task zzc(com.google.android.gms.tasks.Task); }', but not the descriptor class 'com.google.android.gms.tasks.Task'
    Note: the configuration keeps the entry point 'com.google.firebase.iid.zzr { void zza(android.os.Bundle,com.google.android.gms.tasks.TaskCompletionSource); }', but not the descriptor class 'com.google.android.gms.tasks.TaskCompletionSource'
    Note: the configuration keeps the entry point 'com.google.firebase.iid.zzs { zzs(com.google.firebase.iid.zzr,android.os.Bundle,com.google.android.gms.tasks.TaskCompletionSource); }', but not the descriptor class 'com.google.android.gms.tasks.TaskCompletionSource'
    Note: the configuration keeps the entry point 'com.google.firebase.iid.zzt { java.lang.Object then(com.google.android.gms.tasks.Task); }', but not the descriptor class 'com.google.android.gms.tasks.Task'
    Note: the configuration keeps the entry point 'com.google.firebase.iid.zzu { java.lang.Object then(com.google.android.gms.tasks.Task); }', but not the descriptor class 'com.google.android.gms.tasks.Task'
    Note: the configuration keeps the entry point 'com.google.firebase.remoteconfig.FirebaseRemoteConfig { FirebaseRemoteConfig(android.content.Context,com.google.android.gms.internal.config.zzao,com.google.android.gms.internal.config.zzao,com.google.android.gms.internal.config.zzao,com.google.android.gms.internal.config.zzar); }', but not the descriptor class 'com.google.android.gms.internal.config.zzao'
    Note: the configuration keeps the entry point 'com.google.firebase.remoteconfig.FirebaseRemoteConfig { FirebaseRemoteConfig(android.content.Context,com.google.android.gms.internal.config.zzao,com.google.android.gms.internal.config.zzao,com.google.android.gms.internal.config.zzao,com.google.android.gms.internal.config.zzar); }', but not the descriptor class 'com.google.android.gms.internal.config.zzao'
    Note: the configuration keeps the entry point 'com.google.firebase.remoteconfig.FirebaseRemoteConfig { FirebaseRemoteConfig(android.content.Context,com.google.android.gms.internal.config.zzao,com.google.android.gms.internal.config.zzao,com.google.android.gms.internal.config.zzao,com.google.android.gms.internal.config.zzar); }', but not the descriptor class 'com.google.android.gms.internal.config.zzao'
    Note: the configuration keeps the entry point 'com.google.firebase.remoteconfig.FirebaseRemoteConfig { FirebaseRemoteConfig(android.content.Context,com.google.android.gms.internal.config.zzao,com.google.android.gms.internal.config.zzao,com.google.android.gms.internal.config.zzao,com.google.android.gms.internal.config.zzar); }', but not the descriptor class 'com.google.android.gms.internal.config.zzar'
    Note: the configuration keeps the entry point 'com.google.firebase.remoteconfig.FirebaseRemoteConfig { com.google.android.gms.internal.config.zzao zza(com.google.android.gms.internal.config.zzas); }', but not the descriptor class 'com.google.android.gms.internal.config.zzas'
    Note: the configuration keeps the entry point 'com.google.firebase.remoteconfig.FirebaseRemoteConfig { com.google.android.gms.tasks.Task zza(long,com.google.android.gms.internal.config.zzv); }', but not the descriptor class 'com.google.android.gms.internal.config.zzv'
    Note: the configuration keeps the entry point 'com.google.firebase.remoteconfig.FirebaseRemoteConfig { void zza(com.google.android.gms.tasks.TaskCompletionSource,com.google.android.gms.internal.config.zzk); }', but not the descriptor class 'com.google.android.gms.tasks.TaskCompletionSource'
    Note: the configuration keeps the entry point 'com.google.firebase.remoteconfig.FirebaseRemoteConfig { void zza(com.google.android.gms.tasks.TaskCompletionSource,com.google.android.gms.internal.config.zzk); }', but not the descriptor class 'com.google.android.gms.internal.config.zzk'
    Note: the configuration keeps the entry point 'com.google.firebase.remoteconfig.FirebaseRemoteConfig { void zza(com.google.android.gms.tasks.TaskCompletionSource,com.google.android.gms.common.api.Status); }', but not the descriptor class 'com.google.android.gms.tasks.TaskCompletionSource'
    Note: the configuration keeps the entry point 'com.google.firebase.remoteconfig.zza { zza(com.google.firebase.remoteconfig.FirebaseRemoteConfig,com.google.android.gms.tasks.TaskCompletionSource); }', but not the descriptor class 'com.google.android.gms.tasks.TaskCompletionSource'
    Note: the configuration keeps the entry point 'com.google.firebase.remoteconfig.zza { void onResult(com.google.android.gms.common.api.Result); }', but not the descriptor class 'com.google.android.gms.common.api.Result'
    Note: the configuration keeps the entry point 'io.flutter.plugins.firebase.firebaseremoteconfig.FirebaseRemoteConfigPlugin$1 { void onComplete(com.google.android.gms.tasks.Task); }', but not the descriptor class 'com.google.android.gms.tasks.Task'
    Note: there were 4 references to unknown classes.                                                                  
          You should check your configuration for typos.                                                               
          (http://proguard.sourceforge.net/manual/troubleshooting.html#unknownclass)                                   
    Note: there were 1 references to unknown class members.                                                            
          You should check your configuration for typos.                                                               
    Note: there were 149 unkept descriptor classes in kept class members.                                              
          You should consider explicitly keeping the mentioned classes                                                 
          (using '-keep').                                                                                             
          (http://proguard.sourceforge.net/manual/troubleshooting.html#descriptorclass)                                
    Note: there were 31 unresolved dynamic references to classes or interfaces.                                        
          You should check if you need to specify additional program jars.                                             
          (http://proguard.sourceforge.net/manual/troubleshooting.html#dynamicalclass)                                 
    Warning: there were 12 unresolved references to classes or interfaces.                                             
             You may need to add missing library jars or update their versions.                                        
             If your code works fine without the missing classes, you can suppress                                     
             the warnings with '-dontwarn' options.                                                                    
             (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass)                             
    Warning: there were 2 unresolved references to library class members.                                              
             You probably need to update the library versions.                                                         
             (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedlibraryclassmember)                
    Running Gradle task 'assembleRelease'...                                                                           
    Running Gradle task 'assembleRelease'... Done                     122,1s (!)
    *******************************************************************************************
    The Gradle failure may have been because of AndroidX incompatibilities in this Flutter app.
    See https://goo.gl/CP92wY for more information on the problem and how to fix it.
    *******************************************************************************************
    

    flutter doctor

    [✓] Flutter (Channel stable, v1.9.1+hotfix.2, on Mac OS X 10.13.6 17G6030, locale fr-FR)
     
    [✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
    [✓] Xcode - develop for iOS and macOS (Xcode 10.1)
    [✓] Android Studio (version 3.5)
    [✓] Connected device (2 available)
    

    Never touch the proguard conf for that project yet too
    thanks

  6. added
    toolAffects the "flutter" command-line tool. See also t: labels.
    on Dec 3, 2019
  7. alanpachuau commented on Dec 5, 2019

    @alanpachuau

    I believe the main issue is with flutter firebase plugins. I was trying to build release version with code minification and obfuscation. Setting minifyenabled false in gradle OR ignore warnings and keep all public and private classes in proguard is not an ideal solution if code minification and obfuscation is needed.

    When i build without firebase plugins, it works just fine. An official proguard rules for flutter firebase plugins would be nice.

  8. removed
    t: gradle"flutter build" and "flutter run" on Android
    toolAffects the "flutter" command-line tool. See also t: labels.
    platform-androidAndroid applications specifically
    on Mar 18, 2020
  9. nishtahir commented on Dec 27, 2020

    @nishtahir

    It would be nice to get some movement on this. I'm running into issues where my app is unable to start in release mode because Firebase Core is unable to launch. I've traced the issue down to not having the right proguard retention rules (disabling modification allows the app to launch correctly).

    Here's the stacktrace for reference

    E/flutter (13140): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: MissingPluginException(No implementation found for method Firebase#initializeCore on channel plugins.flutter.io/firebase_core)
    E/flutter (13140): #0      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:160)
    E/flutter (13140): <asynchronous suspension>
    E/flutter (13140): #1      MethodChannel.invokeListMethod (package:flutter/src/services/platform_channel.dart:348)
    E/flutter (13140): <asynchronous suspension>
    E/flutter (13140): #2      MethodChannelFirebase._initializeCore (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:30)
    E/flutter (13140): <asynchronous suspension>
    E/flutter (13140): #3      MethodChannelFirebase.initializeApp (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:75)
    E/flutter (13140): <asynchronous suspension>
    E/flutter (13140): #4      Firebase.initializeApp (package:firebase_core/src/firebase.dart:43)
    E/flutter (13140): <asynchronous suspension>
    E/flutter (13140): #5      App.run (package:project/app.dart:27)
    E/flutter (13140): <asynchronous suspension>
    E/flutter (13140): 
    
  10. added
    P3Issues that are less important to the Flutter project
    on Jun 15, 2021
  11. stuartmorgan-g commented on Mar 11, 2023

    @stuartmorgan-g
    Contributor

    Closing as obsolete since the Firebase plugins are no longer part of this repository.

  12. github-actions commented on Mar 25, 2023

    @github-actions

    This thread has been automatically locked since there has not been any recent activity after it was closed. If you are still experiencing a similar issue, please open a new bug, including the output of flutter doctor -v and a minimal reproduction of the issue.

  13. locked as resolved and limited conversation to collaborators on Mar 25, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3Issues that are less important to the Flutter projectcustomer: crowdAffects or could affect many people, though not necessarily a specific customer.packageflutter/packages repository. See also p: labels.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions