在Xamarin Android应用中引用JAR文件出现.so相关错误
Java.Lang.UnsatisfiedLinkError找不到libhdxutil.so的问题 这个问题我之前做Xamarin绑定第三方JAR时碰到过,核心原因是你引用的JAR依赖了libhdxutil.so这个原生NDK库,但Xamarin Android没有正确将其打包到APK中,或者找不到对应的库文件路径。下面是几个经过验证的解决步骤:
第一步:确认原生库的存在与架构匹配
首先检查你获取的JAR包是否附带了libhdxutil.so文件。通常第三方JAR的原生库会放在libs/[CPU架构]/目录下(比如libs/x86/、libs/armeabi-v7a/、libs/arm64-v8a/)。同时要确保你的测试设备/模拟器的CPU架构和.so文件的架构一致——比如你用x86模拟器,就必须要有x86版本的libhdxutil.so,否则肯定会找不到。第二步:在Xamarin项目中正确放置并配置.so文件
在你的Xamarin Android项目根目录创建一个小写的lib文件夹,然后在其下创建对应CPU架构的子目录(比如x86、armeabi-v7a)。将对应的libhdxutil.so文件放入匹配的架构子目录中。之后选中每个.so文件,在Visual Studio的属性面板里设置Build Action为AndroidNativeLibrary——这一步很关键,只有这样Xamarin才会把原生库打包到APK的对应native目录下。第三步:检查Binding Library的配置(如果使用绑定库)
如果你是通过Xamarin Binding Library来引用这个JAR的,需要确保绑定项目的Transforms/Metadata.xml没有错误的配置(比如误删了依赖库的引用)。同时,把libhdxutil.so放到绑定项目的lib/[架构]/目录下,同样设置Build Action为AndroidNativeLibrary。另外确认绑定项目的属性中,Android NDK的路径配置正确。第四步:清理重建项目
缓存有时候会导致奇怪的问题,建议先执行Build -> Clean Solution,然后手动删除项目的bin和obj目录,再重新构建整个解决方案,最后部署到设备上测试。第五步:验证APK是否包含.so文件
可以将生成的APK文件解压,查看lib/[对应架构]/目录下是否存在libhdxutil.so。如果没有,说明前面的步骤哪里出错了,回去重新检查文件路径和Build Action设置。
内容的提问来源于stack exchange,提问作者tRuEsAtM




