Xamarin Android求助:无法找到libhprt_printer_model.so文件
兄弟,我看你踩进这个找不到SO库的坑里了,之前我帮不少开发者解决过类似问题,给你几个针对性的排查方向,应该能搞定:
先确认SO文件的架构和设备匹配
从错误日志能看出来,你的应用跑在arm64-v8a架构的设备/模拟器上,但系统在/data/app/.../lib/arm64目录里找不到libhprt_printer_model.so。你先去项目的src/main/jniLibs目录看看,是不是有arm64-v8a文件夹,而且里面确实放了对应的SO文件?
如果没有arm64版本的SO,要么找厂商要对应架构的库,要么在app的build.gradle里指定只支持你有的架构,比如只兼容armeabi-v7a:android { defaultConfig { ndk { abiFilters 'armeabi-v7a' } } }这样系统就不会去arm64目录找库了,arm64设备也能兼容加载armeabi-v7a的版本。
检查SO文件的放置路径是否正确
要是你手动添加的SO,必须放在src/main/jniLibs/[对应架构]/下面,比如armeabi-v7a的SO就放src/main/jniLibs/armeabi-v7a/libhprt_printer_model.so。
如果你是通过jar包引入的,得注意有些jar包里的SO目录结构可能不对——比如有的jar把SO放在lib/[架构]/下,这时候你需要在build.gradle里配置让Android Studio识别这个路径:android { sourceSets { main { jniLibs.srcDirs = ['libs'] // 假设jar解压后SO在libs目录下 } } }jar包引入建议手动提取SO文件
直接嵌入jar包有时候会出问题,因为Android Studio不一定能自动把jar里的SO解压到正确目录。你可以把jar包解压,把里面的SO文件单独提出来放到jniLibs对应的架构文件夹里,再把jar作为依赖引入,这样更稳妥。清理缓存后重新构建项目
有时候IDE的缓存会搞事情,先点一下Build > Clean Project,再执行Build > Rebuild Project,重新运行应用说不定就解决了。检查模拟器的ABI设置
如果你用的是模拟器,看看是不是不小心选了arm64架构,但项目里只有其他架构的SO。可以改成armeabi-v7a的模拟器试试,或者按照第一点的方法配置abiFilters。
内容的提问来源于stack exchange,提问作者user7485282

