Proguard 因 Google Play 服务库而失败

Posted

技术标签:

【中文标题】Proguard 因 Google Play 服务库而失败【英文标题】:Proguard fails with Google Play Services library 【发布时间】:2014-07-02 02:04:23 【问题描述】:

更新Google Play Services 库后,我无法在启用Proguard 的情况下构建我的包。我的项目minSdkVersion9。我正在使用以下版本的服务库:

android:versionCode="4323030"
android:versionName="4.3.23 (1069729-030)" >

图书馆声明minSdk 也是9

得到错误:

Unexpected error while performing partial evaluation:
Class       = [com/google/android/gms/common/GooglePlayServicesUtil]
Method      = [showErrorDialogFragment(ILandroid/app/Activity;ILandroid/content/DialogInterface$OnCancelListener;)Z]
Exception   = [java.lang.IllegalArgumentException] (Can't find any super classes of [com/google/android/gms/common/ErrorDialogFragment] (not even immediate super class [android/app/DialogFragment]))
java.lang.IllegalArgumentException: Can't find any super classes of [com/google/android/gms/common/ErrorDialogFragment] (not even immediate super class [android/app/DialogFragment])

在我的 proguard 文件中可以找到以下与 gms 相关的内容:

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

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

DialogFragment 是在 API 级别 11 中添加的。这是服务库的故障还是我遗漏了什么?

谢谢。

【问题讨论】:

【参考方案1】:

您应该针对包含缺失类的 API 级别 11 进行构建。库本身可能对旧 API 有回退模式,但 ProGuard 仍需要处理整个应用程序,包括新代码。

【讨论】:

为了快速解决问题,我使用了较旧的地图库,但很可能这是可行的,我只需要正确处理所有即将到来的弃用和 API 更改。

以上是关于Proguard 因 Google Play 服务库而失败的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio 中带有 Proguard 的 Google Play 服务

Google Play 服务和 Firebase 的 ProGuard 问题

Proguard 使用 Google Play 服务库返回错误

Android - proguard 和 google play 服务的应用程序导出错误

更新到 Google Play 服务 11.8.0 后 Proguard 无法正常工作

Google Play Services v23 Proguard 配置