Android Studio运行报UnsatisfiedLinkError找不到libsiftrpixels.so如何解决
libsiftrpixels.so 加载崩溃问题排查方案 该问题为Android运行时加载native库失败,报错信息如下:
dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/-1WyAeKK9WZsqHBHByIMadA==/base.apk", zip file "/data/app/-1WyAeKK9WZsqHBHByIMadA==/split_config.arm64_v8a.apk", zip file "/data/app/-1WyAeKK9WZsqHBHByIMadA==/split_config.en.apk", zip file "/data/app/-1WyAeKK9WZsqHBHByIMadA==/split_config.xhdpi.apk"],nativeLibraryDirectories=[/data/app//lib/arm64, /data/app//base.apk!/lib/arm64-v8a, /data/app//split_config.arm64_v8a.apk!/lib/arm64-v8a, /data/app//split_config.en.apk!/lib/arm64-v8a, /data/app//split_config.xhdpi.apk!/lib/arm64-v8a, /system/lib64]]] couldn't find "libsiftrpixels.so"
报错截图:

排查解决步骤
- 步骤1:确认so文件存在性
检查项目src/main/jniLibs目录下,是否有对应设备架构的libsiftrpixels.so文件,常见架构包括armeabi-v7a、arm64-v8a、x86、x86_64。如果该so是通过第三方aar引入,可解压aar确认内部是否包含对应架构的so。 - 步骤2:检查ABI过滤配置
打开模块级build.gradle文件,查看defaultConfig.ndk.abiFilters配置,确保配置保留的架构列表里,对应架构的so文件是存在的。比如你只配置了arm64-v8a,则必须在jniLibs/arm64-v8a目录下存放对应so文件;如果未配置abiFilters,打包时会纳入所有存在的架构so,只要运行设备对应架构的so缺失就会报错。 - 步骤3:校验so加载逻辑
确认代码中加载so的语句写法正确,应为System.loadLibrary("siftrpixels"),不需要手动加前缀lib和后缀.so,系统会自动补全;同时确认so加载时机不要早于应用安装完成、so解压完毕的节点。 - 步骤4:验证APK打包结果
打包生成APK后,通过Android Studio顶部菜单栏Build -> Analyze APK打开生成的APK,查看lib目录下对应架构文件夹中是否存在libsiftrpixels.so,如果APK内缺失对应so,回查前3步的配置问题。 - 步骤5:特殊场景适配
如果开启了ABI拆分(split)功能,确认对应架构的拆分APK中包含so文件;如果开启了资源压缩或混淆,可在proguard规则中添加对应NDK类的keep规则,同时在build.gradle的packagingOptions中添加jniLibs.keep += "**/libsiftrpixels.so"避免so被误移除。
内容的提问来源于stack exchange,提问作者Raghavendra Kumar
相关产品推荐
相关产品推荐

