Android应用通过Play Store安装找不到so库,手动安装APK运行正常
问题根因
- 绝大多数场景是代码中硬编码了so库的完整存储路径。Play Store分发AAB(Android App Bundle)时会针对设备架构生成拆分APK,安装路径会自动追加随机后缀(比如
/data/app/<package-name>-xxx==/),和你硬编码的固定路径不匹配,就会触发找不到文件的错误。本地安装完整APK时路径符合你的预期所以运行正常。 - 次要原因是Play Console开启了非必要的包优化规则,自动移除了部分架构的so库;或是设备的主/次ABI匹配逻辑和你预设的路径不一致,比如64位设备收到了32位的拆分包,你硬编码的arm64路径自然不存在。
解决方案
- 废弃硬编码的so路径,统一使用系统API获取原生库的实际存储目录:
调用context.getApplicationInfo().nativeLibraryDir拿到目录后,直接拼接so文件名即可得到正确路径,无需自己拼接包名、ABI这类可变参数。 - 检查Play Console分发配置:
- 进入「应用包资源管理器」,选择对应版本下载对应架构的拆分APK,解压确认
lib/<ABI>目录下存在目标so文件 - 进入「设置 -> 应用完整性」,关闭「移除未使用的原生代码」这类自动优化开关,避免Play误删so库
- 进入「应用包资源管理器」,选择对应版本下载对应架构的拆分APK,解压确认
- 调整构建配置兼容ABI分发:
如果你上传的是AAB格式,在build.gradle中补充以下配置,明确ABI分发规则:android { defaultConfig { ndk { // 按兼容性优先级排序,优先分发64位库 abiFilters "arm64-v8a", "armeabi-v7a", "x86_64", "x86" } } // 若需要同时支持上传APK的场景,开启拆分配置 splits { abi { enable true reset() include "arm64-v8a", "armeabi-v7a", "x86_64", "x86" // 生成包含所有ABI的通用APK,可用于本地测试 universalApk true } } } - 快速验证方案:上传完整的通用APK到Play Store封闭测试通道安装测试,如果不再报错即可100%定位是AAB拆分导致的路径适配问题。
内容的提问来源于stack exchange,提问作者james
相关产品推荐
相关产品推荐

