【发布时间】:2017-09-06 21:32:54
【问题描述】:
我很难使用 proguard 编译客户的应用程序(我在正确的文件夹中安装了最新版本的 proguard)。 --edit--: 我没有使用最新版本,因为安装了多个副本并且构建脚本没有使用正确的。
我创建了一个proguard.cfg 文件,可以解决大部分编译错误。 该应用针对最新的 android SDK (8) 并将 minSdk 设置为 21。
还有2个编译错误:
#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
在 stackoverflow 上,在 java 上,他们通过向 Gradle 添加一些东西来解决问题。在 Xamarin 上......你不能。
通过在 proguard 文件中添加 dontwarn 指令,我能够忽略 2 个警告。
然后它几乎可以编译、部署和运行。
几乎所有应用程序都运行良好。
除了:
- 谷歌身份验证,崩溃
- facebook 身份验证,崩溃
- 谷歌位置(保险丝)崩溃。
崩溃是由于缺少方法引起的。已被 proguard 删除的方法。
对于脸书:
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;"
对于谷歌位置(保险丝):
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 服务的预览版。没有运气。 知道如何解决这些错误吗?
** 编辑 1 ** 使用 cmets 中 John Douglas 的链接,以及来自 eugen 的答案中的链接,以及详细的诊断版本,在修复错误 2 小时后,proguard 文件终于可以在 Facebook 和 Google SDK 中正常工作了!
太棒了!
【问题讨论】:
-
您需要确保保留这些物品。我有一个关于这个主题的博客:jon-douglas.com/2017/07/20/proguard-notes你基本上需要确保你
-keep这些项目被proguard删除。请参阅有关此的文档:guardsquare.com/en/proguard/manual/troubleshooting(搜索“NoSuchMethodException”)
标签: android xamarin facebook-android-sdk google-signin google-location-services