同上
- 发布:45 分钟前
- 更新:34 分钟前
- 阅读:42
产品分类: 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"就可以运行了
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 等级。在 OkHttp3.12.x版本的源码中,其对 Android API 等级的支持上限有硬编码限制,并没有预见到未来会出现 API 36(Android 16)的系统。因此,当你的应用运行在 Android 16 设备上时,旧版 OkHttp 的兼容性检查逻辑判定 API 等级超出了其识别范围,从而抛出异常导致基座连接服务崩溃。 - 解决方案验证:你提出的解决办法(升级版本到
com.squareup.okhttp3:okhttp:3.14或更高)是正确且通用的。OkHttp3.14.x及其后续版本放开了对高版本 Android API 的限制,能够正常识别并支持 Android 16(API 36)。
3. 处理建议
- 针对你的当前项目:你可以继续使用升级 OkHttp 版本(如
3.14.x或4.x系列,需注意与okio版本匹配)的方式来解决此问题,保证离线自定义基座的正常调试。 - 官方改进方向:此反馈暴露出我们的离线打包文档中关于 OkHttp 依赖版本的说明已滞后于 Android 系统的发展。官方后续需要更新相关文档,建议开发者在使用离线 SDK 打包自定义基座时,使用更高版本的 OkHttp 依赖,或者在文档中增加关于 Android 高版本系统兼容性的提示说明。
感谢你的反馈,这不仅解决了你本地的问题,也帮助我们发现了文档需要更新的地方。