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

Android应用加载/vendor/lib64/libname.so失败求助:找不到库错误

解决Android加载/vendor/lib64/libname.so失败的问题

问题本质

Android系统对/vendor这类系统目录有严格权限管控,普通应用无直接读取、加载该目录下动态库的权限;且自行编译的so不属于系统级库,本就不应放置在/vendor目录(该目录需root权限才能写入,应用无法正常访问)。

可行解决方案

1. 将so放入应用jniLibs目录(推荐方案)

  • 把编译好的libname.so放到项目的app/src/main/jniLibs/arm64-v8a/目录下(对应64位架构,若适配32位设备,需放到armeabi-v7a子目录)。
  • 修改加载代码,仅需指定库名(自动省略前缀lib和后缀.so):
init {
    System.loadLibrary("name")
}

Android系统会自动在应用私有库目录中匹配对应架构的so,无需额外权限,完全符合应用打包规范。

2. 自定义路径加载(需满足权限要求)

若确需从指定路径加载,需确保目标路径为应用私有目录:

  • 先将so文件从assets等位置复制到应用私有目录,比如getFilesDir().absolutePath:
val libFile = File(getFilesDir(), "libname.so")
// 此处补充从assets复制so到libFile的代码
if (libFile.exists()) {
    libFile.setExecutable(true) // 设置可执行权限
    System.load(libFile.absolutePath)
}
  • 绝对不要尝试加载/vendor、/system等系统目录下的自定义so,普通应用无访问权限,即使root设备也会引发兼容性与安全问题。

3. 校验so架构与设备匹配

确保编译的so架构(arm64-v8a/armeabi-v7a等)和测试设备CPU架构一致。可通过adb shell getprop ro.product.cpu.abi查看设备架构,若架构不匹配也会出现库找不到的错误。

4. 检查Manifest配置

Android 10及以上版本,若Manifest中设置了android:extractNativeLibs="false",需确保so放置路径正确,或改为默认值true(默认开启),避免因so未解压导致加载失败。

错误提示java.lang.UnsatisfiedLinkError: dlopen failed: library "/vendor/lib64/libname.so" not found核心原因是应用无权限访问该系统目录,优先采用第一种方案解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 17:22:44