ProGuard: no se puede encontrar la clase referenciada com.google.android.gms.R

Después de algunas actualizaciones en el administrador de Android SDK, bash hacer una firma de apk y obtener esto:

ProGuard: [] Warning: com.google.android.gms.auth.GoogleAuthUtil: can't find referenced class com.google.android.gms.R ProGuard: [] Warning: com.google.android.gms.auth.GoogleAuthUtil: can't find referenced class com.google.android.gms.R$string ... etc. 

Si se establece -dontwarn com.google.android.gms.** comstackr está bien. Pero después de ejecutarlo recibo errores de muchos informes como este (desde muchos dispositivos):

 Caused by: android.view.InflateException: Binary XML file line #32: Error inflating class com.google.android.gms.common.SignInButton 

En todos mis dispositivos todo está bien. Antes de la actualización, no tengo advertencias ProGuard y todo funciona perfectamente. ¿Cómo lo arregla?

Aunque agregar esto al archivo proguard-project.txt funciona, mantiene todas las clases.

 -keep class com.google.android.gms.** { *; } -dontwarn com.google.android.gms.** 

Prefiero esto, lo que hace que el tamaño del archivo apk sea mucho más pequeño:

 -keep public class com.google.android.gms.* { public *; } -dontwarn com.google.android.gms.** 

También tenga en cuenta la notificación actualizada de Google Play Proguard aquí: http://developer.android.com/google/play-services/setup.html#Proguard

 -keep class * extends java.util.ListResourceBundle { protected Object[][] getContents(); } -keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable { public static final *** NULL; } -keepnames @com.google.android.gms.common.annotation.KeepName class * -keepclassmembernames class * { @com.google.android.gms.common.annotation.KeepName *; } -keepnames class * implements android.os.Parcelable { public static final ** CREATOR; } 

Debe ignorar como está comstackndo, pero también necesita mantener la clase para que pueda encontrarla durante el tiempo de ejecución.

Agregue estas dos líneas a su archivo de configuración proguard:

 -keep class com.google.android.gms.** { *; } -dontwarn com.google.android.gms.** 

Si usa proguard, debe mantener algunas clases de GMS (servicios de Google Play). Esperemos que estén anotados con @com.google.android.gms.common.annotation.KeepName .

 # Proguard config for project using GMS -keepnames @com.google.android.gms.common.annotation.KeepName class com.google.android.gms.**, com.google.ads.** -keepclassmembernames class com.google.android.gms.**, com.google.ads.** { @com.google.android.gms.common.annotation.KeepName *; } # Called by introspection -keep class com.google.android.gms.**, com.google.ads.** extends java.util.ListResourceBundle { protected java.lang.Object[][] getContents(); } # This keeps the class name as well as the creator field, because the # "safe plotble" can require them during unmarshalling. -keepnames class com.google.android.gms.**, com.google.ads.** implements android.os.Parcelable { public static final ** CREATOR; } # com.google.android.gms.auth.api.signin.SignInApiOptions$Builder # references these classes but no implementation is provided. -dontnote com.facebook.Session -dontnote com.facebook.FacebookSdk -keepnames class com.facebook.Session {} -keepnames class com.facebook.FacebookSdk {} # android.app.Notification.setLatestEventInfo() was removed in # Marsmallow, but is still referenced (safely) -dontwarn com.google.android.gms.common.GooglePlayServicesUtil 

Me encontré con un problema similar y, finalmente, descubrí que había actualizado el módulo de servicios de Google Play, sin embargo, no había vuelto a agregar el módulo a mi módulo principal en Android Studio. Al agregar eso, resolví mis problemas.