Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
raveesh-me opened this issue Aug 8, 2019 · 7 comments
Labels
customer: crowd Affects or could affect many people, though not necessarily a specific customer. P3 Issues that are less important to the Flutter project package flutter/packages repository. See also p: labels.

Comments

@raveesh-me
Copy link

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.

@raveesh-me raveesh-me changed the title [Doccumentation] Proguard Rules for firebase products [Doccumentation] Proguard Rules for firebase products and other plugins as needed Aug 8, 2019
@raveesh-me raveesh-me 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 Aug 8, 2019
@jaumard
Copy link
Contributor

jaumard commented Sep 2, 2019

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

@eseidelGoogle eseidelGoogle added t: gradle "flutter build" and "flutter run" on Android platform-android Android applications specifically labels Sep 6, 2019
@eseidelGoogle
Copy link
Contributor

Related in part to #27371

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

@duduf15
Copy link

duduf15 commented Sep 17, 2019

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

@jmagman jmagman added the tool Affects the "flutter" command-line tool. See also t: labels. label Dec 3, 2019
@alanpachuau
Copy link

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.

@jmagman jmagman added this to Awaiting triage in Tools - Gradle review Jan 10, 2020
@TahaTesser TahaTesser added documentation customer: crowd Affects or could affect many people, though not necessarily a specific customer. labels Mar 17, 2020
@jonahwilliams jonahwilliams removed this from Awaiting triage in Tools - Gradle review Mar 18, 2020
@jonahwilliams jonahwilliams removed t: gradle "flutter build" and "flutter run" on Android tool Affects the "flutter" command-line tool. See also t: labels. platform-android Android applications specifically labels Mar 18, 2020
@nishtahir
Copy link

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): 

@stuartmorgan
Copy link
Contributor

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

@stuartmorgan stuartmorgan closed this as not planned Won't fix, can't repro, duplicate, stale Mar 11, 2023
@github-actions
Copy link

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.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Mar 25, 2023
@flutter-triage-bot flutter-triage-bot bot added the package flutter/packages repository. See also p: labels. label Jul 5, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
customer: crowd Affects or could affect many people, though not necessarily a specific customer. P3 Issues that are less important to the Flutter project package flutter/packages repository. See also p: labels.
Projects
None yet
Development

No branches or pull requests

10 participants