在我的Android应用程序中,我遇到了这个崩溃。有人能说出为什么会发生这次事故吗?
日志说:
CL 0x0已经打开了共享库'/system/lib/libABC.so';无法在0x429e5a50中打开
这是否意味着应用尝试使用相同的应用加载.so多次
System.loadLibrary("ABC")
。
可能是什么原因?
答案 0 :(得分:1)
到目前为止,这是理解。
根据Java类加载器,同样的.so不能加载到不同的类中。 在日志消息“共享库'/system/lib/libABC.so'已经由CL 0x0打开;无法在0x429e5a50中打开”CL表示类加载器。
我们可以看到这段安卓代码。这是android代码的路径
<强> /android/dalvik/vm/Native.cpp 强>
在这个源文件中,如果我们从行号335到352观察到这部分代码,我们可以看到引导我们访问此日志消息的代码路径。
pEntry = findSharedLibEntry(pathName)
if (pEntry != NULL) {
if (pEntry->classLoader != classLoader) {
LOGW("Shared lib '%s' already opened by CL %p; can't open in %p",
pathName, pEntry->classLoader, classLoader);
return false;
}
if (verbose) {
LOGD("Shared lib '%s' already loaded in same CL %p",
pathName, classLoader);
}
if (!checkOnLoadResult(pEntry))
return false;
return true;
}
所以在这段代码中,如果你看到,如果两个不同的类在尝试加载相同的库,那么我们可以看到下面的代码部分被执行了。
if (pEntry->classLoader != classLoader) {
LOGW("Shared lib '%s' already opened by CL %p; can't open in %p",
pathName, pEntry->classLoader, classLoader);
return false;
}
那就是我们遇到崩溃的地方。
感谢我的一位朋友提供这些信息。 我很感激是否进行了任何编辑以添加有价值的信息。
干杯!!