Android Release构建Proguard报错:无法找到指定类与String的共同父类
解决Release构建时Proguard与Google Play Services、Facebook Audience Network的冲突问题
我来帮你排查这个Release构建报错的问题——你遇到的本质是Proguard在混淆过程中无法解析Google Play Services内部类和String的共同父类,而Facebook Audience Network的引入触发了这个冲突,下面是具体的分析和解决办法:
你遇到的报错信息
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 } }
问题原因分析
这个错误的核心是:
- 你项目中Google Play Services的版本不统一(
play-services-analytics是16.0.0,而drive和auth是15.0.1),版本不一致容易导致类解析冲突; - 现有Proguard规则只保留了Google Play Services的public类和成员,但其内部类(比如
com.google.android.gms.d.*这类)被混淆了,导致Proguard无法解析类型关系; - 旧版本的Facebook Audience Network SDK(4.28.2)和你当前的Google Play Services/Firebase版本存在兼容性问题,触发了这个混淆错误。
具体解决方案
1. 统一Google Play Services的版本
把所有Google Play Services依赖升级到同一版本,比如和play-services-analytics一致的16.0.0:
implementation 'com.google.android.gms:play-services-analytics:16.0.0' implementation 'com.google.android.gms:play-services-drive:16.0.0' implementation 'com.google.android.gms:play-services-auth:16.0.0'
Firebase的版本16.x和这个版本是兼容的,无需调整。
2. 优化Proguard规则,覆盖Google Play Services内部类
修改你的Proguard配置,确保保留Google Play Services的所有类(包括内部类),避免混淆时解析出错:
# 保留Google Play Services所有类和成员,包括内部类 -keep class com.google.android.gms.** { *; } -dontwarn com.google.android.gms.** # 保留Facebook Audience Network的类 -keep class com.facebook.ads.** { *; } -dontwarn com.facebook.ads.** # 额外保留Firebase相关类,避免和Google Play Services冲突 -keep class com.google.firebase.** { *; } -dontwarn com.google.firebase.**
原来的规则只保留public类,改为**可以覆盖所有层级的类和内部类。
3. 排除Facebook SDK中冲突的Google Play Services依赖
如果版本统一后还是报错,说明Facebook SDK依赖了旧版本的Google Play Services,强制排除它:
implementation('com.facebook.android:audience-network-sdk:4.28.2') { exclude group: 'com.google.android.gms' }
这样项目会强制使用你指定的Google Play Services版本,避免冲突。
4. 尝试升级Facebook Audience Network SDK版本
你当前用的4.28.2版本比较旧,建议升级到和你的Android Support版本兼容的较新版本(比如5.10.0,注意27.1.1的Support库可以兼容这个版本):
implementation 'com.facebook.android:audience-network-sdk:5.10.0'
升级后如果有新的Proguard要求,可以参考Facebook官方文档调整规则,但通常新版本会更好地兼容新的Google Play Services版本。
完成以上调整后,重新构建Release版本,应该就能解决这个报错了。
内容的提问来源于stack exchange,提问作者Harsh4789
相关产品推荐
相关产品推荐

