【错误记录】Flutter 引入友盟 SDK 编译报错 ( ERROR: Missing classes detected while running R8. Please add the mis ) 文章目录前言一、报错信息二、问题分析三、解决方案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 , 可一并添加}

相关新闻

最新新闻

MFC动态圆弧绘制实战:AngleArc接口、坐标转换与双缓冲防闪屏

MFC动态圆弧绘制实战:AngleArc接口、坐标转换与双缓冲防闪屏

简介:MFC动态绘制圆弧的完整实例工程,面向学习Windows编程、MFC框架及GDI绘图的开发者,尤其适合课程设计或交互式绘图入门;压缩包仅81KB,共19个文件,含6个头文件、4个C源文件、Visual Studio解决方案与工程…

2026/9/8 17:30:27
dsh第三方插件加载失败排查:从plugin tree到Windows权限

dsh第三方插件加载失败排查:从plugin tree到Windows权限

1. 先搞明白dsh的插件体系:第三方插件到底插在哪一层 这两年dsh在开发者圈子里冒头很快,尤其是一批玩多智能体工作流的同学,几乎人手一个。但大多数人第一次接触dsh插件时,都跟我当初一样一脸懵:dsh本身已经内置了那么…

2026/9/8 17:30:27
星鸿派WS63V100开发板星闪通信开发实战与避坑指南

星鸿派WS63V100开发板星闪通信开发实战与避坑指南

星鸿派这块板子在圈子里火起来是有原因的——WS63V100加上Hi3863,双芯片方案直接覆盖了星闪从射频到协议栈的完整链路,关键是开源资料确实全公开了,不是那种“开源了个寂寞”的玩法。我拿到板子之后从零开始折腾了一周,把编译环境…

2026/9/8 17:30:27
npx skill add详解:给AI助手安装可复用的技能包

npx skill add详解:给AI助手安装可复用的技能包

最近在做 AI 辅助编码工具链选型的时候,我遇到一个挺有意思的东西: npx skill add dietrichgebert/ponytail 。乍一看像是装个 npm 包,但它不是普通的依赖,而是给 AI 助手装技能。你可能会跟我第一次看到时一样疑惑:…

2026/9/8 17:30:27
硬件时间戳如何突破纳秒级精度:从PTP原理到网卡配置全解析

硬件时间戳如何突破纳秒级精度:从PTP原理到网卡配置全解析

1. 为什么软件时间戳永远摸不到纳秒级的门槛 先讲一个我早年间踩过的坑。那时候做工业相机同步,用的是一块非常普通的千兆网卡,驱动里也号称支持PTP,我在应用层用 clock_gettime 拿时间戳,测出来的同步精度怎么调都在几百微秒量…

2026/9/8 17:30:27
服务器ECC内存错误排查:从uncorr. ecc日志到定位更换DIMM

服务器ECC内存错误排查:从uncorr. ecc日志到定位更换DIMM

先打个预防针:ECC这个缩写在不同场景下完全是几个世界。有人搜它是为了SAP ECC年结,那是ERP里的物料账结账流程,跟硬件没关系;也有人提MBIST ECC,那是芯片测试领域的内建自测试逻辑。而我这篇要聊的,是服务…

2026/9/8 17:25:27