开启Proguard后运行时报kotlin.Any内置类未找到错误如何解决?
Proguard开启后出现kotlin.Any找不到崩溃的解决方案
这个问题核心是Kotlin反射依赖的内置类元数据被Proguard处理异常导致,即便配置了全局不混淆不压缩规则也可能触发,可按以下步骤排查修复:
- 第一步:添加Kotlin专属Proguard保留规则,补上你现有规则缺失的反射元数据、核心内置类保留逻辑,规则如下:
# 保留Kotlin全量基础类与反射实现 -keep class kotlin.** { *; } -keep interface kotlin.** { *; } -dontwarn kotlin.** # 明确保留Kotlin核心内置类 -keep class kotlin.Any { *; } -keep class kotlin.Unit { *; } -keep class kotlin.Nothing { *; } -keep class kotlin.coroutines.Continuation { *; } -keep class kotlin.reflect.jvm.internal.** { *; } # 保留Kotlin反射依赖的Metadata注解 -keepattributes RuntimeVisibleAnnotations, AnnotationDefault -keep @interface kotlin.Metadata { *; }
- 第二步:校验kotlin-reflect依赖版本与项目全局Kotlin版本完全一致,版本不匹配是高频触发原因。
- 第三步:替换你现有存在兼容问题的全局保留规则,你当前使用的
***通配符在部分Proguard版本中对系统内置类匹配存在漏洞,可将原有的类、接口、注解、枚举的keep规则统一替换为标准写法:
-keep class * { *; }
- 第四步:在模块build.gradle的android配置块中添加packaging规则,避免Kotlin模块元数据被误删:
android { // 其他配置保持不变 packagingOptions { pickFirst 'META-INF/*.kotlin_module' } }
内容的提问来源于stack exchange,提问作者JasonS
相关产品推荐
相关产品推荐

