1

私の顧客のアプリケーションをproguardでコンパイルするのは苦労しています(最新のバージョンのproguardを正しいフォルダにインストールしました)。 --edit--:複数のコピーがインストールされていて、ビルドスクリプトが正しいものを使用していないため、私は最新バージョンを使用していませんでした。ProguardとGoogle SDK/Facebook SDKにはメソッドがありません

コンパイルエラーの大部分を解決するproguard.cfgファイルを作成しました。 アプリ目標最新のAndroid SDK(8)とminSdkは2つのコンパイルエラーが残っている21

に設定されている:StackOverflowの上で

#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 

を、Javaの上で、彼らはに何かを追加することで問題を解決Graddle。 Xamarinでは...できません。

proguardファイルにdontwarn命令を追加することで、2つの警告を無視することができました。 それから、コンパイル、デプロイ、実行はほぼ正常です。 ほとんどすべてのアプリが正常に動作します。 - グーグルの認証、
クラッシュ - Googleの位置(ヒューズ)クラッシュ -
をクラッシュ、Facebookの認証を
:除き

クラッシュは、メソッドの欠落が原因です。プロガードによって削除されたメソッド。 Facebookのために

:Googleの認証のために

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 

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;" 

Googleの位置(ヒューズ)の場合:

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;" 

私もGoogle Playでのプレビューnugetsにしようと試みてきましたサービス。運がない。 これらのエラーを解決する方法はありますか?

** EDIT 1 ** コメントの中のコメント、およびeugenからのリンク、および詳細な診断ビルドを使用して、2時間の修正エラーの後で、proguardファイルは最終的にうまくいきますFacebookとGoogle SDKの両方!

タイ

+1

これらのアイテムを確実に保管する必要があります。私はこのトピックに関するブログを持っています:http://www.jon-douglas.com/2017/07/20/proguard-notes/あなたは基本的に、プロガードによって取り除かれているアイテムの '-keep'を保証する必要があります。次のドキュメントを参照してください:https://www.guardsquare.com/en/proguard/manual/troubleshooting(NotSuchMethodExceptionで検索してください) –

答えて

2

これは、Androidの4.23のためのFacebook SDKからProGuardの設定ファイルである:

-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(); 
} 

出典:

# 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* 

出典:com.google.android.gms:play-services-basement:11.2.0アーティファクトをfacebook-android-sdk on Github

これは、GoogleからProGuardの設定ファイルは、サービス11.2プレイですGoogleのレポから

Google PlayサービスのProguardの設定については、Set Up Google Play Services>プロジェクトにGoogle Playサービスを追加>その他をご覧ください。構成は、ライブラリ.aarにあるものとは少し違って見えます。まずこれを試してみてください。

+0

リンクのTy。しかし、それは多くのエラーでコンパイルされません。それは少し驚くべきことだ。 – Softlion

+0

あなたの質問にこれらのエラーを投稿してください。 –

+0

はfacebook-sdk proguardがプロジェクトプロフェアとマージされていませんか?私たちはプロガードを手動で延長する必要がありますか? – batmaci

関連する問題