You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android App带原生库打包为App Bundle报错但APK正常该如何修复

问题原因
  1. App Bundle默认的架构分发逻辑和普通APK完全不同:普通APK会将所有配置的ABI架构so库全量打包,而App Bundle默认开启按ABI拆分,Google Play向用户分发时只会下发用户设备对应架构的so文件。Vitamio作为多年未更新的老旧库,没有采用系统标准的System.loadLibrary()加载逻辑,内部自行实现了so扫描、解压、加载逻辑,多数版本会强制遍历所有预设ABI目录,只要有一个目录找不到对应so就会抛出错误,哪怕当前设备适配的so实际存在也会加载失败。
  2. 旧版Vitamio普遍存在架构适配不全的问题:绝大多数公开的Vitamio版本仅提供了armeabi(32位ARMv5)架构的so库,未适配armeabi-v7a、arm64-v8a等新架构。如果你的项目中其他第三方库包含了新架构的so,App Bundle构建时会自动生成所有出现过的架构的单独分发包,而新架构包中没有Vitamio的对应so,分发到新架构设备时就会出现加载失败。
  3. 你之前修改的enableSplit = false是普通APK多ABI拆分的专属配置,对App Bundle的架构拆分逻辑完全不生效,因此无法解决问题。
修复方案
  • 方案1:修改App Bundle的架构拆分配置,仅保留Vitamio支持的ABI。在app模块的build.gradle文件的android代码块中添加如下配置:
android {
    // 原有其他配置不变
    bundle {
        abi {
            // 关闭ABI拆分,全量打包所有架构so,和普通APK逻辑一致
            enableSplit = false
            // 如果需要精准控制保留的架构,也可以开启拆分后仅保留支持的架构,示例如下:
            // enableSplit = true
            // include "armeabi", "armeabi-v7a"
        }
    }
}
  • 方案2:补全所有目标架构的Vitamio so库。如果能获取到Vitamio对应arm64-v8a、x86等你需要支持的架构的编译产物,将so文件对应放入jniLibs目录下的对应架构子目录中,保证每个架构目录下都有完整的Vitamio so文件即可。
  • 方案3:强制开启so解压逻辑。App Bundle默认开启extractNativeLibs = false配置优化安装包体积,部分老旧so无法适配这种页对齐直接加载的逻辑,可以在AndroidManifest.xml的application节点添加如下属性:
android:extractNativeLibs="true"

安装时会把所有so解压到应用私有目录,适配Vitamio的自定义加载逻辑。

  • 方案4(长期最优):替换Vitamio为当前仍在维护的主流播放库,比如ExoPlayer、ijkplayer等,从根源规避老旧无人维护库的兼容性问题。

内容的提问来源于stack exchange,提问作者moster67

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:48:03