Voor een klant van ons hebben wij een android app geschreven die werkt met UHF RFID en met een android besturingssysteem. De scanner is geleverd door panmobil en levert een keurige sample applicatie erbij voor het UHF deel. Wij hebben dit deel dan ook werkend gekregen. Echter zit er ook een barcode module op de scanner die we ook willen gebruiken. Ik heb al vaker met verschillende barcode modules gewerkt en nog nooit echt problemen gehad. Echter panmobil heeft voor het barcode deel een wat lastigere sample applicatie geleverd. Deze sample applicatie bevat een eigen gemaakt keyboard voor android om vanaf daar ook de barcode module aan te spreken en de gelezen data als input in een tekstveld te plaatsen. Ze spreken de serialport aan met een eigen C library waar ik de broncodes niet van heb, die ze via System.Load() laden en vervolgens als native method gebruiken.
Mijn vraag
Nu ben ik bezig met de sample code om hem draaiend te maken en de barcode module te implementeren in mijn eigen app. Ik loop echter steeds tegen dezelfde fout aan in hun sample project. Hij laad de library wel in maar geeft toch een unsatified link error. Weet iemand wat er eventueel fout kan zijn of waar ik het nog meer kan zoeken?
Hieronder een dump van de foutmelding:
Ik werk met Android Studio 2.2.3, Android SDK 23 en een scanner van panmobil met Android 4.4.2
Wat ik al gevonden of geprobeerd heb
Ik heb veel op stackoverflow rondgezocht over de error. Eerst was het probleem dat Android de .so bestanden niet kon inladen. Nadat bleek dat ze een AndroidManifest hadden meegeleverd met een package name name.your.own dus zocht android ze de libraries op de verkeerde plek. Nadat ik de juiste package naam ingesteld had vond android de libraries als ook in de log blijkt maar de native methods nog steeds niet. Ik heb weinig ervaring hiermee dus ik vermoed dat er nog iets ingesteld moet worden in mijn project waardoor de methodes ook goed gevonden kunnen worden. Panmobil is niet bereid mee te denken en de leverancier die ze geleverd heeft geeft aan niet verder te kunnen helpen.
Mijn vraag
Nu ben ik bezig met de sample code om hem draaiend te maken en de barcode module te implementeren in mijn eigen app. Ik loop echter steeds tegen dezelfde fout aan in hun sample project. Hij laad de library wel in maar geeft toch een unsatified link error. Weet iemand wat er eventueel fout kan zijn of waar ik het nog meer kan zoeken?
Hieronder een dump van de foutmelding:
Relevante software en hardware die ik gebruik03-02 13:35:31.132 11825-11825/com.example.uartdemo D/dalvikvm: Trying to load lib /data/data/com.example.uartdemo/lib/libdevapi.so 0x41eacd68
03-02 13:35:31.132 11825-11825/com.example.uartdemo D/dalvikvm: Added shared lib /data/data/com.example.uartdemo/lib/libdevapi.so 0x41eacd68
03-02 13:35:31.132 11825-11825/com.example.uartdemo D/dalvikvm: No JNI_OnLoad found in /data/data/com.example.uartdemo/lib/libdevapi.so 0x41eacd68, skipping init
03-02 13:35:31.132 11825-11825/com.example.uartdemo D/dalvikvm: Trying to load lib /data/data/com.example.uartdemo/lib/libSerialPort.so 0x41eacd68
03-02 13:35:31.133 11825-11825/com.example.uartdemo D/dalvikvm: Added shared lib /data/data/com.example.uartdemo/lib/libSerialPort.so 0x41eacd68
03-02 13:35:31.133 11825-11825/com.example.uartdemo D/dalvikvm: No JNI_OnLoad found in /data/data/com.example.uartdemo/lib/libSerialPort.so 0x41eacd68, skipping init
03-02 13:35:31.133 11825-11825/com.example.uartdemo W/dalvikvm: No implementation found for native Lcom/example/uartdemo/SerialPort;.scanerpoweron:()V
03-02 13:35:31.134 11825-11825/com.example.uartdemo D/AndroidRuntime: Shutting down VM
03-02 13:35:31.134 11825-11825/com.example.uartdemo D/dalvikvm: threadid=1: detach (group=0x418d9ce0)
03-02 13:35:31.134 11825-11825/com.example.uartdemo W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x418d9ce0)
03-02 13:35:31.134 11825-11825/com.example.uartdemo W/dalvikvm: threadid=1: uncaught exception occurred
03-02 13:35:31.134 11825-11825/com.example.uartdemo W/System.err: java.lang.UnsatisfiedLinkError: Native method not found: com.example.uartdemo.SerialPort.scanerpoweron:()V
03-02 13:35:31.141 11825-11847/com.example.uartdemo D/dalvikvm: threadid=12: notify debugger
03-02 13:35:31.141 11825-11847/com.example.uartdemo D/dalvikvm: threadid=12 (Thread-330): calling run()
03-02 13:35:31.142 11825-11845/com.example.uartdemo D/dalvikvm: threadid=13: interp stack at 0x5524b000
03-02 13:35:31.142 11825-11845/com.example.uartdemo D/dalvikvm: threadid=13: adding to list (attached)
03-02 13:35:31.143 11825-11845/com.example.uartdemo D/dalvikvm: threadid=13: attached from native, name=SoundPool
03-02 13:35:31.144 11825-11825/com.example.uartdemo W/System.err: at com.example.uartdemo.SerialPort.scanerpoweron(Native Method)
03-02 13:35:31.144 11825-11825/com.example.uartdemo W/System.err: at com.example.uartdemo.SerialPort.scaner_poweron(SerialPort.java:147)
03-02 13:35:31.144 11825-11825/com.example.uartdemo W/System.err: at com.example.uartdemo.SerialPort.<init>(SerialPort.java:53)
03-02 13:35:31.144 11825-11825/com.example.uartdemo W/System.err: at com.panmobil.panmobilkeyboard.SoftKeyboard.onCreate(SoftKeyboard.java:80)
03-02 13:35:31.144 11825-11825/com.example.uartdemo W/System.err: at android.app.ActivityThread.handleCreateService(ActivityThread.java:2731)
03-02 13:35:31.144 11825-11825/com.example.uartdemo W/System.err: at android.app.ActivityThread.access$1800(ActivityThread.java:151)
03-02 13:35:31.144 11825-11825/com.example.uartdemo W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1403)
03-02 13:35:31.144 11825-11825/com.example.uartdemo W/System.err: at android.os.Handler.dispatchMessage(Handler.java:110)
03-02 13:35:31.144 11825-11825/com.example.uartdemo W/System.err: at android.os.Looper.loop(Looper.java:193)
03-02 13:35:31.144 11825-11825/com.example.uartdemo W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5299)
03-02 13:35:31.145 11825-11825/com.example.uartdemo W/System.err: at java.lang.reflect.Method.invokeNative(Native Method)
03-02 13:35:31.146 11825-11825/com.example.uartdemo W/System.err: at java.lang.reflect.Method.invoke(Method.java:515)
03-02 13:35:31.148 11825-11825/com.example.uartdemo W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825)
03-02 13:35:31.156 11825-11825/com.example.uartdemo W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:641)
03-02 13:35:31.156 11825-11825/com.example.uartdemo W/System.err: at dalvik.system.NativeStart.main(Native Method)
03-02 13:35:31.156 11825-11825/com.example.uartdemo W/dalvikvm: threadid=1: calling UncaughtExceptionHandler
03-02 13:35:31.176 11825-11825/com.example.uartdemo E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.uartdemo, PID: 11825
java.lang.UnsatisfiedLinkError: Native method not found: com.example.uartdemo.SerialPort.scanerpoweron:()V
at com.example.uartdemo.SerialPort.scanerpoweron(Native Method)
at com.example.uartdemo.SerialPort.scaner_poweron(SerialPort.java:147)
at com.example.uartdemo.SerialPort.<init>(SerialPort.java:53)
at com.panmobil.panmobilkeyboard.SoftKeyboard.onCreate(SoftKeyboard.java:80)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:2731)
at android.app.ActivityThread.access$1800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1403)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5299)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:641)
at dalvik.system.NativeStart.main(Native Method)
Ik werk met Android Studio 2.2.3, Android SDK 23 en een scanner van panmobil met Android 4.4.2
Wat ik al gevonden of geprobeerd heb
Ik heb veel op stackoverflow rondgezocht over de error. Eerst was het probleem dat Android de .so bestanden niet kon inladen. Nadat bleek dat ze een AndroidManifest hadden meegeleverd met een package name name.your.own dus zocht android ze de libraries op de verkeerde plek. Nadat ik de juiste package naam ingesteld had vond android de libraries als ook in de log blijkt maar de native methods nog steeds niet. Ik heb weinig ervaring hiermee dus ik vermoed dat er nog iets ingesteld moet worden in mijn project waardoor de methodes ook goed gevonden kunnen worden. Panmobil is niet bereid mee te denken en de leverancier die ze geleverd heeft geeft aan niet verder te kunnen helpen.