1***@qq.com
1***@qq.com
  • 发布:2026-10-23 10:42
  • 更新:2026-10-23 10:42
  • 阅读:52

【报Bug】Android 32位 V8 8.4.0 运行 1.5~3 小时后固定偏移 UDF 崩溃(libweexjss.so +0x183bca),切 JSC 白屏

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows 11 (10.0.26200)

HBuilderX类型: 正式

HBuilderX版本号: 5.07

手机系统: Android

手机系统版本号: Android 10

手机厂商: 华为

手机机型: 荣耀 C3(BZD-AL00)

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

说明:该崩溃发生在引擎层,与业务代码无关,无法提供最小复现 demo。

相关配置仅涉及 manifest.json:

  "app-plus": {  
    "distribute": {  
      "android": {  
        "jsEngine": "jsc",  
        "abiFilters": ["armeabi-v7a", "arm64-v8a"]  
      }  
    }  
  }  

(崩溃复现时使用的是默认配置,即 V8,未设置 jsEngine;上面的 jsc 仅用于补充试验。)

操作步骤:
  1. 安装 Android 正式 APK(云端打包,版本 1.0.2 / 102)
  2. 打开 App,停留在登录页,不做任何操作,保持屏幕亮着
  3. 持续保持 1.5~3 小时
  4. 观察 :jse 进程 PID 是否变化、页面按钮是否全部无响应

    一天内 4 次复现的时间点:

    • 10-21 21:42(距启动约 3h00m)
    • 10-22 01:17(约 3h35m)
    • 10-22 07:26(约 6h09m)
    • 10-22 08:59(约 1h33m)

预期结果:

App 长时间空闲不应导致 JS 引擎崩溃,界面在任何时候都应可正常操作;引擎异常时也不应出现“页面还在但按钮全部无响应”的状态。

实际结果:

App 运行 1.5~3 小时后:

  • 主进程存活(PID 不变)、界面仍正常渲染,但所有按钮点击无响应(偶发)
  • 另一些时候引擎自动重启后页面能恢复
  • 逻辑层进程 :jse 被重新拉起(PID 变化,RSS 从数百 MB 降回几十 MB)
  • 崩溃前 :jse RSS 约 747 MB(32 位进程)
  • 崩溃时自动生成 app_crash/crash_dump.log,三次 dump 的 PC/LR/寄存器完全一致(见上)

bug描述:

问题概述

Android 32 位(armeabi-v7a)App 在登录页长时间空闲后,逻辑层 JS 引擎(V8 8.4.0)在固定偏移崩溃,导致界面偶发全部不可操作。

环境

  • appid:__UNI__1A57A69(uni-app,Vue 3)

  • HBuilderX 5.07.2026041006,编译器 5.26

  • Android SDK runtime:1.9.9.82680(assets/data/dcloud_control.xml)

  • 打包方式:云端打包(正式包与自定义调试基座均可复现)

  • 设备:荣耀 C3(BZD-AL00),Android 10(EMUI 10.1.0.101C00),armeabi-v7a 32 位,未 root

  • 包名:uni.app.UNI1A57A69

    崩溃现场(3 份 dump 完全一致)

  • 崩溃库:libweexjss.so(V8 8.4.0;含 31 处 v8:: 符号,无 JavaScriptCore/WebKit 特征)

  • PC = 库基址 + 0x183bca(该处指令为 UDF)

  • LR = 库基址 + 0x189731

  • r0 = 1,fault addr = 0,cpsr = 0x800d0030(Thumb)

  • .ARM.exidx 解析:PC 所在函数 0x183bbc(20 字节),调用者 0x1896d8(108 字节)

  • libweexjss.so(armeabi-v7a)md5:006acc751545dca3ed8b7ee7fa5213c4,大小 8420960

  • 该 .so 在正式包与调试基座中 md5 完全相同

    补充试验

    1. manifest 配 app-plus.distribute.android.jsEngine = "v8" 后云端打包,产物与未配置时完全相同(V8 本就是默认)。
    2. 改配 "jsc" 后引擎确实切换(新增 libjsc.so 15.8MB,libweexjss.so 降为 431KB,运行时进程变为 :jse.j),但 App 启动白屏:
      打包后的 app-service.js 含 3 处空值合并运算符 ??,当前 SDK 的 JSC 不支持该语法,编译器未做降级转译。

    想确认

    1. libweexjss.so + 0x183bca(UDF)对应的 V8 函数/断言是什么?是否已知问题?哪个版本修复?
    2. 切到 JSC 是否有 ES5 降级转译配置?还是该 SDK 的 JSC 版本过旧?
    3. 32 位 V8 的堆上限/内存参数有无可配置项或规避建议?
    4. 64 位设备是否有同类问题?换 64 位平板能否规避?
2026-10-23 10:42 负责人:无 分享
已邀请:

要回复问题请先登录或注册