d***@qq.com
d***@qq.com
  • 发布:2026-09-26 22:00
  • 更新:2026-09-26 22:26
  • 阅读:35

【报Bug】uni-cmark / uni-highlight 的 Android .so 未做 16KB 页面对齐,导致无法上架 Google Play

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

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

HBuilderX类型: 正式

HBuilderX版本号: 5.26

手机系统: Android

手机系统版本号: Android 16

手机厂商: 模拟器

手机机型: Android Emulator (API 36)

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:

1、在 uni-app x 项目中引入 uni-ai x,它会依赖 uni-cmark 1.0.1 和 uni-highlight 1.0.2
2、云端打包 Android,打出 AAB
3、上传到 Google Play Console,或用 readelf -l 检查 APK 里的 lib/arm64-v8a/libcmark.so 和 libscopeparser.so

预期结果:

每个 LOAD 段的 p_align 都 ≥ 0x4000(16KB)

实际结果:

p_align = 0x1000,不满足 Google Play 的 16KB 页面要求。HBuilderX 自带的库(libuniappx、libuts-runtime 等)都已经对齐,只有这两个插件的库没有对齐。

bug描述:

HBuilderX 4.81 之后,框架自带的 .so 都已经做了 16KB 对齐。但 uni-ai x 依赖的这两个插件里预编译的库还是 4KB 对齐:

uni-cmark 1.0.1:utssdk/app-android/libs//libcmark.so
uni-highlight 1.0.2:utssdk/app-android/libs/
/libscopeparser.so

这两个库全部 ABI(arm64-v8a、armeabi-v7a、x86、x86_64)的 LOAD 段 p_align 都是 0x1000,而且代码段和数据段在同一个 16KB 页里(例如 libcmark arm64 的 LOAD#2:offset 0x391c0,vaddr 0x3a1c0),不能靠二进制修补解决,只能从源码重新链接。

Google Play 要求面向 Android 15 及以上的应用支持 16KB 页面。请用 NDK r27+ 重新编译,或者加链接参数 -Wl,-z,max-page-size=16384 重新编译,然后发布新版本。谢谢!

2026-09-26 22:00 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

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

感谢这份高质量的 bug 反馈,以下从官方视角对反馈内容做评审,并说明问题成立性。

一、反馈完整性评审

这份反馈属于完成度很高的一类,各要素齐全:

  1. 问题描述:详细且专业。不仅指出了插件名称与版本(uni-cmark 1.0.1、uni-highlight 1.0.2),还给出了 so 文件的具体路径(utssdk/app-android/libs/*/libcmark.so、libscopeparser.so)、ELF 层面的量化证据(所有 ABI 的 LOAD 段 p_align 均为 0x1000),并举例说明代码段与数据段落在同一 16KB 页内(libcmark arm64 的 LOAD#2:offset 0x391c0,vaddr 0x3a1c0),因此无法通过二进制修补解决,只能从源码重新链接。这些信息官方人员可以直接采信,无需二次定位。
  2. 修复建议:明确可执行(NDK r27+ 重新编译,或加链接参数 -Wl,-z,max-page-size=16384),符合业界通行做法。
  3. 复现步骤:清晰可复现——引入 uni-ai x(依赖上述两个插件)→ 云端打包 AAB → 用 readelf -l 检查或上传 Google Play Console 验证。这是打包产物层面的问题,不需要额外的业务代码示例,验证方法(readelf -l)任何人都能独立执行。
  4. 预期/实际结果:预期(p_align ≥ 0x4000)与实际(p_align = 0x1000)对比明确,且与 Google Play 自 2025 年 11 月 1 日起对 targetSdk 35+ 应用强制 16KB 页面大小的政策直接对应,不是误报。
  5. 分类信息:完整(macOS 26.6.2、HBuilderX 5.26 正式版、Android 16 模拟器 API 36、Vue3),版本信息可对齐排查。

无需补充内容,可以直接进入处理流程。

二、bug 是否成立

从官方资料核对:

  • HBuilderX 4.81 版本已适配支持 16KB 内存页面大小,uni-app x 核心功能模块的 so 已完成对齐,这与您观察到的"框架自带库(libuniappx、libuts-runtime 等)已对齐"一致,参考 16KB 适配文档。
  • 官方文档同时说明:部分涉及三方 SDK 的 so 库仍未完全适配,并维护了一份已知未适配清单(如 uni-ad、uni-push、live-player、uni实人认证等模块的 so)。您报告的 libcmark.so、libscopeparser.so 不在该清单中,属于清单之外新发现的遗漏点,反馈具有增量价值。
  • 此前也有类似的个别 so 遗漏案例在持续修复中,例如 canvas 组件 x86_64 的 so 未适配 16KB 的问题(已提测修复),参考 ISSUE 系统;16KB 适配整体工作可参考 ISSUE 系统 与 ISSUE 系统(后者确认 HBuilderX 4.81 已适配并附文档)。

结论:该反馈合理,大概率成立。 由于这两个库是插件内预编译的 so,确实需要官方从源码以新版 NDK/链接参数重新编译并发布插件新版本,用户侧无法通过配置解决。

三、后续处理建议

  1. 请将此反馈通过官方 issue 系统提交:https://issues.dcloud.net.cn/ ,可直接引用本反馈中的插件版本、so 路径、p_align 数据与复现步骤,便于官方快速定位并排期重新编译这两个插件。
  2. 临时规避:若当前急需提交 Google Play,可参考 16KB 适配文档 中对未适配模块的处理思路——提交 Google Play 的包中避免包含未适配 16KB 的 so。如果您的应用暂不依赖 uni-ai x 的 markdown 渲染/代码高亮能力,可先移除相关依赖后重新打包验证;若功能必需,则需等待官方发布对齐后的插件新版本。
  3. 后续可关注 16KB 适配文档 的更新,未适配模块清单会随适配进展持续更新。

再次感谢反馈,这类带量化证据的提交对推进适配工作非常有帮助。

内容为 AI 生成,仅供参考
DCloud_heavensoft

DCloud_heavensoft

收到,我们尽快升级这两个库,然后重新发插件,另外 Uni-AI X 新版本已经是蒸汽模式的了,不知道你是否升级蒸汽模式了?

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