Proguard - Не удается найти общий суперкласс [com / google / android / gms / d / kl] - PullRequest
0 голосов
/ 29 мая 2018

Мне не удается создать сборку релиза.Внезапно 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 исправляет ошибку.К сожалению, я не могу сделать это навсегда из проекта.

Пожалуйста, помогите мне определить причину проблемы.Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 31 мая 2018

Наконец мне удалось исправить ошибку.Поскольку я не эксперт Proguard, я могу ошибаться, но это обходной путь, который я вижу на данный момент.

Как я уже упоминал в этом вопросе, сеть аудитории Facebook вызывает проблемы со сборкой релиза, и ошибки связаны с этим.с библиотекой службы GMS Play.Согласно комментарию , опубликованному @pedrofsn, сеть аудитории Facebook использует библиотеку рекламных объявлений Google Play.

Я начал искать в документации на ошибку 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 на скриншоте ниже.

enter image description here

Как видно из скриншота, классы библиотеки объявлений Google не могут найти свой ссылочный класс com.google.android.gms.common.internal.zzac.Я предполагаю, что этот класс com.google.android.gms.common.internal.zzac должен принадлежать внутреннему банку зависимости рекламы Google, и что, вероятно, его нет.

Поэтому я вручную добавил зависимость рекламы Google на уровень своего приложения build.gradleкак показано ниже

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

И я вижу, что могу успешно скомпилировать сборку релиза.

0 голосов
/ 25 января 2019

Чтобы это работало, мне пришлось раскомментировать:

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 - это не рекомендуется , поскольку он удаляет неиспользуемый / неиспользуемый код

0 голосов
/ 29 мая 2018

Я исправил понижение 'com.google.firebase: firebase-сообщения: 17.0.0' до 'com.google.firebase: firebase-сообщения: 15.0.2'

...