升级API至34配置NDK后遇java.lang.UnsatisfiedLinkError问题求助
可能的原因及修复步骤
检查SO文件的ABI匹配性
确认你的libNBioBSP.so是否包含armeabi-v7a和arm64-v8a两种架构版本。如果仅存在其他架构(比如x86),而你通过abiFilters限制了仅支持这两种,就会导致找不到库。
解决方案:将对应架构的libNBioBSP.so放入src/main/jniLibs/armeabi-v7a/和src/main/jniLibs/arm64-v8a/目录下,确保每个指定ABI都有对应的库文件。检查NDK版本兼容性
API 34对应的NDK版本可能与旧版SO文件存在兼容性问题。尝试切换到与API 34兼容的NDK版本(比如NDK 25或更高),同时确保SO文件是用该版本NDK编译的,或者兼容该版本的ABI规范。调整gradle配置中的ABI过滤规则
如果你的设备或依赖的指纹SDK还需要支持其他ABI,可以临时放宽abiFilters范围测试,比如添加x86(如果是模拟器测试),或者确认SDK本身支持的ABI列表后调整过滤规则:ndk { abiFilters "armeabi-v7a", "arm64-v8a", "x86" // 根据实际支持情况调整 }检查SO文件的加载路径和权限
确保SO文件没有被混淆或打包时遗漏。在build.gradle中检查是否开启了jniLibs目录的正确引用:sourceSets { main { jniLibs.srcDirs = ['src/main/jniLibs'] } }另外,Android 11及以上对文件权限更严格,确保APP有读取本地库文件的权限(通常默认已具备,但如果是动态加载外部SO,需处理文件访问权限)。
动态加载库的路径检查
如果你的代码是通过System.loadLibrary("NBioBSP")加载库,确认库名拼写正确(注意大小写,SO文件是libNBioBSP.so,加载时写NBioBSP即可)。如果是动态指定路径加载,需确保路径指向正确的ABI目录下的SO文件。
内容的提问来源于stack exchange,提问作者Sundar Raj

