记录.so load error
2020-02-09 本文已影响0人
誓不言弃
记录.so load error
华为手机输出的错误log:
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.ks.kaishustory-0fXou6bzoislF4TVx3g4EA==/base.apk"],nativeLibraryDirectories=[/data/app/com.ks.kaishustory-0fXou6bzoislF4TVx3g4EA==/lib/arm64, /system/lib64, /system/product/lib64, /hw_product/lib64, /system/product/lib64]]] couldn't find "libmp3lame.so"
at java.lang.Runtime.loadLibrary0(Runtime.java:1067)
at java.lang.Runtime.loadLibrary0(Runtime.java:1007)
at java.lang.System.loadLibrary(System.java:1668)
at com.czt.mp3recorder.Mp3VoiceRecorder.<clinit>(Mp3VoiceRecorder.java:35)
at com.ks.kaishustory.ui.SecondActivity.onCreate(SecondActivity.java:34)
at android.app.Activity.performCreate(Activity.java:8066)
at android.app.Activity.performCreate(Activity.java:8054)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1313)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3733)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3939)
小米手机输出的错误log:
java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib64/libmp3lame.so" needed or dlopened by "/system/lib64/libnativeloader.so" is not accessible for the namespace "classloader-namespace"
at java.lang.Runtime.loadLibrary0(Runtime.java:1016)
at java.lang.System.loadLibrary(System.java:1657)
at com.czt.mp3recorder.Mp3VoiceRecorder.<clinit>(Mp3VoiceRecorder.java:35)
at com.ks.kaishustory.ui.SecondActivity.onCreate(SecondActivity.java:34)
at android.app.Activity.performCreate(Activity.java:7040)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2809)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2931)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
最初使用的是小米手机进行调试的,一直显示需要依赖 libnativeloader.so
,google了一圈 未找到有用信息,被小米的log误导了,以为是androidX 的兼容问题,修改了targetSdkVersion
等都无效,换到华为手机后明显提示libmp3lame.so
的so库加载不到,在 library 的 build.gradle
的 android {}
声明了如下两个加载so的目录后仍然无效:
sourceSets{
main {
jniLibs.srcDirs = ['libs']
}
}
repositories{
flatDir {
dirs 'libs'
}
}
重新梳理了一遍代码 才想起来我只编译生成了 armeabi-v7a
下的so文件,因为该架构下的so库足以兼容市面上的大部分手机,到这里基本就猜测的到,新建的demo工程没有指定apk支持的so abiFilters,添加abiFilters编译通过
ndk {
//设置支持的SO库架构
abiFilters 'armeabi', 'armeabi-v7a'//, 'arm64-v8a'//, 'x86_64',
}