【问题】
勾选 QQ 登录 / QQ 分享后,离线 SDK 会打入腾讯 OpenSDK:
open_sdk_3.5.17.3_r75955a58_lite.jar
该 JAR 把 native 库放在 assets(无 .so 后缀):
- assets/libwbsafeedit
- assets/libwbsafeedit_64
- assets/libwbsafeedit_x86
- assets/libwbsafeedit_x86_64
运行时拷到应用私有 files/ 再 System.load(),例如:
/data/user/0/<包名>/files/libwbsafeedit_64.so
files/ 默认可写。Android 17 Safer Native DCL 要求:targetSdkVersion >= 37 时,通过 System.load() 加载的 .so 必须只读,否则抛 UnsatisfiedLinkError。
vivo 开放平台已对含 QQ 模块的 UniApp 包发出预警(日志里文件名常被识别成 libvbsafeedit_64.so,实际是 libwbsafeedit_64)。公开栈也指向:
com.tencent.connect.auth.AuthDialog → System.load(.../files/libwbsafeedit.so)
【环境】
- 产物:uni-app App-Android(CLI + 离线打包)
- HBuilderX / 离线 SDK:5.24(Android-SDK@5.24.82669_20260813)
- manifest:minSdkVersion 26,targetSdkVersion 34(尚未升到 37)
- 模块:OAuth QQ + Share QQ
- 对照:人脸插件 AP-FaceDetectModule 的 aar 不含上述 assets;去掉 QQ 模块后 APK 中这些文件消失
【预期】
QQ OpenSDK 在 System.load 前将 .so 设为只读(setReadOnly / chmod 0444),或按系统要求打进 APK lib/。请升级内置 QQ SDK(腾讯 OpenSDK 3.5.18+ 已做 16KB 对齐,请同步确认 Android 17 可写 so 问题)。
【实际】
当前 3.5.17.3 仍动态解到 files/ 后加载。targetSdk 34 仅为预警;升到 37 后 QQ 授权弹窗路径会崩溃。业务侧无法修改腾讯 JAR 内加载逻辑。
【复现】
- manifest 勾选 OAuth/Share 的 QQ
- 离线或云打包 Android
- 解压 APK,确认 assets/libwbsafeedit_64 存在
- 安装运行并走 QQ 登录;看 logcat / 应用 files/ 是否出现 libwbsafeedit_64.so
- 参考:https://developer.android.com/about/versions/17/behavior-changes-17#safer-native-dcl
1 个回复
7***@qq.com - 波罗蜜
也收到了vivo的预警,赶紧解决呀