问题描述
我的 uni-app 应用通过 HBuilder 离线打包后上传到 Google Play Console,遇到以下两个互相冲突的错误:
错误1:API 级别要求
您的应用目前的目标 API 级别为 34,但其目标 API 级别不能低于 35,
以确保应用基于最新 API 构建,从而实现更高的安全性和性能
错误2:16KB 页面大小支持
您的应用不支持 16 KB 内存页面大小
这是一个死锁问题:
使用 targetSdkVersion 34 → 绕过 16KB 检测 → 但触发 API 级别过低错误
使用 targetSdkVersion 35 → 满足 API 级别要求 → 但触发 16KB 检测错误
技术分析
- 使用的 SDK 版本
SDK 版本:Android-SDK@4.87.82540_20251128(2025年11月28日)
下载来源:DCloud 官网推荐的正式版链接
AAR 文件:
uniapp-v8-release.aar(24MB)
lib.5plus.base-release.aar(4.8MB)
- 根本原因
通过 file 命令检查 AAR 中的 SO 文件,发现:
$ file libweexcore.so
libweexcore.so: ELF 64-bit LSB shared object, ARM aarch64,
built by NDK r27 (12077973), BuildID[sha1]=08790cf25df42b142c3faaf675ee8dba2e2dde23
问题所在:
SO 文件使用 NDK r27 编译
ELF 段对齐(p_align)为 4KB (2^12),而不是 Google Play 要求的 16KB (2^14)
这是编译时确定的二进制属性,无法通过配置或重新打包修改
- 已尝试的解决方案(均无效)
方案1:配置 16KB 支持属性
<!-- AndroidManifest.xml -->
<property
android:name="android.app.PROPERTY_SUPPORT_16KB_PAGE_SIZE"
android:value="true" />
结果:无效。Google Play 会检查实际的 ELF 段对齐,而不仅仅是声明。
方案2:使用 AGP 8.7.3 的 ZIP 对齐
android {
packaging {
jniLibs {
useLegacyPackaging = true
}
}
}
结果:无效。AGP 只能处理 ZIP 层面的对齐,无法修改已编译的 ELF 段对齐。
方案3:使用 zipalign -P 16 强制重排
zipalign -p -v -P 16 input.apk output_16k_aligned.apk
结果:无效。zipalign 只能改变文件在 APK 中的起始位置,无法修改 SO 文件内部的 ELF 段对齐。
方案4:指定 ndkVersion
android {
ndkVersion "28.0.12433510"
}
结果:无效。ndkVersion 只影响项目自己的 C/C++ 代码编译,对预编译的 AAR 文件无效。
Google Play 的检测机制
Google Play 会解析 SO 文件的 ELF 头,检查 LOAD 段的 p_align 字段:
要求:p_align = 2^14 = 16384 (16KB)
当前:p_align = 2^12 = 4096 (4KB)
这个值是在编译时写入的,需要:
使用 NDK r28+(默认 16KB 对齐)
或在 NDK r27 编译时添加参数:
-Wl,-z,max-page-size=16384
疑问
官网声称的"修复 16KB 模式 Bug"是什么意思?
更新日志提到:"修复 录音功能在某些启用16KB模式的设备无法正常使用的Bug"
这是否意味着 SDK 本身已经支持 16KB?
我验证后发现 SO 文件仍然是 NDK r27 编译,不支持 16KB
是否有支持 16KB 的新版本 SDK?
我下载的是官网推荐的正式版(2025年12月11日)
但实际文件日期是 2025年11月28日
是否有更新的版本?
Alpha 版本是否支持 16KB?
HBuilderX 5.01.2026021122-alpha(2026年02月25日)
这个版本是否已经使用 NDK r28+ 重新编译?
请求
希望官方能够:
确认当前正式版是否支持 16KB
如果不支持,预计何时发布支持 16KB 的版本
提供临时解决方案或建议
环境信息
HBuilder SDK:Android-SDK@4.87.82540_20251128
AGP 版本:8.7.3
Gradle 版本:8.11.1
compileSdkVersion:35
targetSdkVersion:35
buildToolsVersion:35.0.0
感谢官方的支持!
1 个回复
Ask小助手 - Ask社区AI助手
根据知识库内容,针对您遇到的 Google Play 强制要求 targetSdkVersion 35 + 16KB 页面支持问题,以下是官方确认和解决方案:
当前正式版 SDK 16KB 支持状态:
官方已确认的不支持16KB的模块:
临时解决方案:
版本更新计划:
验证建议:
readelf -l libweexcore.so | grep LOAD检查 p_align 值如需进一步技术支持,建议通过官方工单系统提交包含具体 SO 文件检测结果的问题报告。
要回复问题请先登录或注册
公告
更多>相关问题