1

J'ai du mal à faire compiler l'application de mon client avec proguard sur (j'ai installé la dernière version de proguard dans le bon dossier). --edit--: je n'utilisais pas la dernière version car plusieurs copies étaient installées et le script de construction n'utilisait pas le bon.Proguard et Google SDK/Facebook SDK méthodes manquantes

J'ai créé un fichier proguard.cfg qui résout la plupart des erreurs de compilation. Les cibles d'applications dernier SDK Android (8) et un minSdk fixé à 21.

Il y a 2 des erreurs de compilation à gauche:

#1>PROGUARD : warning : com.google.android.gms.internal.zzx: can't find referenced method 'void addHeader(java.lang.String,java.lang.String)' in program class com.google.android.gms.internal.zzx$zza 
#1>PROGUARD : warning : com.google.android.gms.internal.zzx$zza: can't find referenced method 'void setURI(java.net.URI)' in program class com.google.android.gms.internal.zzx$zza 

sur stackoverflow, sur java, ils résoudre le problème en ajoutant quelque chose à Graddle. Sur Xamarin ... vous ne pouvez pas.

J'ai été capable d'ignorer les 2 avertissements en ajoutant une instruction dontwarn dans le fichier proguard. Il est ensuite compilé, déployé et exécuté presque correctement. Presque toute l'application fonctionne bien.
Sauf:
- Google auth, plantage
- facebook auth, plantage
- emplacement Google (fusible) s'écraser.

Les plantages sont causés par des méthodes manquantes. Méthodes qui ont été supprimées par proguard.

Pour facebook:

NoSuchMethodError: no non-static method"Lcom/facebook/internal/CallbackManagerImpl;.onActivityResult(IILandroid/content/Intent;)Z" 
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x0000c] in <e3048811891c45499b4d89daf4d10667>:0 
at Java.Interop.JniEnvironment+InstanceMethods.GetMethodID (Java.Interop.JniObjectReference type, System.String name, System.String signature) [0x0005b] in <48117e3895d549baa70c8cbd8592b31c>:0 
at Android.Runtime.JNIEnv.GetMethodID (System.IntPtr kls, System.String name, System.String signature) [0x00007] in <758a804725c84b16bcab28b784c87cae>:0 
at Xamarin.Facebook.ICallbackManagerInvoker.OnActivityResult (System.Int32 requestCode, System.Int32 resultCode, Android.Content.Intent data) [0x00015] in <53b39e4821ad43cba06dc6bebd7ae5f1>:0 
at Appname.Droid.Views.Signup.SignInActivity.OnActivityResult 

Pour google auth:

NoSuchMethodError: no non-static method "Lcom/google/android/gms/auth/api/signin/internal/zzc;.silentSignIn(Lcom/google/android/gms/common/api/GoogleApiClient;)Lcom/google/android/gms/common/api/OptionalPendingResult;" 

Pour connaître l'emplacement google (fusible):

NoSuchMethodError: no non-static method "Lcom/google/android/gms/internal/zzary;.requestLocationUpdates(Lcom/google/android/gms/common/api/GoogleApiClient;Lcom/google/android/gms/location/LocationRequest;Lcom/google/android/gms/location/LocationListener;Landroid/os/Looper;)Lcom/google/android/gms/common/api/PendingResult;" 

J'ai aussi tryed avec les nugets aperçu du jeu de google prestations de service. Pas de chance. Une idée de comment résoudre ces erreurs? En utilisant le lien de John Douglas dans les commentaires, et les liens dans la réponse de eugen, et une construction de diagnostic détaillée, après 2 heures d'erreurs de correction, le fichier proguard fonctionne finalement bien pour Facebook et Google SDK!

Ty tellement!

+1

Vous devez vous assurer de conserver ces éléments.J'ai un blog sur ce sujet: http://www.jon-douglas.com/2017/07/20/proguard-notes/ Vous devez vous assurer que vous «gardez» les éléments supprimés par proguard. Voir les docs sur ceci: https://www.guardsquare.com/fr/proguard/manual/troubleshooting (Recherche "NoSuchMethodException") –

Répondre

2

Ceci est config proguard du SDK Facebook pour Android 4.23:

-keepclassmembers class * implements java.io.Serializable { 
    private static final java.io.ObjectStreamField[] serialPersistentFields; 
    private void writeObject(java.io.ObjectOutputStream); 
    private void readObject(java.io.ObjectInputStream); 
    java.lang.Object writeReplace(); 
    java.lang.Object readResolve(); 
} 

Source: facebook-android-sdk on Github

C'est config proguard de Google Play Services 11.2:

# Keep SafeParcelable value, needed for reflection. This is required to support backwards 
# compatibility of some classes. 
-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable { 
    public static final *** NULL; 
} 

# Needed for Parcelable/SafeParcelable classes & their creators to not get renamed, as they are 
# found via reflection. 
-keep class com.google.android.gms.common.internal.ReflectedParcelable 
-keepnames class * implements com.google.android.gms.common.internal.ReflectedParcelable 
-keepclassmembers class * implements android.os.Parcelable { 
    public static final *** CREATOR; 
} 

# Keep the classes/members we need for client functionality. 
-keep @interface android.support.annotation.Keep 
-keep @android.support.annotation.Keep class * 
-keepclasseswithmembers class * { 
    @android.support.annotation.Keep <fields>; 
} 
-keepclasseswithmembers class * { 
    @android.support.annotation.Keep <methods>; 
} 

# Keep the names of classes/members we need for client functionality. 
-keep @interface com.google.android.gms.common.annotation.KeepName 
-keepnames @com.google.android.gms.common.annotation.KeepName class * 
-keepclassmembernames class * { 
    @com.google.android.gms.common.annotation.KeepName *; 
} 

# Keep Dynamite API entry points 
-keep @interface com.google.android.gms.common.util.DynamiteApi 
-keep @com.google.android.gms.common.util.DynamiteApi public class * { 
    public <fields>; 
    public <methods>; 
} 

# Needed when building against pre-Marshmallow SDK. 
-dontwarn android.security.NetworkSecurityPolicy 

# Needed when building against Marshmallow SDK. 
-dontwarn android.app.Notification 

# Protobuf has references not on the Android boot classpath 
-dontwarn sun.misc.Unsafe 
-dontwarn libcore.io.Memory 

# Internal Google annotations for generating Proguard keep rules. 
-dontwarn com.google.android.apps.common.proguard.UsedBy* 

Source: com.google.android.gms:play-services-basement:11.2.0 artefact de Google repo

La configuration de Proguard pour les services Google Play est également décrite dans Set Up Google Play Services> Ajouter des services Google Play à votre projet> Autre. La configuration est un peu différente de ce qui se trouve dans la bibliothèque .aar, essayez celle-ci en premier.

+0

Ty pour les liens. Mais il ne compilera pas avec beaucoup d'erreurs. C'est un peu surprenant cependant. – Softlion

+0

S'il vous plaît signaler ces erreurs dans votre question. –

+0

est facebook-sdk proguard pas fusionné avec le projet proguard? donc nous devons étendre notre proguard manuellement? – batmaci