资讯动态

【错误记录】Flutter 引入友盟 SDK 编译报错 ( ERROR: Missing classes detected while running R8. Please add the mis )

发布时间:2026/9/8 16:55:14 来源:尧图企业网站定制
文章目录前言一、报错信息二、问题分析三、解决方案1、解决方案 一 : 添加混淆规则2、解决方案 二 : 添加 OkHttp 依赖前言Flutter 应用中导入 友盟 SDK ;dependencies:flutter:sdk:flutter # 友盟FlutterSDK:umeng_common_sdk 为公共基础组件(含U-App统计)umeng_apm_sdk 为U-APM性能监控 umeng_common_sdk:^1.3.1umeng_apm_sdk:^2.3.7# 版本冲突说明:umeng_apm_sdk2.x 声明依赖 http^0.13.x,而 package_info_plus10.x 等要求 http^1.x,# 两个大版本区间无交集;参照友盟官方《Flutter接入FAQ》,通过 dependency_overrides 统一 http 版本 # apm 内部仅使用MultipartRequest/MultipartFile,http1.x 完全兼容;dependency_overrides:http:^1.6.0一、报错信息导入 友盟 SDK 后 ,执行flutter build apk --debug命令 , 编译 debug 版本的 apk 安装包 , 编译成功 ;D:\002_Project\001_Flutter\client_terminalflutter build apk--debugFlutter assets will be downloaded from https://storage.flutter-io.cn. Make sure you trust this source!Flutter assets will be downloaded from https://storage.flutter-io.cn. Make sure you trust this source!Running Gradle taskassembleDebug...92.5s √ Built build\app\outputs\flutter-apk\app-debug.apk执行flutter build apk --release命令编译 Android 的 release 版本 apk 安装包 , 报如下错误 :D:\002_Project\001_Flutter\client_terminalflutter build apk--releaseFlutter assets will be downloaded from https://storage.flutter-io.cn. Make sure you trust this source!Flutter assets will be downloaded from https://storage.flutter-io.cn. Make sure you trust this source!Font assetMaterialIcons-Regular.otfwas tree-shaken, reducing it from1645184to5112bytes(99.7% reduction). Tree-shaking can be disabled by providing the --no-tree-shake-icons flag when building your app. ERROR: Missing classes detectedwhilerunning R8. Pleaseaddthe missing classes or apply additional keep rules that are generatedinD:\002_Project\001_Flutter\client_terminal\build\app\outputs\mapping\release\missing_rules.txt. ERROR: R8: Missing class okhttp3.Call(referenced from: void com.efs.sdk.net.NetManager.get(java.lang.String, okhttp3.Callback)and23other contexts)Missing class okhttp3.Callback(referenced from: void com.efs.sdk.net.NetManager.get(java.lang.String, okhttp3.Callback)and3other contexts)Missing class okhttp3.Connection(referenced from: okhttp3.Connection com.efs.sdk.net.OkHttpInterceptor$c.d and3other contexts)Missing class okhttp3.EventListener$Factory(referenced from: void com.efs.sdk.net.NetManager.get(java.lang.String, okhttp3.Callback)and5other contexts)Missing class okhttp3.EventListener(referenced from: okhttp3.EventListener com.efs.sdk.net.OkHttpListener$1.create(okhttp3.Call)and21other contexts)Missing class okhttp3.Handshake(referenced from: void com.efs.sdk.net.OkHttpListener.secureConnectEnd(okhttp3.Call, okhttp3.Handshake))Missing class okhttp3.Headers(referenced from: java.lang.String com.efs.sdk.net.OkHttpInterceptor$b.a(int)and5other contexts)Missing class okhttp3.HttpUrl(referenced from: java.lang.String com.efs.sdk.net.OkHttpInterceptor$b.b()and2other contexts)Missing class okhttp3.Interceptor$Chain(referenced from: okhttp3.Response com.efs.sdk.net.NetManager$1.intercept(okhttp3.Interceptor$Chain)and1other context)Missing class okhttp3.Interceptor(referenced from: void com.efs.sdk.net.NetManager.get(java.lang.String, okhttp3.Callback)and5other contexts)Missing class okhttp3.MediaType(referenced from: void com.efs.sdk.net.NetManager.post(java.lang.String, java.util.Map, okhttp3.Callback)and4other contexts)Missing class okhttp3.OkHttpClient$Builder(referenced from: void com.efs.sdk.net.NetManager.get(java.lang.String, okhttp3.Callback)and3other contexts)Missing class okhttp3.OkHttpClient(referenced from: void com.efs.sdk.net.NetManager.get(java.lang.String, okhttp3.Callback)and3other contexts)Missing class okhttp3.Protocol(referenced from: void com.efs.sdk.net.OkHttpListener.connectEnd(okhttp3.Call, java.net.InetSocketAddress, java.net.Proxy, okhttp3.Protocol)and1other context)Missing class okhttp3.Request$Builder(referenced from: okhttp3.Response com.efs.sdk.net.NetManager$1.intercept(okhttp3.Interceptor$Chain)and4other contexts)Missing class okhttp3.Request(referenced from: okhttp3.Request com.efs.sdk.net.OkHttpInterceptor$b.b and18other contexts)Missing class okhttp3.RequestBody(referenced from: void com.efs.sdk.net.NetManager.post(java.lang.String, java.util.Map, okhttp3.Callback)and4other contexts)Missing class okhttp3.Response$Builder(referenced from: okhttp3.Response com.efs.sdk.net.OkHttpInterceptor.intercept(okhttp3.Interceptor$Chain))Missing class okhttp3.Response(referenced from: okhttp3.Response com.efs.sdk.net.OkHttpInterceptor$c.c and8other contexts)Missing class okhttp3.ResponseBody(referenced from: okhttp3.ResponseBody com.efs.sdk.net.OkHttpInterceptor$a.a and5other contexts)FAILURE: Build failed with an exception. * What went wrong: Execution failedfortask:app:minifyReleaseWithR8.A failure occurredwhileexecuting com.android.build.gradle.internal.tasks.R8Task$R8RunnableCompilation failed to complete * Try:Run with--stacktraceoption to get the stack trace.Run with--infoor--debugoption to getmorelog output.Run with--scanto get full insights.Getmorehelpat https://help.gradle.org. BUILD FAILEDin1m 11s Running Gradle taskassembleRelease...71.5s Gradle task assembleRelease failed withexitcode1二、问题分析这个错误发生在 Android 的 R8 混淆/压缩阶段 ( minifyReleaseWithR8 ) ; R8 在检查代码引用时 , 发现 com.efs.sdk.net 包中的类使用了 okhttp3 的多个类 ( 如 Call、Callback、Request 等 ) , 但项目中没有找到这些 okhttp3 类 , 因此编译失败 ;报错关键信息 :缺失的类 :okhttp3.* ( OkHttp 库 )引用方 :com.efs.sdk.net ( 该包通常属于 友盟 的某个 SDK , 例如 U-APM 或 U-Push )根本原因 :友盟 SDK 依赖了 OkHttp , 但该依赖没有被正确引入到项目中 , 或者在混淆过程中被错误移除 ;对应的报错原因 :未添加 OkHttp 依赖 :友盟 SDK 可能将 OkHttp 声明为 compileOnly 或 provided , 导致编译时不会自动传递依赖 ; 因此 , 你的项目必须手动添加 OkHttp 依赖 ;依赖版本冲突或缺失 :如果项目中同时引入了其他网络库 , 可能发生了依赖冲突 , 导致 OkHttp 被排除或版本不兼容 ;混淆规则不足 :R8 在混淆时会检查所有引用的类 , 如果找不到类就会报错 ; 即使实际运行时不会使用这些类 ( 例如 SDK 内部做了条件判断 ) , 也需要通过混淆规则告诉 R8 忽略缺失的类 ;三、解决方案1、解决方案 一 : 添加混淆规则如果确认 SDK 在运行时不会真正使用这些类 ( 例如 SDK 通过反射调用 , 且仅在特定条件下触发 ) , 可以在 android/app/proguard-rules.pro 中添加以下规则 , 让 R8 忽略缺失的类 :-dontwarn okhttp3.**注意 :此方法只是让编译通过 , 如果运行时真的需要 OkHttp 而没有添加依赖 , 应用可能会崩溃 ; 因此建议优先使用方案一 ;2、解决方案 二 : 添加 OkHttp 依赖添加 OkHttp 依赖 :在 android/app/build.gradle 的 dependencies 块中 , 显式添加 OkHttp :dependencies{// 添加 OkHttp , 版本号请根据项目需要选择 , 建议使用较新稳定版implementationcom.squareup.okhttp3:okhttp:4.12.0// 如果还需要其他 OkHttp 组件 , 如 logging-interceptor , 可一并添加}

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价