Почему некоторые телефоны на Android заставляют наше приложение генерировать ошибку java.lang.UnsatisfiedLinkError?
Мы'испытываетеjava.lang.UnsatisfiedLinkError
на некоторых телефонах Android, которые используют наше приложение на рынке.
Описание проблемы:
static
{
System.loadLibrary("stlport_shared"); // C++ STL
System.loadLibrary("lib2");
System.loadLibrary("lib3");
}
Вылетает приложение наSystem.loadLibrary()
линии с.java.lang.UnsatisfiedLinkError
java.lang.UnsatisfiedLinkError: Couldn't load stlport_shared from loader dalvik.system.PathClassLoader[dexPath=/data/app/app_id-2.apk,libraryPath=/data/app-lib/app_id-2]: findLibrary returned null
Подход к решению
Мы начали запускать некоторую пользовательскую диагностику на всех наших установках, чтобы проверить, распакованы ли все библиотеки в/data/data/app_id/lib
папка.
PackageManager m = context.getPackageManager();
String s = context.getPackageName();
PackageInfo p;
p = m.getPackageInfo(s, 0);
s = p.applicationInfo.dataDir;
File appDir = new File(s);
long freeSpace = appDir.getFreeSpace();
File[] appDirList = appDir.listFiles();
int numberOfLibFiles = 0;
boolean subFilesLarger0 = true;
for (int i = 0; i < appDirList.length; i++) {
if(appDirList[i].getName().startsWith("lib")) {
File[] subFile = appDirList[i].listFiles(FileFilters.FilterDirs);
numberOfLibFiles = subFile.length;
for (int j = 0; j < subFile.length; j++) {
if(subFile[j].length()