Android System.loadLibrary останавливается при загрузке собственной библиотеки - PullRequest
0 голосов
/ 19 декабря 2011

У меня есть довольно большой файл общей библиотеки (= 12 мегабайт), который не содержит никакого кода JNI.

При вызове System.loadLibrary("some_file") метод никогда не возвращает и соответствующие выходные данные не генерируются. Кроме того, диспетчер задач Windows сообщает, что экземпляр эмулятора не загружает всю мощность процессора.

У меня есть класс со следующим кодом:

static 
{
    System.out.println("Trying");
    System.loadLibrary("some_file");
    System.out.println("Works");
}

Вот вывод, полученный из LogCat:

I/System.out(534): Trying
D/dalvikvm(534): Trying to load lib /data/data/app/lib/libsome_file.so 0x40643c20

Если я загружаю собственное тестовое приложение, использующее библиотеку libsome_file.so, и запускаю его из оболочки эмулятора, приложение работает.

Существует ли какой-либо метод для отладки того, что делает System.loadLibrary, или у кого-нибудь есть какие-то подсказки, почему System.loadLibrary может никогда не вернуться?

Ответы [ 2 ]

1 голос
/ 03 декабря 2014

Добавление моего решения на случай, если кто-то столкнется с проблемой.Проблема была в некоторых внешних зависимостях (OpenSceneGraph), которые статически загружались в нашу библиотеку.Они висели только на Android 4.0, и он работал нормально 4.2 и выше.

Так что, если у вас есть проблема, поместите __android_log_print в JNI_onLoad вашей библиотеки (если она у вас есть).Если он не вызывается, проверьте все функции, которые можно вызывать статически (будьте осторожны, некоторые из них могут быть скрыты за макросами) и попробуйте удалить их, чтобы узнать, сможете ли вы загрузить библиотеку.

1 голос
/ 23 декабря 2011

Я нашел решение проблемы сам.Я не использовал никаких дополнительных инструментов отладки, но исключил некоторый код, который запускался при загрузке библиотеки.Конкретный код завис, из-за чего зависал и System.loadLibrary.

...