几个新的Proguard在Multidex项目中发布Google Play服务v10.2.6到v11.0.0 [英] Several new Proguard issues Google Play services v10.2.6 to v11.0.0 in a Multidex project

查看:1402
本文介绍了几个新的Proguard在Multidex项目中发布Google Play服务v10.2.6到v11.0.0的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我更新了我们的应用,以使用最新的Android Firebase SDK v11.0.0( https://firebase.google.com/support/release-notes/android#20170607 ),突然出现了一大堆新的proguard错误,FYI之前一切正常,并且使用了proguard。


$ b $

之前:
$ b

  compile'c​​om.google。 firebase:firebase-messaging:10.2.6'
compile'c​​om.google.android.gms:play-services-vision:10.2.6'


 compile'c​​om。 google.firebase:firebase-messaging:11.0.0'
compile'c​​om.google.android.gms:play-services-vision:11.0.0'

问题在于,它似乎不是一个简单的新的遗漏的proguard条目,但似乎它打破了整个事情,突然其他几个库似乎是受此chang影响e。

这些是与GMS有关的Proguard问题: $ b <$ p $注意:配置保持入口点com.google.android.gms.ads.identifier.AdvertisingIdClient {com.google.android.gms.internal.zzfd zza(android.content.Context, com.google.android.gms.common.zza); }',而不是描述符类'com.google.android.gms.common.zza'
注意:配置保持入口点'com.google.android.gms.flags.impl.FlagProviderImpl {void init (com.google.android.gms.dynamic.IObjectWrapper); }',而不是描述符类'com.google.android.gms.dynamic.IObjectWrapper'
注意:配置保持入口点com.google.android.gms.measurement.AppMeasurement {AppMeasurement(com。 google.android.gms.internal.zzchx); }',而不是描述符类'com.google.android.gms.internal.zzchx'
注意:配置保持入口点com.google.android.gms.measurement.AppMeasurement {void setEventInterceptor(com .google.android.gms.measurement.AppMeasurement $ EventInterceptor); }',而不是描述符类'com.google.android.gms.measurement.AppMeasurement $ EventInterceptor'
注意:配置保持入口点com.google.android.gms.measurement.AppMeasurement {void registerOnMeasurementEventListener (com.google.android.gms.measurement.AppMeasurement $ OnEventListener); }',而不是描述符类'com.google.android.gms.measurement.AppMeasurement $ OnEventListener'
注意:配置保持入口点com.google.android.gms.measurement.AppMeasurement {void unregisterOnMeasurementEventListener (com.google.android.gms.measurement.AppMeasurement $ OnEventListener); }',而不是描述符类'com.google.android.gms.measurement.AppMeasurement $ OnEventListener'
注意:配置保持入口点com.google.android.gms.measurement.AppMeasurement {void registerOnScreenChangeCallback (com.google.android.gms.measurement.AppMeasurement $ ZZA); }',而不是描述符类'com.google.android.gms.measurement.AppMeasurement $ zza'
注意:配置保持入口点com.google.android.gms.measurement.AppMeasurement {void unregisterOnScreenChangeCallback (com.google.android.gms.measurement.AppMeasurement $ ZZA); }',而不是描述符类'com.google.android.gms.measurement.AppMeasurement $ zza'
注意:配置会保留入口点com.google.firebase.analytics.FirebaseAnalytics {FirebaseAnalytics(com。 google.android.gms.internal.zzchx); }',而不是描述符类'com.google.android.gms.internal.zzchx'
注意:配置保持入口点com.google.firebase.iid.FirebaseInstanceId {com.google.firebase。 iid.FirebaseInstanceId getInstance(com.google.firebase.FirebaseApp); }',而不是描述符类com.google.firebase.FirebaseApp'

另外,OkHttp3也受到影响,请参阅下面的错误:

 注意:配置保持入口点'okhttp3。 Cache $ Entry {Cache $ Entry(okio.Source); }',而不是描述符类'okio.Source'
注意:配置保持入口点'okhttp3.Cache $ Entry {java.util.List readCertificateList(okio.BufferedSource); }',而不是描述符类'okio.BufferedSource'
注意:配置保持入口点'okhttp3.Cache $ Entry {void writeCertList(okio.BufferedSink,java.util.List); }',而不是描述符类'okio.BufferedSink'
注意:配置保持入口点'okhttp3.FormBody {void writeTo(okio.BufferedSink); }',而不是描述符类'okio.BufferedSink'
注意:配置保持入口点'okhttp3.FormBody {long writeOrCountBytes(okio.BufferedSink,boolean); }',而不是描述符类'okio.BufferedSink'
注意:配置保持入口点'okhttp3.HttpUrl {void percentDecode(okio.Buffer,java.lang.String,int,int,boolean); }',而不是描述符类'okio.Buffer'
注意:配置保持入口点'okhttp3.HttpUrl {void canonicalize(okio.Buffer,java.lang.String,int,int,java.lang .String,布尔值,布尔,布尔值,布尔值); }',而不是描述符类'okio.Buffer'
注意:配置保持入口点'okhttp3.MultipartBody {MultipartBody(okio.ByteString,okhttp3.MediaType,java.util.List); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.MultipartBody {void writeTo(okio.BufferedSink); }',而不是描述符类'okio.BufferedSink'
注意:配置保持入口点'okhttp3.MultipartBody {long writeOrCountBytes(okio.BufferedSink,boolean); }',而不是描述符类'okio.BufferedSink'
注意:配置保持入口点'okhttp3.RequestBody {void writeTo(okio.BufferedSink); }',而不是描述符类'okio.BufferedSink'
注意:配置保持入口点'okhttp3.RequestBody {okhttp3.RequestBody create(okhttp3.MediaType,okio.ByteString); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.RequestBody $ 1 {RequestBody $ 1(okhttp3.MediaType,okio.ByteString); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.RequestBody $ 1 {void writeTo(okio.BufferedSink); }',而不是描述符类'okio.BufferedSink'
注意:配置保持入口点'okhttp3.RequestBody $ 2 {void writeTo(okio.BufferedSink); }',而不是描述符类'okio.BufferedSink'
注意:配置保持入口点'okhttp3.RequestBody $ 3 {void writeTo(okio.BufferedSink); }',而不是描述符类'okio.BufferedSink'
注意:配置保持入口点'okhttp3.ResponseBody {okhttp3.ResponseBody create(okhttp3.MediaType,long,okio.BufferedSource); }',而不是描述符类'okio.BufferedSource'
注意:配置保持入口点'okhttp3.ResponseBody $ 1 {ResponseBody $ 1(okhttp3.MediaType,long,okio.BufferedSource); }',而不是描述符类'okio.BufferedSource'
注意:配置保持入口点'okhttp3.ResponseBody $ BomAwareReader {ResponseBody $ BomAwareReader(okio.BufferedSource,java.nio.charset.Charset); }',而不是描述符类'okio.BufferedSource'
注意:配置保持入口点'okhttp3.WebSocket {boolean send(okio.ByteString); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.WebSocketListener {void onMessage(okhttp3.WebSocket,okio.ByteString); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.Util {boolean discard(okio.Source,int,java.util.concurrent.TimeUnit); }',而不是描述符类'okio.Source'
注意:配置保持入口点'okhttp3.internal.Util {boolean skipAll(okio.Source,int,java.util.concurrent.TimeUnit); }',而不是描述符类'okio.Source'
注意:配置保持入口点'okhttp3.internal.Util {java.nio.charset.Charset bomAwareCharset(okio.BufferedSource,java.nio.charset .Charset); }',而不是描述符类'okio.BufferedSource'
注意:配置保持入口点'okhttp3.internal.cache.CacheInterceptor $ 1 {CacheInterceptor $ 1(okhttp3.internal.cache.CacheInterceptor,okio.BufferedSource, okhttp3.internal.cache.CacheRequest,okio.BufferedSink); }',而不是描述符类'okio.BufferedSource'
注意:配置保持入口点'okhttp3.internal.cache.CacheInterceptor $ 1 {CacheInterceptor $ 1(okhttp3.internal.cache.CacheInterceptor,okio.BufferedSource, okhttp3.internal.cache.CacheRequest,okio.BufferedSink); }',而不是描述符类'okio.BufferedSink'
注意:配置保持入口点'okhttp3.internal.cache.CacheInterceptor $ 1 {long read(okio.Buffer,long); }',而不是描述符类'okio.Buffer'
注意:配置保持入口点'okhttp3.internal.cache.DiskLruCache $ 2 {DiskLruCache $ 2(okhttp3.internal.cache.DiskLruCache,okio.Sink) ; }',而不是描述符类'okio.Sink'
注意:配置保持入口点'okhttp3.internal.cache.DiskLruCache $编辑器$ 1 {DiskLruCache $编辑器$ 1(okhttp3.internal.cache.DiskLruCache $编辑,okio.Sink); }',而不是描述符类'okio.Sink'
注意:配置保持入口点'okhttp3.internal.cache.DiskLruCache $ Entry {void writeLengths(okio.BufferedSink); }',而不是描述符类'okio.BufferedSink'
注意:配置保持入口点'okhttp3.internal.cache.DiskLruCache $ Snapshot {DiskLruCache $ Snapshot(okhttp3.internal.cache.DiskLruCache,java。 lang.String,长,okio.Source [],长[]); }',而不是描述符类'okio.Source'
注意:配置保持入口点'okhttp3.internal.cache.FaultHidingSink {FaultHidingSink(okio.Sink); }',而不是描述符类'okio.Sink'
注意:配置保持入口点'okhttp3.internal.cache.FaultHidingSink {void write(okio.Buffer,long); }',而不是描述符类'okio.Buffer'
注意:配置保持入口点'okhttp3.internal.cache2.FileOperator {void write(long,okio.Buffer,long); }',而不是描述符类'okio.Buffer'
注意:配置保持入口点'okhttp3.internal.cache2.FileOperator {void read(long,okio.Buffer,long); }',而不是描述符类'okio.Buffer'
注意:配置保持入口点'okhttp3.internal.cache2.Relay {Relay(java.io.RandomAccessFile,okio.Source,long,okio。字节字符串,长); }',而不是描述符类'okio.Source'
注意:配置保持入口点'okhttp3.internal.cache2.Relay {Relay(java.io.RandomAccessFile,okio.Source,long,okio。字节字符串,长); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.cache2.Relay {okhttp3.internal.cache2.Relay edit(java.io.File,okio .Source,okio.ByteString,长); }',而不是描述符类'okio.Source'
注意:配置保持入口点'okhttp3.internal.cache2.Relay {okhttp3.internal.cache2.Relay edit(java.io.File,okio .Source,okio.ByteString,长); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.cache2.Relay {void writeHeader(okio.ByteString,long,long); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.cache2.Relay $ RelaySource {long read(okio.Buffer,long); }',而不是描述符类'okio.Buffer'
注意:配置保持入口点'okhttp3.internal.connection.RealConnection $ 1 {RealConnection $ 1(okhttp3.internal.connection.RealConnection,boolean,okio。 BufferedSource,okio.BufferedSink,okhttp3.internal.connection.StreamAllocation); }',而不是描述符类'okio.BufferedSource'
注意:配置保持入口点'okhttp3.internal.connection.RealConnection $ 1 {RealConnection $ 1(okhttp3.internal.connection.RealConnection,boolean,okio。 BufferedSource,okio.BufferedSink,okhttp3.internal.connection.StreamAllocation); }',而不是描述符类'okio.BufferedSink'
注意:配置保持入口点'okhttp3.internal.http.RealResponseBody {RealResponseBody(okhttp3.Headers,okio.BufferedSource); }',而不是描述符类'okio.BufferedSource'
注意:配置保持入口点'okhttp3.internal.http1.Http1Codec {Http1Codec(okhttp3.OkHttpClient,okhttp3.internal.connection.StreamAllocation,okio。 BufferedSource,okio.BufferedSink); }',而不是描述符类'okio.BufferedSource'
注意:配置保持入口点'okhttp3.internal.http1.Http1Codec {Http1Codec(okhttp3.OkHttpClient,okhttp3.internal.connection.StreamAllocation,okio。 BufferedSource,okio.BufferedSink); }',而不是描述符类'okio.BufferedSink'
注意:配置保持入口点'okhttp3.internal.http1.Http1Codec {void detachTimeout(okio.ForwardingTimeout); }',而不是描述符类'okio.ForwardingTimeout'
注意:配置保持入口点'okhttp3.internal.http1.Http1Codec $ ChunkedSink {void write(okio.Buffer,long); }',而不是描述符类'okio.Buffer'
注意:配置保持入口点'okhttp3.internal.http1.Http1Codec $ ChunkedSource {long read(okio.Buffer,long); }',而不是描述符类'okio.Buffer'
注意:配置保持入口点'okhttp3.internal.http1.Http1Codec $ FixedLengthSink {void write(okio.Buffer,long); }',而不是描述符类'okio.Buffer'
注意:配置保持入口点'okhttp3.internal.http1.Http1Codec $ FixedLengthSource {long read(okio.Buffer,long); }',而不是描述符类'okio.Buffer'
注意:配置保持入口点'okhttp3.internal.http1.Http1Codec $ UnknownLengthSource {long read(okio.Buffer,long); }',而不是描述符类'okio.Buffer'
注意:配置保持入口点'okhttp3.internal.http2.Header {Header(okio.ByteString,java.lang.String); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.http2.Header {Header(okio.ByteString,okio.ByteString); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.http2.Header {Header(okio.ByteString,okio.ByteString); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.http2.Hpack {okio.ByteString checkLowercase(okio.ByteString); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.http2.Hpack $ Reader {Hpack $ Reader(int,okio.Source); }',而不是描述符类'okio.Source'
注意:配置保持入口点'okhttp3.internal.http2.Hpack $ Reader {Hpack $ Reader(int,int,okio.Source); }',而不是描述符类'okio.Source'
注意:配置保持入口点'okhttp3.internal.http2.Hpack $ Writer {Hpack $ Writer(okio.Buffer); }',而不是描述符类'okio.Buffer'
注意:配置保持入口点'okhttp3.internal.http2.Hpack $ Writer {HIP $ Writer(int,boolean,okio.Buffer); }',而不是描述符类'okio.Buffer'
注意:配置保持入口点'okhttp3.internal.http2.Hpack $ Writer {void writeByteString(okio.ByteString); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.http2.Http2Codec $ StreamFinishingSource {Http2Codec $ StreamFinishingSource(okhttp3.internal.http2.Http2Codec,okio。资源); }',而不是描述符类'okio.Source'
注意:配置保持入口点'okhttp3.internal.http2.Http2Connection {void writeData(int,boolean,okio.Buffer,long); }',而不是描述符类'okio.Buffer'
注意:配置保持入口点'okhttp3.internal.http2.Http2Connection {void pushDataLater(int,okio.BufferedSource,int,boolean); }',而不是描述符类'okio.BufferedSource'
注意:配置保持入口点'okhttp3.internal.http2.Http2Connection $ 6 {Http2Connection $ 6(okhttp3.internal.http2.Http2Connection,java.lang。串,java.lang.Object中[],INT,okio.Buffer,整型,布尔值); }',而不是描述符类'okio.Buffer'
注意:配置保持入口点'okhttp3.internal.http2.Http2Connection $ Builder {okhttp3.internal.http2.Http2Connection $ Builder socket(java.net .Socket,java.lang.String中,okio.BufferedSource,okio.BufferedSink); }',而不是描述符类'okio.BufferedSource'
注意:配置保持入口点'okhttp3.internal.http2.Http2Connection $ Builder {okhttp3.internal.http2.Http2Connection $ Builder socket(java.net .Socket,java.lang.String中,okio.BufferedSource,okio.BufferedSink); }',而不是描述符类'okio.BufferedSink'
注意:配置保持入口点'okhttp3.internal.http2.Http2Connection $ ReaderRunnable {void data(boolean,int,okio.BufferedSource,int); }',而不是描述符类'okio.BufferedSource'
注意:配置保持入口点'okhttp3.internal.http2.Http2Connection $ ReaderRunnable {void goAway(int,okhttp3.internal.http2.ErrorCode,okio .ByteString); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.http2.Http2Connection $ ReaderRunnable {void alternateService(int,java.lang.String,okio.ByteString ,java.lang.String中,INT,长); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.http2.Http2Reader {Http2Reader(okio.BufferedSource,boolean); }',而不是描述符类'okio.BufferedSource'
注意:配置保持入口点'okhttp3.internal.http2.Http2Reader {int readMedium(okio.BufferedSource); }',而不是描述符类'okio.BufferedSource'
注意:配置保持入口点'okhttp3.internal.http2.Http2Reader $ ContinuationSource {Http2Reader $ ContinuationSource(okio.BufferedSource); }',而不是描述符类'okio.BufferedSource'
注意:配置保持入口点'okhttp3.internal.http2.Http2Reader $ ContinuationSource {long read(okio.Buffer,long); }',而不是描述符类'okio.Buffer'
注意:配置保持入口点'okhttp3.internal.http2.Http2Reader $ Handler {void data(boolean,int,okio.BufferedSource,int); }',而不是描述符类'okio.BufferedSource'
注意:配置保持入口点'okhttp3.internal.http2.Http2Reader $ Handler {void goAway(int,okhttp3.internal.http2.ErrorCode,okio .ByteString); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.http2.Http2Reader $ Handler {void alternateService(int,java.lang.String,okio.ByteString ,java.lang.String中,INT,长); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.http2.Http2Stream {void receiveData(okio.BufferedSource,int); }',而不是描述符类'okio.BufferedSource'
注意:配置保持入口点'okhttp3.internal.http2.Http2Stream $ FramingSink {void write(okio.Buffer,long); }',而不是描述符类'okio.Buffer'
注意:配置保持入口点'okhttp3.internal.http2.Http2Stream $ FramingSource {long read(okio.Buffer,long); }',而不是描述符类'okio.Buffer'
注意:配置保持入口点'okhttp3.internal.http2.Http2Stream $ FramingSource {void receive(okio.BufferedSource,long); }',而不是描述符类'okio.BufferedSource'
注意:配置保持入口点'okhttp3.internal.http2.Http2Writer {Http2Writer(okio.BufferedSink,boolean); }',而不是描述符类'okio.BufferedSink'
注意:配置保持入口点'okhttp3.internal.http2.Http2Writer {void data(boolean,int,okio.Buffer,int); }',而不是描述符类'okio.Buffer'
注意:配置保持入口点'okhttp3.internal.http2.Http2Writer {void dataFrame(int,byte,okio.Buffer,int); }',而不是描述符类'okio.Buffer'
注意:配置保持入口点'okhttp3.internal.http2.Http2Writer {void writeMedium(okio.BufferedSink,int); }',而不是描述符类'okio.BufferedSink'
注意:配置保持入口点'okhttp3.internal.http2.Huffman {void encode(okio.ByteString,okio.BufferedSink); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.http2.Huffman {void encode(okio.ByteString,okio.BufferedSink); }',而不是描述符类'okio.BufferedSink'
注意:配置保持入口点'okhttp3.internal.http2.Huffman {int encodedLength(okio.ByteString); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.http2.PushObserver {boolean onData(int,okio.BufferedSource,int,boolean); }',而不是描述符类'okio.BufferedSource'
注意:配置保持入口点'okhttp3.internal.http2.PushObserver $ {boolean onData(int,okio.BufferedSource,int,boolean); }',而不是描述符类'okio.BufferedSource'
注意:配置保持入口点'okhttp3.internal.ws.RealWebSocket {void onReadMessage(okio.ByteString); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.ws.RealWebSocket {void onReadPing(okio.ByteString); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.ws.RealWebSocket {void onReadPong(okio.ByteString); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.ws.RealWebSocket {boolean send(okio.ByteString); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.ws.RealWebSocket {boolean send(okio.ByteString,int); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.ws.RealWebSocket {boolean pong(okio.ByteString); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.ws.RealWebSocket $ Close {RealWebSocket $ Close(int,okio.ByteString,long); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.ws.RealWebSocket $ Message {RealWebSocket $ Message(int,okio.ByteString); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.ws.RealWebSocket $ Streams {RealWebSocket $ Streams(boolean,okio.BufferedSource,okio.BufferedSink) ; }',而不是描述符类'okio.BufferedSource'
注意:配置保持入口点'okhttp3.internal.ws.RealWebSocket $ Streams {RealWebSocket $ Streams(boolean,okio.BufferedSource,okio.BufferedSink) ; }',而不是描述符类'okio.BufferedSink'
注意:配置保持入口点'okhttp3.internal.ws.WebSocketReader {WebSocketReader(boolean,okio.BufferedSource,okhttp3.internal.ws.WebSocketReader $ FrameCallback); }',而不是描述符类'okio.BufferedSource'
注意:配置保持入口点'okhttp3.internal.ws.WebSocketReader {void readMessage(okio.Buffer); }',而不是描述符类'okio.Buffer'
注意:配置保持入口点'okhttp3.internal.ws.WebSocketReader $ FrameCallback {void onReadMessage(okio.ByteString); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.ws.WebSocketReader $ FrameCallback {void onReadPing(okio.ByteString); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.ws.WebSocketReader $ FrameCallback {void onReadPong(okio.ByteString); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.ws.WebSocketWriter {WebSocketWriter(boolean,okio.BufferedSink,java.util.Random); }',而不是描述符类'okio.BufferedSink'
注意:配置保持入口点'okhttp3.internal.ws.WebSocketWriter {void writePing(okio.ByteString); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.ws.WebSocketWriter {void writePong(okio.ByteString); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.ws.WebSocketWriter {void writeClose(int,okio.ByteString); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.ws.WebSocketWriter {void writeControlFrameSynchronized(int,okio.ByteString); }',而不是描述符类'okio.ByteString'
注意:配置保持入口点'okhttp3.internal.ws.WebSocketWriter $ FrameSink {void write(okio.Buffer,long); }',而不是描述符类'okio.Buffer'

更多信息:



依赖关系{
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

Android Firebase SDK v11.0.1 修正了它,没有任何额外的变化。


I updated our app to use the most recent Android Firebase SDK v11.0.0 (https://firebase.google.com/support/release-notes/android#20170607) and out of the suddenly we bunch of new proguard errors appear, FYI everything was working well before with proguard.

Before:

compile 'com.google.firebase:firebase-messaging:10.2.6'
compile 'com.google.android.gms:play-services-vision:10.2.6'

After:

compile 'com.google.firebase:firebase-messaging:11.0.0'
compile 'com.google.android.gms:play-services-vision:11.0.0'

The issue is that it doesn't seem to be a simple new missing proguard entry, but it seems that it broke the whole thing, suddenly several other libraries appeared to be affected by this change.

These are the Proguard issues related to the 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'

additionally, also OkHttp3 was affected, see the errors below:

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'

more info:

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"

解决方案

It seems that the Android Firebase SDK v11.0.0 is doomed, the Android Firebase SDK v11.0.1 fixed it without any extra change.

这篇关于几个新的Proguard在Multidex项目中发布Google Play服务v10.2.6到v11.0.0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆