簡體   English   中英

Proguard - 找不到[com / google / android / gms / d / kl]的常見超類

[英]Proguard - Can't find common super class of [com/google/android/gms/d/kl]

我無法創建發布版本。 突然,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受眾網絡依賴關系可修復錯誤。 不幸的是,我不能永久地從項目中做到這一點。

請幫我確定問題的原因。 提前致謝。

最后我設法解決了這個錯誤。 由於我不是Proguard專家,我可能錯了,但這是我目前看到的解決方法。

正如我在問題中提到的,Facebook Audience Network導致發布版本的問題,並且錯誤與GMS Play Service庫相關聯。 根據評論發表@pedrofsn,Facebook的受眾網絡使用谷歌Play業務信息庫。

我開始研究錯誤的文檔 Can't find common super class of 它說

其中一個程序jar或庫jar中的類指的是輸入中缺少的類或接口。 警告列出了引用類和缺少的引用類。 可以有幾個原因,有自己的解決方案:

正如它所說的警告列出了引用類和缺少的引用類(es),我決定刪除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。

因此,我已手動將Google廣告相關性添加到我的應用級build.gradle ,如下所示

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

我看到我可以成功編譯發布版本。

我將'com.google.firebase:firebase-messaging:17.0.0'降級為'com.google.firebase:firebase-messaging:15.0.2'

要做到這一點,我必須取消注釋:

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因為它會刪除死/未使用的代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM