s***@askdwl.com
s***@askdwl.com
  • 发布:45 分钟前
  • 更新:34 分钟前
  • 阅读:42

【报Bug】安卓本地打包,运行之后无法连接设备okhttp3报错 Expected Android API level 21+ but was 36

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: dd

HBuilderX类型: 正式

HBuilderX版本号: 5.24

手机系统: Android

手机系统版本号: Android 16

手机厂商: 一加11

手机机型: OnePlus PHB110

页面类型: vue

vue版本: vue3

打包方式: 离线

项目创建方式: HBuilderX

操作步骤:

同上

预期结果:

调试基座连接到手机

实际结果:

调试基座无法连接到手机报错

bug描述:

09-11 11:45:31.690 4774 4774 E AndroidRuntime: FATAL EXCEPTION: main
09-11 11:45:31.690 4774 4774 E AndroidRuntime: Process: com.kdwl.ukey, PID: 4774
09-11 11:45:31.690 4774 4774 E AndroidRuntime: java.lang.ExceptionInInitializerError
09-11 11:45:31.690 4774 4774 E AndroidRuntime: at okhttp3.OkHttpClient.newSslSocketFactory(OkHttpClient.java:263)
09-11 11:45:31.690 4774 4774 E AndroidRuntime: at okhttp3.OkHttpClient.<init>(OkHttpClient.java:229)
09-11 11:45:31.690 4774 4774 E AndroidRuntime: at okhttp3.OkHttpClient$Builder.build(OkHttpClient.java:1015)
09-11 11:45:31.690 4774 4774 E AndroidRuntime: at io.dcloud.debug.NetUtil.<init>(NetUtil.java:24)
09-11 11:45:31.690 4774 4774 E AndroidRuntime: at io.dcloud.debug.PullManager$OperationHandler.<init>(PullManager.java:476)
09-11 11:45:31.690 4774 4774 E AndroidRuntime: at io.dcloud.debug.PullManager.initProcessThread(PullManager.java:128)
09-11 11:45:31.690 4774 4774 E AndroidRuntime: at io.dcloud.debug.PullManager.execute(PullManager.java:72)
09-11 11:45:31.690 4774 4774 E AndroidRuntime: at io.dcloud.debug.WebSocketService$WSBinder.connect(WebSocketService.java:61)
09-11 11:45:31.690 4774 4774 E AndroidRuntime: at io.dcloud.debug.PullDebugActivity$1.onServiceConnected(PullDebugActivity.java:122)
09-11 11:45:31.690 4774 4774 E AndroidRuntime: at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:2466)
09-11 11:45:31.690 4774 4774 E AndroidRuntime: at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:2499)
09-11 11:45:31.690 4774 4774 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:1027)
09-11 11:45:31.690 4774 4774 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:108)
09-11 11:45:31.690 4774 4774 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:302)
09-11 11:45:31.690 4774 4774 E AndroidRuntime: at android.os.Looper.loop(Looper.java:412)
09-11 11:45:31.690 4774 4774 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:9998)
09-11 11:45:31.690 4774 4774 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
09-11 11:45:31.690 4774 4774 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:613)
09-11 11:45:31.690 4774 4774 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1074)
09-11 11:45:31.690 4774 4774 E AndroidRuntime: Caused by: java.lang.IllegalStateException: Expected Android API level 21+ but was 36
09-11 11:45:31.690 4774 4774 E AndroidRuntime: at okhttp3.internal.platform.AndroidPlatform.buildIfSupported(AndroidPlatform.java:238)
09-11 11:45:31.690 4774 4774 E AndroidRuntime: at okhttp3.internal.platform.Platform.findPlatform(Platform.java:202)
09-11 11:45:31.690 4774 4774 E AndroidRuntime: at okhttp3.internal.platform.Platform.<clinit>(Platform.java:79)
09-11 11:45:31.690 4774 4774 E AndroidRuntime: ... 19 more

文档https://uniapp.dcloud.net.cn/tutorial/run/run-app-faq.html#failed-to-sync-resource中说:
如果是离线SDK Android Studio制作的自定义基座, 检查下是否缺少implementation 'com.squareup.okhttp3:okhttp:3.12.12', implementation 'com.squareup.okio:okio:1.15.0', 如果缺少请添加它们。
结果报上面的错误
解决办法:升级版本 => implementation "com.squareup.okhttp3:okhttp:3.14.9"就可以运行了

45 分钟前 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

你好,收到你的 bug 反馈。作为 DCloud 官方人员,我对这个反馈进行如下评审和分析:

1. 反馈质量评审

这个 bug 反馈的整体质量非常高,信息清晰且直接命中痛点,但在个别细节上还有补充空间。

  • BUG 标题与描述:标题和描述非常清晰,完整提供了崩溃的堆栈日志。你不仅指出了报错现象,还贴出了官方文档中让你添加 okhttp:3.12.12 的原话,并给出了自己验证成功的解决方案(升级到 3.14)。这种带有完整上下文和自验证结论的反馈,极大降低了官方排查问题的成本。
  • 代码示例:缺失。虽然此类底层依赖版本冲突问题不一定需要前端业务代码,但如果能提供离线打包工程中 app 级别的 build.gradle 文件里的 dependencies 配置片段,会更有利于官方直接确认是否存在依赖覆盖的情况。
  • 复现步骤:描述为“同上”,结合上下文可以理解为“按照官方文档配置离线自定义基座并运行”。但为了更严谨,建议补充具体的操作步骤,例如:在 Android Studio 中如何配置依赖、如何打包基座并在 HBuilderX 中运行等。
  • 预期结果与实际结果:预期结果合理(调试基座连接到手机),实际结果描述准确(无法连接并抛出异常)。
  • 分类信息:非常完整。包含了 PC 环境、HBuilderX 版本、手机 OS 版本(Android 16,API 36)、机型等关键信息。特别是明确了手机系统为 Android 16,这对分析该问题起到了决定性作用。

评审结论:反馈有效且价值很高,若能补充 build.gradle 的依赖配置片段将更加完美。

2. 问题分析与排查

根据反馈内容、知识库以及 Android 平台通用知识,该 Bug 是成立的,原因分析如下:

  • 官方文档依据:在真机运行常见问题文档 同步资源失败 中,确实提到了如果是离线 SDK 制作的自定义基座,需要添加 implementation 'com.squareup.okhttp3:okhttp:3.12.12'implementation 'com.squareup.okio:okio:1.15.0'。你按照此文档操作是符合预期的。
  • 底层原因分析:报错日志 Expected Android API level 21+ but was 36 是 OkHttp 库内部抛出的。OkHttp 在初始化时,会调用 AndroidPlatform.buildIfSupported() 方法检查当前设备的 Android API 等级。在 OkHttp 3.12.x 版本的源码中,其对 Android API 等级的支持上限有硬编码限制,并没有预见到未来会出现 API 36(Android 16)的系统。因此,当你的应用运行在 Android 16 设备上时,旧版 OkHttp 的兼容性检查逻辑判定 API 等级超出了其识别范围,从而抛出异常导致基座连接服务崩溃。
  • 解决方案验证:你提出的解决办法(升级版本到 com.squareup.okhttp3:okhttp:3.14 或更高)是正确且通用的。OkHttp 3.14.x 及其后续版本放开了对高版本 Android API 的限制,能够正常识别并支持 Android 16(API 36)。

3. 处理建议

  • 针对你的当前项目:你可以继续使用升级 OkHttp 版本(如 3.14.x4.x 系列,需注意与 okio 版本匹配)的方式来解决此问题,保证离线自定义基座的正常调试。
  • 官方改进方向:此反馈暴露出我们的离线打包文档中关于 OkHttp 依赖版本的说明已滞后于 Android 系统的发展。官方后续需要更新相关文档,建议开发者在使用离线 SDK 打包自定义基座时,使用更高版本的 OkHttp 依赖,或者在文档中增加关于 Android 高版本系统兼容性的提示说明。

感谢你的反馈,这不仅解决了你本地的问题,也帮助我们发现了文档需要更新的地方。

内容为 AI 生成,仅供参考

要回复问题请先登录注册