ProGuard: ne peut pas trouver la classe référencée com.google.android.gms.R

Après quelques mises à jour dans le gestionnaire SDK Android, j'essaie de signer signé apk et obtenez ceci:

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 le paramètre set -dontwarn com.google.android.gms.** compilation est OK. Mais après la sortie, j'obtiens une erreur de nombreux rapports comme celui-ci (à partir de plusieurs appareils):

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

Sur mes appareils, tout va bien. Avant la mise à jour, je n'ai pas les avertissements ProGuard et tout fonctionne parfaitement. Comment cela fonctionne-t-il?

  • Les problèmes d'analyse de Google après la mise à niveau des services de lecture à 7.5
  • MapFragment ou MapView getMap () renvoie null sur Lollipop
  • Google Play Music API pour Android
  • Application Play Store avec Google Drive sdk affiche toujours la fenêtre contextuelle «Choisir un compte»
  • Utiliser Play Services et AdMob SDK
  • MapFragment in ScrollView
  • La mise à jour des services Google Play du 8.4.0 au 9.2.1 provoque une erreur de synchronisation Gradle
  • Bibliothèque Android Studio Google-play-services
  • 4 Solutions collect form web for “ProGuard: ne peut pas trouver la classe référencée com.google.android.gms.R”

    Bien que l'ajout de ceci au fichier proguard-project.txt fonctionne, il conserve toutes les classes.

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

    Je préfère cela, ce qui rend la taille du fichier apk beaucoup plus petite:

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

    Notez également la notification à jour Google Play Proguard ici: 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; } 

    Vous devez ignorer comme vous compilez, mais vous devez également garder la classe afin qu'elle puisse la trouver pendant l'exécution.

    Ajoutez ces deux lignes à votre fichier de configuration Proguard:

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

    Si vous utilisez Proguard, vous devez suivre certaines classes GMS (Google Play Services). J'espère qu'ils sont annotés avec @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 parcelable" 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 

    J'ai rencontré un problème similaire et j'ai finalement découvert que j'avais mis à jour le module Google Play Services, mais je n'avais pas encore ajouté le module à mon module principal dans Android Studio. En ajoutant cela dans les problèmes résolus.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.