Gradle升级至8.1后签名构建缺失类问题求助
Gradle升级至8.x后签名构建缺失类问题
报错信息
Missing class com.google.devtools.build.android.desugar.runtime.ThrowableExtension (referenced from: java.lang.String io.agora.base.internal.Logging.getStackTraceString(java.lang.Throwable) and 18 other contexts) Missing class reactor.blockhound.integration.BlockHoundIntegration (referenced from: reactor.core.scheduler.ReactorBlockHoundIntegration)
已尝试的操作
- 升级Agora SDK至4.2.6
- 更新Android Gradle插件到
com.android.tools.build:gradle:8.2.0 - 升级
org.jetbrains.kotlinx:kotlinx-coroutines-reactor到1.7.1
当前ProGuard规则
-keepclassmembers,allowobfuscation class * { @com.google.gson.annotations.SerializedName <fields>; } -keep,allowobfuscation interface com.google.gson.annotations.SerializedName # for glide -keep public class * implements com.bumptech.glide.module.GlideModule -keep public class * extends com.bumptech.glide.module.AppGlideModule -keep public enum com.bumptech.glide.load.ImageHeaderParser$** { **[] $VALUES; public *; } # for eventbus -keepattributes *Annotation* -keepclassmembers class * { @org.greenrobot.eventbus.Subscribe <methods>; } -keep enum org.greenrobot.eventbus.ThreadMode { *; } # And if you use AsyncExecutor: -keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent { <init>(java.lang.Throwable); } -useuniqueclassmembernames # These options produce useful stacktraces preserving line numbers -renamesourcefileattribute SourceFile -keepattributes SourceFile,LineNumberTable # Pdf viewer -keep class com.shockwave.** -keep class com.media365ltd.doctime.networking.retrofit_latest.** #agora -keep class io.agora.**{*;} # Amazon Chime -keep class com.amazonaws.** { *; }# JSR 305 annotations are for embedding nullability information. -dontwarn javax.annotation.** # A resource is loaded with a relative path so the package of this class must be preserved. -adaptresourcefilenames okhttp3/internal/publicsuffix/PublicSuffixDatabase.gz # Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java. -dontwarn org.codehaus.mojo.animal_sniffer.* # OkHttp platform used only on JVM and when Conscrypt and other security providers are available. -dontwarn okhttp3.internal.platform.** -dontwarn org.conscrypt.** -dontwarn org.bouncycastle.** -dontwarn org.openjsse.** # Adjust -keep class com.adjust.sdk.** { *; } -keep class com.google.android.gms.common.ConnectionResult { int SUCCESS; } -keep class com.google.android.gms.ads.identifier.AdvertisingIdClient { com.google.android.gms.ads.identifier.AdvertisingIdClient$Info getAdvertisingIdInfo(android.content.Context); } -keep class com.google.android.gms.ads.identifier.AdvertisingIdClient$Info { java.lang.String getId(); boolean isLimitAdTrackingEnabled(); } -keep public class com.android.installreferrer.** { *; }
解决方案建议
处理ThrowableExtension缺失问题
这个类属于Android Desugar工具链,Gradle 8.x默认启用R8全面优化模式,容易误删Desugar相关类。在ProGuard规则中添加:
-keep class com.google.devtools.build.android.desugar.runtime.** { *; } -dontwarn com.google.devtools.build.android.desugar.runtime.**
同时检查项目的Desugar配置是否正确,确保启用核心库Desugar:
android { compileOptions { coreLibraryDesugaringEnabled true } } dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' }
处理BlockHoundIntegration缺失问题
BlockHound主要用于调试阶段检测阻塞调用,release构建中一般不需要。可以添加ProGuard规则忽略该类:
-dontwarn reactor.blockhound.integration.** -keep class reactor.blockhound.integration.** { *; }
如果确认项目不需要BlockHound功能,也可以直接从依赖中排除:
configurations.all { exclude group: 'io.projectreactor.tools', module: 'blockhound' }
额外排查点
- 核对Agora SDK 4.2.6的官方文档,确认其对Gradle 8.x的兼容性
- 执行
./gradlew app:dependencies生成依赖树,检查是否存在reactor或Desugar相关的依赖冲突,排除旧版本依赖
内容的提问来源于stack exchange,提问作者Shakib Uz-Zaman
相关产品推荐
相关产品推荐

