Varios Proguard nuevas publican los servicios de Google Play v10.2.6 a v11.0.0 en un proyecto Multidex
He actualizado nuestra aplicación para utilizar la versión más reciente del Android Firebase SDK v11.0.0 ( https://firebase.google.com/support/release-notes/android#20170607 ) y de repente aparecen muchos nuevos errores proguard, FYI Todo estaba funcionando bien antes con proguard.
Antes de:
- ¿Por qué los métodos asíncronos llaman antes en Retrofit 2?
- OkHttpClient tiene un recuento máximo de reintentos
- Certificado de certificado okHTTP cuadrado - error sslSocketFactory
- Caché de datos de respuesta con retrofit2 + okhttp3
- ¿Cómo establezco el tiempo de espera para OkHttpClient?
compile 'com.google.firebase:firebase-messaging:10.2.6' compile 'com.google.android.gms:play-services-vision:10.2.6'
Después:
compile 'com.google.firebase:firebase-messaging:11.0.0' compile 'com.google.android.gms:play-services-vision:11.0.0'
El problema es que no parece ser una simple nueva entrada de proguarda desaparecida, pero parece que se rompió todo, de repente varias otras bibliotecas parecían verse afectadas por este cambio.
Estos son los problemas de Proguard relacionados con el GMS:
Note: the configuration keeps the entry point 'com.google.android.gms.ads.identifier.AdvertisingIdClient { com.google.android.gms.internal.zzfd zza(android.content.Context,com.google.android.gms.common.zza); }', but not the descriptor class 'com.google.android.gms.common.zza' 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.AppMeasurement { AppMeasurement(com.google.android.gms.internal.zzchx); }', but not the descriptor class 'com.google.android.gms.internal.zzchx' Note: the configuration keeps the entry point 'com.google.android.gms.measurement.AppMeasurement { void setEventInterceptor(com.google.android.gms.measurement.AppMeasurement$EventInterceptor); }', but not the descriptor class 'com.google.android.gms.measurement.AppMeasurement$EventInterceptor' Note: the configuration keeps the entry point 'com.google.android.gms.measurement.AppMeasurement { void registerOnMeasurementEventListener(com.google.android.gms.measurement.AppMeasurement$OnEventListener); }', but not the descriptor class 'com.google.android.gms.measurement.AppMeasurement$OnEventListener' Note: the configuration keeps the entry point 'com.google.android.gms.measurement.AppMeasurement { void unregisterOnMeasurementEventListener(com.google.android.gms.measurement.AppMeasurement$OnEventListener); }', but not the descriptor class 'com.google.android.gms.measurement.AppMeasurement$OnEventListener' Note: the configuration keeps the entry point 'com.google.android.gms.measurement.AppMeasurement { void registerOnScreenChangeCallback(com.google.android.gms.measurement.AppMeasurement$zza); }', but not the descriptor class 'com.google.android.gms.measurement.AppMeasurement$zza' Note: the configuration keeps the entry point 'com.google.android.gms.measurement.AppMeasurement { void unregisterOnScreenChangeCallback(com.google.android.gms.measurement.AppMeasurement$zza); }', but not the descriptor class 'com.google.android.gms.measurement.AppMeasurement$zza' Note: the configuration keeps the entry point 'com.google.firebase.analytics.FirebaseAnalytics { FirebaseAnalytics(com.google.android.gms.internal.zzchx); }', but not the descriptor class 'com.google.android.gms.internal.zzchx' Note: the configuration keeps the entry point 'com.google.firebase.iid.FirebaseInstanceId { com.google.firebase.iid.FirebaseInstanceId getInstance(com.google.firebase.FirebaseApp); }', but not the descriptor class 'com.google.firebase.FirebaseApp'
Además, también se afectó OkHttp3, ver los errores a continuación:
Note: the configuration keeps the entry point 'okhttp3.Cache$Entry { Cache$Entry(okio.Source); }', but not the descriptor class 'okio.Source' Note: the configuration keeps the entry point 'okhttp3.Cache$Entry { java.util.List readCertificateList(okio.BufferedSource); }', but not the descriptor class 'okio.BufferedSource' Note: the configuration keeps the entry point 'okhttp3.Cache$Entry { void writeCertList(okio.BufferedSink,java.util.List); }', but not the descriptor class 'okio.BufferedSink' Note: the configuration keeps the entry point 'okhttp3.FormBody { void writeTo(okio.BufferedSink); }', but not the descriptor class 'okio.BufferedSink' Note: the configuration keeps the entry point 'okhttp3.FormBody { long writeOrCountBytes(okio.BufferedSink,boolean); }', but not the descriptor class 'okio.BufferedSink' Note: the configuration keeps the entry point 'okhttp3.HttpUrl { void percentDecode(okio.Buffer,java.lang.String,int,int,boolean); }', but not the descriptor class 'okio.Buffer' Note: the configuration keeps the entry point 'okhttp3.HttpUrl { void canonicalize(okio.Buffer,java.lang.String,int,int,java.lang.String,boolean,boolean,boolean,boolean); }', but not the descriptor class 'okio.Buffer' Note: the configuration keeps the entry point 'okhttp3.MultipartBody { MultipartBody(okio.ByteString,okhttp3.MediaType,java.util.List); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.MultipartBody { void writeTo(okio.BufferedSink); }', but not the descriptor class 'okio.BufferedSink' Note: the configuration keeps the entry point 'okhttp3.MultipartBody { long writeOrCountBytes(okio.BufferedSink,boolean); }', but not the descriptor class 'okio.BufferedSink' Note: the configuration keeps the entry point 'okhttp3.RequestBody { void writeTo(okio.BufferedSink); }', but not the descriptor class 'okio.BufferedSink' Note: the configuration keeps the entry point 'okhttp3.RequestBody { okhttp3.RequestBody create(okhttp3.MediaType,okio.ByteString); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.RequestBody$1 { RequestBody$1(okhttp3.MediaType,okio.ByteString); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.RequestBody$1 { void writeTo(okio.BufferedSink); }', but not the descriptor class 'okio.BufferedSink' Note: the configuration keeps the entry point 'okhttp3.RequestBody$2 { void writeTo(okio.BufferedSink); }', but not the descriptor class 'okio.BufferedSink' Note: the configuration keeps the entry point 'okhttp3.RequestBody$3 { void writeTo(okio.BufferedSink); }', but not the descriptor class 'okio.BufferedSink' Note: the configuration keeps the entry point 'okhttp3.ResponseBody { okhttp3.ResponseBody create(okhttp3.MediaType,long,okio.BufferedSource); }', but not the descriptor class 'okio.BufferedSource' Note: the configuration keeps the entry point 'okhttp3.ResponseBody$1 { ResponseBody$1(okhttp3.MediaType,long,okio.BufferedSource); }', but not the descriptor class 'okio.BufferedSource' Note: the configuration keeps the entry point 'okhttp3.ResponseBody$BomAwareReader { ResponseBody$BomAwareReader(okio.BufferedSource,java.nio.charset.Charset); }', but not the descriptor class 'okio.BufferedSource' Note: the configuration keeps the entry point 'okhttp3.WebSocket { boolean send(okio.ByteString); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.WebSocketListener { void onMessage(okhttp3.WebSocket,okio.ByteString); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.Util { boolean discard(okio.Source,int,java.util.concurrent.TimeUnit); }', but not the descriptor class 'okio.Source' Note: the configuration keeps the entry point 'okhttp3.internal.Util { boolean skipAll(okio.Source,int,java.util.concurrent.TimeUnit); }', but not the descriptor class 'okio.Source' Note: the configuration keeps the entry point 'okhttp3.internal.Util { java.nio.charset.Charset bomAwareCharset(okio.BufferedSource,java.nio.charset.Charset); }', but not the descriptor class 'okio.BufferedSource' Note: the configuration keeps the entry point 'okhttp3.internal.cache.CacheInterceptor$1 { CacheInterceptor$1(okhttp3.internal.cache.CacheInterceptor,okio.BufferedSource,okhttp3.internal.cache.CacheRequest,okio.BufferedSink); }', but not the descriptor class 'okio.BufferedSource' Note: the configuration keeps the entry point 'okhttp3.internal.cache.CacheInterceptor$1 { CacheInterceptor$1(okhttp3.internal.cache.CacheInterceptor,okio.BufferedSource,okhttp3.internal.cache.CacheRequest,okio.BufferedSink); }', but not the descriptor class 'okio.BufferedSink' Note: the configuration keeps the entry point 'okhttp3.internal.cache.CacheInterceptor$1 { long read(okio.Buffer,long); }', but not the descriptor class 'okio.Buffer' Note: the configuration keeps the entry point 'okhttp3.internal.cache.DiskLruCache$2 { DiskLruCache$2(okhttp3.internal.cache.DiskLruCache,okio.Sink); }', but not the descriptor class 'okio.Sink' Note: the configuration keeps the entry point 'okhttp3.internal.cache.DiskLruCache$Editor$1 { DiskLruCache$Editor$1(okhttp3.internal.cache.DiskLruCache$Editor,okio.Sink); }', but not the descriptor class 'okio.Sink' Note: the configuration keeps the entry point 'okhttp3.internal.cache.DiskLruCache$Entry { void writeLengths(okio.BufferedSink); }', but not the descriptor class 'okio.BufferedSink' Note: the configuration keeps the entry point 'okhttp3.internal.cache.DiskLruCache$Snapshot { DiskLruCache$Snapshot(okhttp3.internal.cache.DiskLruCache,java.lang.String,long,okio.Source[],long[]); }', but not the descriptor class 'okio.Source' Note: the configuration keeps the entry point 'okhttp3.internal.cache.FaultHidingSink { FaultHidingSink(okio.Sink); }', but not the descriptor class 'okio.Sink' Note: the configuration keeps the entry point 'okhttp3.internal.cache.FaultHidingSink { void write(okio.Buffer,long); }', but not the descriptor class 'okio.Buffer' Note: the configuration keeps the entry point 'okhttp3.internal.cache2.FileOperator { void write(long,okio.Buffer,long); }', but not the descriptor class 'okio.Buffer' Note: the configuration keeps the entry point 'okhttp3.internal.cache2.FileOperator { void read(long,okio.Buffer,long); }', but not the descriptor class 'okio.Buffer' Note: the configuration keeps the entry point 'okhttp3.internal.cache2.Relay { Relay(java.io.RandomAccessFile,okio.Source,long,okio.ByteString,long); }', but not the descriptor class 'okio.Source' Note: the configuration keeps the entry point 'okhttp3.internal.cache2.Relay { Relay(java.io.RandomAccessFile,okio.Source,long,okio.ByteString,long); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.cache2.Relay { okhttp3.internal.cache2.Relay edit(java.io.File,okio.Source,okio.ByteString,long); }', but not the descriptor class 'okio.Source' Note: the configuration keeps the entry point 'okhttp3.internal.cache2.Relay { okhttp3.internal.cache2.Relay edit(java.io.File,okio.Source,okio.ByteString,long); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.cache2.Relay { void writeHeader(okio.ByteString,long,long); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.cache2.Relay$RelaySource { long read(okio.Buffer,long); }', but not the descriptor class 'okio.Buffer' Note: the configuration keeps the entry point 'okhttp3.internal.connection.RealConnection$1 { RealConnection$1(okhttp3.internal.connection.RealConnection,boolean,okio.BufferedSource,okio.BufferedSink,okhttp3.internal.connection.StreamAllocation); }', but not the descriptor class 'okio.BufferedSource' Note: the configuration keeps the entry point 'okhttp3.internal.connection.RealConnection$1 { RealConnection$1(okhttp3.internal.connection.RealConnection,boolean,okio.BufferedSource,okio.BufferedSink,okhttp3.internal.connection.StreamAllocation); }', but not the descriptor class 'okio.BufferedSink' Note: the configuration keeps the entry point 'okhttp3.internal.http.RealResponseBody { RealResponseBody(okhttp3.Headers,okio.BufferedSource); }', but not the descriptor class 'okio.BufferedSource' Note: the configuration keeps the entry point 'okhttp3.internal.http1.Http1Codec { Http1Codec(okhttp3.OkHttpClient,okhttp3.internal.connection.StreamAllocation,okio.BufferedSource,okio.BufferedSink); }', but not the descriptor class 'okio.BufferedSource' Note: the configuration keeps the entry point 'okhttp3.internal.http1.Http1Codec { Http1Codec(okhttp3.OkHttpClient,okhttp3.internal.connection.StreamAllocation,okio.BufferedSource,okio.BufferedSink); }', but not the descriptor class 'okio.BufferedSink' Note: the configuration keeps the entry point 'okhttp3.internal.http1.Http1Codec { void detachTimeout(okio.ForwardingTimeout); }', but not the descriptor class 'okio.ForwardingTimeout' Note: the configuration keeps the entry point 'okhttp3.internal.http1.Http1Codec$ChunkedSink { void write(okio.Buffer,long); }', but not the descriptor class 'okio.Buffer' Note: the configuration keeps the entry point 'okhttp3.internal.http1.Http1Codec$ChunkedSource { long read(okio.Buffer,long); }', but not the descriptor class 'okio.Buffer' Note: the configuration keeps the entry point 'okhttp3.internal.http1.Http1Codec$FixedLengthSink { void write(okio.Buffer,long); }', but not the descriptor class 'okio.Buffer' Note: the configuration keeps the entry point 'okhttp3.internal.http1.Http1Codec$FixedLengthSource { long read(okio.Buffer,long); }', but not the descriptor class 'okio.Buffer' Note: the configuration keeps the entry point 'okhttp3.internal.http1.Http1Codec$UnknownLengthSource { long read(okio.Buffer,long); }', but not the descriptor class 'okio.Buffer' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Header { Header(okio.ByteString,java.lang.String); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Header { Header(okio.ByteString,okio.ByteString); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Header { Header(okio.ByteString,okio.ByteString); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Hpack { okio.ByteString checkLowercase(okio.ByteString); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Hpack$Reader { Hpack$Reader(int,okio.Source); }', but not the descriptor class 'okio.Source' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Hpack$Reader { Hpack$Reader(int,int,okio.Source); }', but not the descriptor class 'okio.Source' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Hpack$Writer { Hpack$Writer(okio.Buffer); }', but not the descriptor class 'okio.Buffer' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Hpack$Writer { Hpack$Writer(int,boolean,okio.Buffer); }', but not the descriptor class 'okio.Buffer' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Hpack$Writer { void writeByteString(okio.ByteString); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Http2Codec$StreamFinishingSource { Http2Codec$StreamFinishingSource(okhttp3.internal.http2.Http2Codec,okio.Source); }', but not the descriptor class 'okio.Source' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Http2Connection { void writeData(int,boolean,okio.Buffer,long); }', but not the descriptor class 'okio.Buffer' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Http2Connection { void pushDataLater(int,okio.BufferedSource,int,boolean); }', but not the descriptor class 'okio.BufferedSource' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Http2Connection$6 { Http2Connection$6(okhttp3.internal.http2.Http2Connection,java.lang.String,java.lang.Object[],int,okio.Buffer,int,boolean); }', but not the descriptor class 'okio.Buffer' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Http2Connection$Builder { okhttp3.internal.http2.Http2Connection$Builder socket(java.net.Socket,java.lang.String,okio.BufferedSource,okio.BufferedSink); }', but not the descriptor class 'okio.BufferedSource' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Http2Connection$Builder { okhttp3.internal.http2.Http2Connection$Builder socket(java.net.Socket,java.lang.String,okio.BufferedSource,okio.BufferedSink); }', but not the descriptor class 'okio.BufferedSink' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Http2Connection$ReaderRunnable { void data(boolean,int,okio.BufferedSource,int); }', but not the descriptor class 'okio.BufferedSource' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Http2Connection$ReaderRunnable { void goAway(int,okhttp3.internal.http2.ErrorCode,okio.ByteString); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Http2Connection$ReaderRunnable { void alternateService(int,java.lang.String,okio.ByteString,java.lang.String,int,long); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Http2Reader { Http2Reader(okio.BufferedSource,boolean); }', but not the descriptor class 'okio.BufferedSource' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Http2Reader { int readMedium(okio.BufferedSource); }', but not the descriptor class 'okio.BufferedSource' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Http2Reader$ContinuationSource { Http2Reader$ContinuationSource(okio.BufferedSource); }', but not the descriptor class 'okio.BufferedSource' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Http2Reader$ContinuationSource { long read(okio.Buffer,long); }', but not the descriptor class 'okio.Buffer' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Http2Reader$Handler { void data(boolean,int,okio.BufferedSource,int); }', but not the descriptor class 'okio.BufferedSource' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Http2Reader$Handler { void goAway(int,okhttp3.internal.http2.ErrorCode,okio.ByteString); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Http2Reader$Handler { void alternateService(int,java.lang.String,okio.ByteString,java.lang.String,int,long); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Http2Stream { void receiveData(okio.BufferedSource,int); }', but not the descriptor class 'okio.BufferedSource' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Http2Stream$FramingSink { void write(okio.Buffer,long); }', but not the descriptor class 'okio.Buffer' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Http2Stream$FramingSource { long read(okio.Buffer,long); }', but not the descriptor class 'okio.Buffer' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Http2Stream$FramingSource { void receive(okio.BufferedSource,long); }', but not the descriptor class 'okio.BufferedSource' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Http2Writer { Http2Writer(okio.BufferedSink,boolean); }', but not the descriptor class 'okio.BufferedSink' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Http2Writer { void data(boolean,int,okio.Buffer,int); }', but not the descriptor class 'okio.Buffer' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Http2Writer { void dataFrame(int,byte,okio.Buffer,int); }', but not the descriptor class 'okio.Buffer' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Http2Writer { void writeMedium(okio.BufferedSink,int); }', but not the descriptor class 'okio.BufferedSink' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Huffman { void encode(okio.ByteString,okio.BufferedSink); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Huffman { void encode(okio.ByteString,okio.BufferedSink); }', but not the descriptor class 'okio.BufferedSink' Note: the configuration keeps the entry point 'okhttp3.internal.http2.Huffman { int encodedLength(okio.ByteString); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.http2.PushObserver { boolean onData(int,okio.BufferedSource,int,boolean); }', but not the descriptor class 'okio.BufferedSource' Note: the configuration keeps the entry point 'okhttp3.internal.http2.PushObserver$1 { boolean onData(int,okio.BufferedSource,int,boolean); }', but not the descriptor class 'okio.BufferedSource' Note: the configuration keeps the entry point 'okhttp3.internal.ws.RealWebSocket { void onReadMessage(okio.ByteString); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.ws.RealWebSocket { void onReadPing(okio.ByteString); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.ws.RealWebSocket { void onReadPong(okio.ByteString); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.ws.RealWebSocket { boolean send(okio.ByteString); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.ws.RealWebSocket { boolean send(okio.ByteString,int); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.ws.RealWebSocket { boolean pong(okio.ByteString); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.ws.RealWebSocket$Close { RealWebSocket$Close(int,okio.ByteString,long); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.ws.RealWebSocket$Message { RealWebSocket$Message(int,okio.ByteString); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.ws.RealWebSocket$Streams { RealWebSocket$Streams(boolean,okio.BufferedSource,okio.BufferedSink); }', but not the descriptor class 'okio.BufferedSource' Note: the configuration keeps the entry point 'okhttp3.internal.ws.RealWebSocket$Streams { RealWebSocket$Streams(boolean,okio.BufferedSource,okio.BufferedSink); }', but not the descriptor class 'okio.BufferedSink' Note: the configuration keeps the entry point 'okhttp3.internal.ws.WebSocketReader { WebSocketReader(boolean,okio.BufferedSource,okhttp3.internal.ws.WebSocketReader$FrameCallback); }', but not the descriptor class 'okio.BufferedSource' Note: the configuration keeps the entry point 'okhttp3.internal.ws.WebSocketReader { void readMessage(okio.Buffer); }', but not the descriptor class 'okio.Buffer' Note: the configuration keeps the entry point 'okhttp3.internal.ws.WebSocketReader$FrameCallback { void onReadMessage(okio.ByteString); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.ws.WebSocketReader$FrameCallback { void onReadPing(okio.ByteString); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.ws.WebSocketReader$FrameCallback { void onReadPong(okio.ByteString); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.ws.WebSocketWriter { WebSocketWriter(boolean,okio.BufferedSink,java.util.Random); }', but not the descriptor class 'okio.BufferedSink' Note: the configuration keeps the entry point 'okhttp3.internal.ws.WebSocketWriter { void writePing(okio.ByteString); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.ws.WebSocketWriter { void writePong(okio.ByteString); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.ws.WebSocketWriter { void writeClose(int,okio.ByteString); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.ws.WebSocketWriter { void writeControlFrameSynchronized(int,okio.ByteString); }', but not the descriptor class 'okio.ByteString' Note: the configuration keeps the entry point 'okhttp3.internal.ws.WebSocketWriter$FrameSink { void write(okio.Buffer,long); }', but not the descriptor class 'okio.Buffer'
más información:
dependencies { classpath 'com.android.tools.build:gradle:2.3.3' classpath 'com.google.gms:google-services:3.0.0' classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.4' }
ext.COMPILE_SDK_VERSION = 25 ext.BUILD_TOOLS_VERSION = "26.0.0"
- OkHttp PublicKey pinning en Android
- React Native & okhttp en Android - Establecer User-Agent
- "Return response.body (). String ()" está vacío con okhttp3
- OkHttp código de estado de respuesta en el método onFailure
- Subida de imagen usando okHttp
- ¿Cómo puedo hacer peticiones simultáneas más rápido con Retrofit / OkHttp?
- Falló el socket OkHttp3: EMFILE (Demasiados archivos abiertos)
- Retrofit: el servidor devuelve tanto ETag como Cache-Control: max-age = 60. ¿No debería utilizarse la memoria caché si se solicita <60s?
Parece que el Android Firebase SDK v11.0.0 está condenado, el Android Firebase SDK v11.0.1 lo arregló sin ningún cambio adicional.
Es posible que desee comprobar este manual de Proguard Resolución de problemas donde se observó que para las advertencias encontradas, the configuration keeps the entry point
… but not the descriptor class
:
Su configuración contiene una opción
-keep
para conservar el método (o campo) dado, pero no la opción-keep
para la clase dada que es un tipo de argumento o un tipo de retorno en el descriptor del método. Usted puede entonces desear guardar la clase también. De lo contrario, ProGuard ofuscará su nombre, cambiando así la firma del método. El método podría entonces ser no identificable como un punto de entrada. Puede conservar automáticamente tales clases de descriptor con el modificador de opción-keep
includeescriptorclasses (-keep, includedescriptorclasses …). Puede desactivar estas notas especificando la opción-dontnote
.
Para obtener información adicional, estas publicaciones de SO también pueden ayudar:
- Proguard: no se puede encontrar la clase referenciada
- Proguard no resuelve referencias a clases
En resumen, puede intentar agregar estas dos líneas al archivo de configuración de Proguard:
-keep class com.google.android.gms.** -dontwarn com.google.android.gms.**
- ¿Podemos desactivar "chatty" en logcat?
- Se requiere la autenticación de Google con un servidor de back-end