2016-03-26 1 views
1

Я пытаюсь реализовать nanomsg в андроиде и я получил Java привязок по этой ссылке: http://niwinz.github.io/jnanomsg/ после этой зависимости
компиляции «jnanomsg: jnanomsg: 0,4 .3 '. Это возвращало мне это солнце/jna/libjnidispatch.so не было найдено.Хочет реализовать nanomsg в андроиде, используя его Java связывания jnanomsg получая java.lang.ExceptionInInitializerError

Через некоторое время я понял, «.so» файл, который требуется для ЮНА отсутствует позже я получил все необходимые «.so» по этой ссылке

https://github.com/java-native-access/jna/tree/master/dist после этого я скопировал libjnidispatch.so файл в приложение/src/main/jniLibs/armeabi-v7a/libjnidispatch.so и

Я загрузил такой файл с помощью System.loadLibrary ("jnidispatch") после того, как приложение приложения скомпилировалось. При попытке создать объект для ReqSocket sock = new ReqSocket(); я получаю следующее сообщение об ошибке:

java.lang.ExceptionInInitializerError 
        at nanomsg.Nanomsg.getSymbols(Nanomsg.java:35) 
        at nanomsg.Nanomsg.<clinit>(Nanomsg.java:48) 
        at nanomsg.Nanomsg$constants.<clinit>(Nanomsg.java:51) 
        at nanomsg.reqrep.ReqSocket.<init>(ReqSocket.java:13) 
        at com.example.nanomsg.onClick(MainActivity.java:125) 
        at android.view.View.performClick(View.java:5201) 
        at android.view.View$PerformClick.run(View.java:21163) 
        at android.os.Handler.handleCallback(Handler.java:746) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:148) 
        at android.app.ActivityThread.main(ActivityThread.java:5443) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
        Caused by: java.lang.IllegalStateException: The SecurityManager implementation on this platform is broken; you must explicitly provide the class to register 
        at com.sun.jna.Native.getCallingClass(Native.java:1295) 
        at com.sun.jna.Native.register(Native.java:1252) 
        at nanomsg.NativeLibrary.<clinit>(NativeLibrary.java:30) 
        at nanomsg.Nanomsg.getSymbols(Nanomsg.java:35)  
        at nanomsg.Nanomsg.<clinit>(Nanomsg.java:48)  
        at nanomsg.Nanomsg$constants.<clinit>(Nanomsg.java:51)  
        at nanomsg.reqrep.ReqSocket.<init>(ReqSocket.java:13)  
        at com.example.nanomsg.MainActivity.onClick(MainActivity.java:125)  
        at android.view.View.performClick(View.java:5201)  
        at android.view.View$PerformClick.run(View.java:21163)  
        at android.os.Handler.handleCallback(Handler.java:746)  
        at android.os.Handler.dispatchMessage(Handler.java:95)  
        at android.os.Looper.loop(Looper.java:148)  
        at android.app.ActivityThread.main(ActivityThread.java:5443)  
        at java.lang.reflect.Method.invoke(Native Method)  
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 

на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:618)

Может кто-нибудь может помочь, пожалуйста, мне, какую ошибку я делаю здесь. Любая помощь будет оценена по достоинству.

+0

Запустите с системным свойством 'jna.debug_load = true' и' jna.debug_load.jna = true', чтобы получить дополнительную информацию о загрузке во время выполнения. – technomage

+0

Hi technomage, я отредактировал мое сообщение, пожалуйста, проверьте его один раз и спасибо за ответ. –

+0

Это может помочь: https://groups.google.com/forum/#!topic/jna-users/mlUcaZZYkgQ – technomage

ответ

1

Похоже, проблема в том, что Native.register() без аргумента класса требует загрузчика класса контекста, который может успешно сообщить о вызывающем классе. Android не предоставляет его.

Без этого Native.register() требует, чтобы вы однозначно идентифицировали класс, который хотите зарегистрировать. К сожалению, невозможно даже загрузить класс, определенный nanomsg, если их register находится в блоке static. Вам нужно будет скопировать определение своего класса (которое может быть маленьким или большим) и зарегистрировать собственное сопоставление. Или попросите их исправить их вызов register для работы с Android.

См. Также jna-users mailing list.

+0

Спасибо, что technomage это сработало. –

+0

@ rajesh-n: Эй, результирующий код доступен на ветке где-то? – alanjds

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