世上本没有路,踩坑的多了就把路填平了。
一、UnsatisfiedLinkError基本介绍
全名 java.lang.UnsatisfiedLinkError官方解释 Throw if the java Virtural Machine cannot find an appropriate native-language definition of method declared native意思就是JVM找不到native method的native实现!
抛出这异常,肯定是你加载SO的姿势不对!
现在App很多功能都是通过集成第三方工具实现的,第三方工具很有可能在SO动态库里实现核心功能(Bugly提供的libBugly.so,能捕获这类C/C++异常!),所以就算你不用NDK开发也一定会跟SO打交道,你确定你加载SO的姿势都对了吗?
二、错误场景分析
1、低级错误——根本木有SO,你加载个球啊!
code System.loadLibrary(Bugly);
libs 空
运行设备 Android ARM设备
运行结果 Crash!java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file “/data/app/com.tencent.bugly.demo-1/base.apk”],nativeLibraryDirectories=[/vendor/lib, /systemb]]] couldn’t find “libBugly.so”
原因分析 apk安装时,系统会把apk中libs目录下armeabi的SO拷贝到应用的私有目录下。所以libs里没有放入SO,运行时肯定找不到SO。
修复方式 添加SO:libs\armeabi\libBugly.so或加载代码注释掉://System.loadLibrary(Bugly) ;
2、进阶错误——根本木有X86的SO,在X86的设备上你加载个球啊!
code System.loadLibrary(Bugly);
libs libs\armeabi\libBugly.so
运行设备 Android X86设备
运行结果 Crash!java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file “/data/app/com.tencent.bugly.demo-1/base.apk”],nativeLibraryDirectories=[/vendor/lib, /systemb]]] couldn’t find “libBugly.so”
原因分