最近遇到一个error,如下:
E/MscSpeechLog: loadLibrary msc error:java.lang.UnsatisfiedLinkError:
dalvik.system.PathClassLoader[DexPathList[[zip file
"/data/app/com.edt.edtpatient-2/base.apk", zip file
"/data/app/com.edt.edtpatient-2/split_lib_dependencies_apk.apk", zip file
"/data/app/com.edt.edtpatient-2/split_lib_slice_0_apk.apk", zip file
"/data/app/com.edt.edtpatient-2/split_lib_slice_1_apk.apk", zip file
"/data/app/com.edt.edtpatient-2/split_lib_slice_2_apk.apk", zip file
"/data/app/com.edt.edtpatient-2/split_lib_slice_3_apk.apk", zip file
"/data/app/com.edt.edtpatient-2/split_lib_slice_4_apk.apk", zip file
"/data/app/com.edt.edtpatient-2/split_lib_slice_5_apk.apk", zip file
"/data/app/com.edt.edtpatient-2/split_lib_slice_6_apk.apk", zip file
"/data/app/com.edt.edtpatient-2/split_lib_slice_7_apk.apk", zip file
"/data/app/com.edt.edtpatient-2/split_lib_slice_8_apk.apk", zip file
"/data/app/com.edt.edtpatient2/split_lib_slice_9_apk.apk"],nativeLibraryDirec
ories=[/data/app/com.edt.edtpatient-2/lib/arm64, /system/lib64, /vendor/lib64,
/system/vendor/lib64, /product/lib64]]] couldn't find "libmsc.so"
查询相关资料后,检查是否是没有正确识别.so文件,但是之前已经有如下设置
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
最后经过反复检查,是如下原因造成的:
tasks.whenTaskAdded { task ->
if (task.name.contains("lint")
//如果instant run不生效,把clean这行干掉
// ||task.name.equals("clean")
//如果项目中有用到aidl则不可以舍弃这个任务
||task.name.contains("Aidl")
//用不到测试的时候就可以先关闭
||task.name.contains("mockableAndroidJar")
||task.name.contains("UnitTest")
||task.name.contains("AndroidTest")
//用不到NDK和JNI的也关闭掉
|| task.name.contains("Ndk")
|| task.name.contains("Jni")
) {
task.enabled = false
}
}
上面的逻辑中(task.name.contains(“Ndk”)|| task.name.contains(“Jni”))将Ndk和jni已经关闭了,需要将相关代码注释掉就可以了。
注释掉以后就可以正常识别.so文件了。