我很难让我的客户的应用程序在 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 个警告。然后它几乎可以编译、部署和运行。几乎所有的应用程序都运行良好。
除了:
- Google 身份验证,崩溃
- facebook 身份验证,崩溃
- Google 位置(保险丝)崩溃。
崩溃是由缺少方法引起的。已被 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;"
我也尝试过使用谷歌播放服务的预览版。没运气。知道如何解决这些错误吗?
** 编辑 1 ** 在评论中使用来自 John Douglas 的链接,以及来自 eugen 的答案中的链接,以及详细的诊断版本,在修复错误 2 小时后,proguard 文件终于可以在 Facebook 和 Google SDK 上正常工作!
太棒了!