2014-11-24 2 views
0

Привет Я работаю над собственным приложением Android.Android Не удалось загрузить файл .so.1

Файлы 'abc.so', которые зависят от файла 'xyz.so.1'. Все необходимые файлы доступны в структуре проекта до создания, но «.so.1» не являются частью сгенерированного файла .apk (я проверил файл apk путем распаковки).

Это вызывает «java.lang.UnsatisfiedLinkError» Не удалось загрузить «abc.so.1» из загрузчика dalvik при попытке запустить приложение.

Я не хочу нажимать файл .so.1, так как телефон не укоренен и работает на сборке. Как включить файлы .so.1 как часть APK?

спасибо.

ответ

1

Я думаю, что у вас нет концепции загрузки родных библиотек на Java через JNI.

Сначала вы определяете собственные методы в java и выполняете соответствующую реализацию в native и компилируете его (вам необходимо зарегистрировать собственные методы по 1), следуя соглашению об именах. 2) зарегистрировать собственные методы в jni_onload ... я думаю, вы, должно быть, сделали это, если не проверите http://www.ntu.edu.sg/home/ehchua/programming/android/android_ndk.html)

Затем вы должны загрузить библиотеку, прежде чем любой вызов может быть выполнен на native. Это нужно сделать один раз. Вы можете сделать это в деятельности по определению:

статический {

System.loadLibrary ("mylib.so");

}

Примечание при компиляции библиотеки вы получили название библиотеки, как libXYZ.so, но при загрузке библиотеки в Java «Lib» должны быть опущены, только System.loadLibrary (XYZ.so) Если вы используете NDK, библиотека уже была бы скопирована в проект Java> libs> armeabi, если нет, вам нужно скопировать ваш lib.so

Теперь, если у вас несколько разделяемых библиотек, вы должны загрузить минимум зависимый lib.so, затем второй и т. д., т.е.

Статический {

System.loadLibrary (independent_lib.so); // должен зависеть только от файлов android libs System.loadLibrary (next_dependent_lib1.so); // может зависеть от android libs и independent_lib.so System.loadLibrary (next_dependent_lib2.so); // может зависеть от андроида LIBS, independent_lib.so, next_dependent_lib1.so ..... .... ..

}

Если перемешивать, ВМ не сможет свяжите библиотеки и выбросьте недопустимую ссылку.

Наконец, все это .so s будет частью вашего apk, и оно будет перенесено в системную библиотеку только во время выполнения. Если только его укоренившийся телефон вы не можете извлечь .so. Если вы будете следовать приведенному выше методу, вам не нужно будет нажимать какие-либо .so в систему.Только опираясь на затмение/Cygwin и запустить

Надеются, что это помогает,

С уважением, Shrish

Смежные вопросы