【问题标题】:Proguard - Can't find common super class of [com/google/android/gms/d/kl]Proguard - 找不到 [com/google/android/gms/d/kl] 的通用超类
【发布时间】:2018-05-29 11:23:31
【问题描述】:

我未能创建发布版本。突然 Android Studio 开始抛出以下错误。

Unexpected error while performing partial evaluation:
  Class       = [com/google/android/gms/d/lc]
  Method      = [a(Lcom/google/android/gms/d/kk;Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/google/android/gms/d/lh;Lcom/google/android/gms/d/en;Lcom/google/android/gms/d/lb;)Lcom/google/android/gms/d/kn;]
  Exception   = [java.lang.IllegalArgumentException] (Can't find common super class of [com/google/android/gms/d/kn] (with 1 known super classes) and [java/lang/String] (with 2 known super classes))
Unexpected error while preverifying:
  Class       = [com/google/android/gms/d/lc]
  Method      = [a(Lcom/google/android/gms/d/kk;Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/google/android/gms/d/lh;Lcom/google/android/gms/d/en;Lcom/google/android/gms/d/lb;)Lcom/google/android/gms/d/kn;]
  Exception   = [java.lang.IllegalArgumentException] (Can't find common super class of [com/google/android/gms/d/kn] (with 1 known super classes) and [java/lang/String] (with 2 known super classes))
Warning: Exception while processing task java.io.IOException: java.lang.IllegalArgumentException: Can't find common super class of [com/google/android/gms/d/kn] (with 1 known super classes) and [java/lang/String] (with 2 known super classes)

这是我的 Proguard 配置

-keep public class com.google.android.gms.* { public *; }
-dontwarn com.google.android.gms.**

-keep class com.facebook.ads.** { *; }

这是我项目的 gradle 依赖列表

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    implementation 'com.android.support.constraint:constraint-layout:1.1.0'
    implementation 'com.android.support:design:27.1.1'
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support:cardview-v7:27.1.1'
    implementation 'com.google.firebase:firebase-perf:16.0.0'
    implementation 'com.google.firebase:firebase-config:16.0.0'
    implementation 'com.google.firebase:firebase-core:16.0.0'
    implementation 'com.google.firebase:firebase-messaging:17.0.0'
    implementation 'com.google.android.gms:play-services-analytics:16.0.0'
    implementation 'com.google.android.gms:play-services-drive:15.0.1'
    implementation 'com.google.android.gms:play-services-auth:15.0.1'
    implementation 'com.startapp:inapp-sdk:3.8.4'
    implementation 'com.facebook.android:audience-network-sdk:4.28.2'
    testImplementation 'junit:junit:4.12'
    testImplementation 'org.mockito:mockito-core:2.7.1'
    testImplementation 'org.powermock:powermock-mockito-release-full:1.4.9'   
    implementation('com.crashlytics.sdk.android:crashlytics:2.9.1@aar') {
        transitive = true
    }
}

注意评论 Facebook 受众网络依赖项可修复该错误。不幸的是,我不能从项目中永久地做到这一点。

请帮助我确定问题的原因。提前致谢。

【问题讨论】:

  • 我在更新工作室后也遇到了同样的问题,如果您找到了解决方案,请告诉我。
  • @SilvansSolanki,我已经发布了我的解决方法。请检查它是否对您有帮助。

标签: android proguard android-proguard facebook-audience-network


【解决方案1】:

最后我设法修复了错误。由于我不是 Proguard 专家,所以我可能错了,但这是我目前看到的解决方法。

正如我在问题中提到的,Facebook Audience Network 导致发布版本出现问题,并且错误与 GMS Play Service 库相关联。根据@pedrofsn 发布的comment,Facebook Audience Network 使用 Google Play 服务广告库。

我开始查看 documentation 的错误 Can't find common super class of。它说

您的程序 jar 或库 jar 中的一个类是指一个 输入中缺少的类或接口。警告清单 引用类和缺少的引用类。 可能有几个原因,有自己的解决方案:

正如它所说的警告列出了引用类和缺少的引用类,我决定删除 dontwarn 只是为了查看 Proguard 的警告并更新我的 Proguard 配置如下

-keep public class com.google.android.gms.* { public *; }

-keep class com.facebook.ads.** { *; }

我设法看到了 Proguard 的所有警告,如下图所示。

从截图中我们可以看出,谷歌广告库类找不到它们引用的类com.google.android.gms.common.internal.zzac。我的猜测是这个类 com.google.android.gms.common.internal.zzac 应该属于谷歌广告依赖的内部 jar 并且内部 jar 可能丢失了。

所以我手动将谷歌广告依赖添加到我的应用级别build.gradle,如下所示

implementation 'com.google.android.gms:play-services-ads:15.0.1' 

我看到我可以成功编译发布版本。

【讨论】:

    【解决方案2】:

    我修复了将“com.google.firebase:firebase-messaging:17.0.0”降级为“com.google.firebase:firebase-messaging:15.0.2”的问题

    【讨论】:

    • 我已尝试降级所有依赖项,但没有成功。我在降级依赖项后尝试了使缓存无效并重新启动的选项,但它抛出了同样的错误。
    • 您的项目中是否添加了 Facebook Audience Network 依赖项?
    • 不,我的项目中没有添加 Facebook Audience Network 依赖项。错误显示“找不到 [com/google/android/gms/d/kn] 的通用超类”。 GMS Play Services 特有的问题,也许你有一个使用特定版本的 GMS Play Services 的库。
    • 但删除 Facebook Audience Network 依赖项不会出错,我可以构建发布版本。我的猜测是 Facebook Audience 网络本身正在搞乱特定的 GMS 播放服务。
    • Facebook Audience Network 与播放服务一起编译,看看这个mvnrepository.com/artifact/com.facebook.android/…
    【解决方案3】:

    为此,我必须取消注释:

    buildTypes {
        release {
            //minifyEnabled true
            //shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    

    并将以下内容添加到您的 proguard-rules.pro 文件中:

    -keep class com.google.android.gms.internal.** { *; }
    -keep public class com.google.android.gms.* { public *; }
    -dontwarn com.google.android.gms.**
    

    尽管取消注释 minifyEnabled不推荐,因为它会删除无效/未使用的代码

    【讨论】:

      猜你喜欢
      • 2019-03-16
      • 1970-01-01
      • 2019-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多