在我的Android应用程序中,我遇到了此崩溃。谁能给出有关为什么发生崩溃的线索?
日志说:
共享lib'/system/lib/libabc.so'已经由Cl 0x0打开;无法在0x429E5A50
中打开
这是否意味着应用程序正在尝试使用。 System.loadLibrary("ABC")
。
可能是什么原因?
到目前为止,这就是理解。
根据Java类加载程序,同样的.So不能在不同的类中加载。在日志消息中" 共享lib'/system/lib/libabc.so'已经由Cl 0x0打开;无法在0x429E5A50 中打开。
我们可以看到Android代码的这一部分。这是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;
}
所以那就是我们撞车的地方。
感谢我的一位朋友提供此信息。感谢是否进行了任何编辑来添加有价值的信息。
欢呼!