Как бороться с UnsatisfiedLinkError?

Я разрабатываю базовое приложение SIP для совершения и приема звонков. Для этой цели я провел анализ проекта с открытым исходным кодом Sipdroid. . в дополнение к этому я сделал это приложение для поддержки кодека g729. приложение работает нормально, но когда я изменил имя пакета приложения, я получаю сообщение об ошибке с этим новым кодеком. В то время как с другими кодеками приложение работает нормально. вот мой лог-код ошибки. Здесь я прикрепил свои файлы Java
G729.java
Codec.java
Codecs.java
g729_jni.cpp

06-28 08:12:29.633: E/AndroidRuntime(712): java.lang.UnsatisfiedLinkError: open
06-28 08:12:29.633: E/AndroidRuntime(712):  at org.sipchat.codecs.G729.open(Native Method)
06-28 08:12:29.633: E/AndroidRuntime(712):  at org.sipchat.codecs.G729.init(G729.java:48)
06-28 08:12:29.633: E/AndroidRuntime(712):  at org.sipchat.codecs.Codecs$CodecSettings.onPreferenceTreeClick(Codecs.java:368)
06-28 08:12:29.633: E/AndroidRuntime(712):  at android.preference.Preference.performClick(Preference.java:820)
06-28 08:12:29.633: E/AndroidRuntime(712):  at android.preference.PreferenceScreen.onItemClick(PreferenceScreen.java:190)
06-28 08:12:29.633: E/AndroidRuntime(712):  at android.widget.AdapterView.performItemClick(AdapterView.java:284)
06-28 08:12:29.633: E/AndroidRuntime(712):  at android.widget.ListView.performItemClick(ListView.java:3513)
06-28 08:12:29.633: E/AndroidRuntime(712):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812)
06-28 08:12:29.633: E/AndroidRuntime(712):  at android.os.Handler.handleCallback(Handler.java:587)
06-28 08:12:29.633: E/AndroidRuntime(712):  at android.os.Handler.dispatchMessage(Handler.java:92)
06-28 08:12:29.633: E/AndroidRuntime(712):  at android.os.Looper.loop(Looper.java:123)
06-28 08:12:29.633: E/AndroidRuntime(712):  at android.app.ActivityThread.main(ActivityThread.java:3683)
06-28 08:12:29.633: E/AndroidRuntime(712):  at java.lang.reflect.Method.invokeNative(Native Method)
06-28 08:12:29.633: E/AndroidRuntime(712):  at java.lang.reflect.Method.invoke(Method.java:507)
06-28 08:12:29.633: E/AndroidRuntime(712):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-28 08:12:29.633: E/AndroidRuntime(712):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-28 08:12:29.633: E/AndroidRuntime(712):  at dalvik.system.NativeStart.main(Native Method)

У меня есть файл .so для поддержки кодека g729, но после изменения имени пакета этот файл .so не работает. Поскольку этот файл .so создан с использованием другого имени пакета. поэтому у меня должен быть исходный файл, и мне нужно снова его скомпилировать, чтобы он заработал. как это сделать?

если у кого-нибудь есть идея об этом, пожалуйста, дайте мне некоторое предложение об этой ошибке. как бороться с этой ошибкой?
Спасибо


person Juned    schedule 28.06.2012    source источник
comment
Имя нативной функции должно совпадать с полным именем package.class класса, методом которого она является. Однако приложение может содержать пакеты, не соответствующие общему имени пакета приложения.   -  person Chris Stratton    schedule 13.07.2012
comment
да, после изменения имени пакета в файле компоновщика ошибка исчезла. это была строка, которая вызывала ошибку const char *kInterfacePath = "org/sipdroid/pjlib/g729";   -  person Juned    schedule 25.09.2012


Ответы (1)


Поскольку я столкнулся с той же проблемой... она не соответствует вашему кодеку JNi или что-то еще с вашим фактическим кодом Java.

person G M Ramesh    schedule 25.09.2012
comment
да, спасибо, на самом деле этот кодек был создан с использованием другого имени пакета по сравнению с текущим именем пакета. После изменения имени пакета ошибка исчезла. это строка, которую я изменил в соответствии со своими требованиями. const char *kInterfacePath = "org/sipdroid/pjlib/g729"; - person Juned; 25.09.2012
comment
Я хочу создать кодек g729 для своего приложения с другим именем пакета. Вы имеете какое-либо представление об этом? - person Juned; 25.09.2012
comment
да, я был знаком с csipsimple ... но для sipdroid я понятия не имею, как создать тот же кодек .... для csipsimple у меня была встроенная ОС Linux для сборки кодека G729. - person G M Ramesh; 25.09.2012
comment
да, в Csipsimple они внедрили кодек G729, но в исходном коде этого проекта я не смог найти файл компоновщика кодека G729 (g729_jni.cpp). Тем временем я создал файл .so кодека g729, но проблема в том, что он работает только на устройствах с поддержкой armeabi-v7a. Я хочу создать кодек, который поддерживает все версии. - person Juned; 25.09.2012
comment
Насколько мне известно, я не думаю, что он поддерживает все версии, поскольку производители устройств меняли стек аудиооборудования, когда у них были разные версии ОС Android... Это отличается от компании к компании... - person G M Ramesh; 25.09.2012
comment
Нет, возможно, я успешно добавил кодек g729 в ​​Sipdroid, и он работает как в архитектуре armeabi, так и в armeabi-v7a, но теперь я хочу создать файл so с другим именем пакета, см. эта ссылка - person Juned; 25.09.2012
comment
привет, Джунаид, можешь проверить эту ссылку и помочь мне... stackoverflow.com/questions/12577171/ - person G M Ramesh; 25.09.2012
comment
привет, Джунаид, можешь ли ты проверить следующее и дать мне какое-либо решение: stackoverflow.com/questions/12618790/ - person G M Ramesh; 27.09.2012