Autore Topic: Come aggiungere la libreria libmupdf.so ???  (Letto 1276 volte)

Offline MisterAnt

  • Utente normale
  • ***
  • Post: 272
  • Respect: +4
    • IlSikano
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S4 Active,Galaxy SIII I9300, Galaxy Tab GT-P5100
  • Play Store ID:
    MisterAnt
  • Sistema operativo:
    Ubuntu 12.04/Winzoz 7/Winzoz xp
Come aggiungere la libreria libmupdf.so ???
« il: 17 Dicembre 2013, 17:54:00 CET »
0
Buonasera a tutti =)
Sto uscendo pazzo perchè non trovo nessun modo per utilizzare la libreria mupdf...
Ho provato a aggiungere da BUILD PATH->add class folder/add external class folder
Ma niente da fare...
Ho preso spunto da un progetto già esistente e volevo implementarlo sul mio...
Ma purtroppo non trova la libreria.
Io la libreria l'ho aggiunta in lib...(2 versioni esattemente armeabi e armeabi-7a)

LogCat
Codice: [Seleziona]
12-17 05:52:14.633: W/dalvikvm(12087): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcom/artifex/mupdf/ChoosePDFActivity;
12-17 05:52:14.633: W/dalvikvm(12087): Class init failed in newInstance call (Lcom/artifex/mupdf/ChoosePDFActivity;)
12-17 05:52:14.633: D/AndroidRuntime(12087): Shutting down VM
12-17 05:52:14.643: W/dalvikvm(12087): threadid=1: thread exiting with uncaught exception (group=0x41fb7300)
12-17 05:52:14.643: E/AndroidRuntime(12087): FATAL EXCEPTION: main
12-17 05:52:14.643: E/AndroidRuntime(12087): java.lang.ExceptionInInitializerError
12-17 05:52:14.643: E/AndroidRuntime(12087):         at java.lang.Class.newInstanceImpl(Native Method)
12-17 05:52:14.643: E/AndroidRuntime(12087):         at java.lang.Class.newInstance(Class.java:1319)
12-17 05:52:14.643: E/AndroidRuntime(12087):         at android.app.Instrumentation.newActivity(Instrumentation.java:1053)
12-17 05:52:14.643: E/AndroidRuntime(12087):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1974)
12-17 05:52:14.643: E/AndroidRuntime(12087):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
12-17 05:52:14.643: E/AndroidRuntime(12087):         at android.app.ActivityThread.access$600(ActivityThread.java:130)
12-17 05:52:14.643: E/AndroidRuntime(12087):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
12-17 05:52:14.643: E/AndroidRuntime(12087):         at android.os.Handler.dispatchMessage(Handler.java:99)
12-17 05:52:14.643: E/AndroidRuntime(12087):         at android.os.Looper.loop(Looper.java:137)
12-17 05:52:14.643: E/AndroidRuntime(12087):         at android.app.ActivityThread.main(ActivityThread.java:4745)
12-17 05:52:14.643: E/AndroidRuntime(12087):         at java.lang.reflect.Method.invokeNative(Native Method)
12-17 05:52:14.643: E/AndroidRuntime(12087):         at java.lang.reflect.Method.invoke(Method.java:511)
12-17 05:52:14.643: E/AndroidRuntime(12087):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
12-17 05:52:14.643: E/AndroidRuntime(12087):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
12-17 05:52:14.643: E/AndroidRuntime(12087):         at dalvik.system.NativeStart.main(Native Method)
12-17 05:52:14.643: E/AndroidRuntime(12087): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load /armeabi/libmupdf.so: findLibrary returned null
12-17 05:52:14.643: E/AndroidRuntime(12087):         at java.lang.Runtime.loadLibrary(Runtime.java:365)
12-17 05:52:14.643: E/AndroidRuntime(12087):         at java.lang.System.loadLibrary(System.java:535)
12-17 05:52:14.643: E/AndroidRuntime(12087):         at com.artifex.mupdf.ChoosePDFActivity.<clinit>(ChoosePDFActivity.java:64)
12-17 05:52:14.643: E/AndroidRuntime(12087):         ... 15 more

Ho anche provato ad aggiungere alla mia attività questa riga...
Codice (Java): [Seleziona]
static {
                System.loadLibrary("/armeabi/libmupdf.so"); // Notice lack of lib prefix
        }
Ma purtroppo ancora niente da fare...qualche consigli???
Se le zampe del coniglio sono così fortunate, che fine ha fatto il coniglio?

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Come aggiungere la libreria libmupdf.so ???
« Risposta #1 il: 17 Dicembre 2013, 20:20:54 CET »
0
Per usare quella libreria devi conoscere molto bene come funziona NDK e soprattutto JNI.

L'argomento è molto vasto ed è impossibile spiegarlo in poche parole, comunque salta immediatamente all'occhio un errore:


Codice (Java): [Seleziona]
                System.loadLibrary("/armeabi/libmupdf.so"); // Notice lack of lib prefix

Deve essere:

Codice (Java): [Seleziona]
System.loadLibrary("mupdf");
La documentazione ufficiale del NDK spiega come si utilizzano le librerie native e i sorgenti di Mupdf spiegano come usarla sotto Android.(c'è anche un esempio completo).

P.S. C'è un altro gravissimo errore, la libreria non si mette in "lib". Le librerie (possono essere più librerie a seconda dell'architettura e della CPU) sono in "libs" rispettando le convezioni del NDK.
« Ultima modifica: 17 Dicembre 2013, 20:26:30 CET da iceweasel »
adb logcat | tee /tmp/logcat | grep TAG

Offline MisterAnt

  • Utente normale
  • ***
  • Post: 272
  • Respect: +4
    • IlSikano
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S4 Active,Galaxy SIII I9300, Galaxy Tab GT-P5100
  • Play Store ID:
    MisterAnt
  • Sistema operativo:
    Ubuntu 12.04/Winzoz 7/Winzoz xp
Re:Come aggiungere la libreria libmupdf.so ???
« Risposta #2 il: 18 Dicembre 2013, 08:27:14 CET »
0
Si errore mio...le librerie si trovano nella cartella libs...
Comunque io devo solo utilizzarle...non devo farci altro...
Nel progetto esempio questa libreria funziona...quindi io ho copiato queste due cartelle sul mio progetto...
ho provato a includerle del build path come external folder...ma zero...
Non capisco perchè andare a utilizzare NDK quando la libreria è già creata e pronta all'uso....
Io ho queste due cartelle:
/libs/
->armeabi/
->armeabi-v7a/
Con rispettivi file all'interno
-----gdb.setup
-----gdbserver
-----libmudpf.so
Se le zampe del coniglio sono così fortunate, che fine ha fatto il coniglio?

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Come aggiungere la libreria libmupdf.so ???
« Risposta #3 il: 18 Dicembre 2013, 09:13:10 CET »
0
Ignoro come usare questa libreria senza l'uso del NDK, le vuoi mettere nel build path ma poi non le compili, quindi un minimo di incongruenza rimane. Hai anche i file per il debug via NDK, se non vuoi fare il debug del codice in C non ti servono. Comunque l'errore del logcat è chiaro, sbagli a fornire il nome della libreria di base (senza il path assoluto, prefisso e suffisso), infatti non la trova.
adb logcat | tee /tmp/logcat | grep TAG

Offline MisterAnt

  • Utente normale
  • ***
  • Post: 272
  • Respect: +4
    • IlSikano
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S4 Active,Galaxy SIII I9300, Galaxy Tab GT-P5100
  • Play Store ID:
    MisterAnt
  • Sistema operativo:
    Ubuntu 12.04/Winzoz 7/Winzoz xp
Re:Come aggiungere la libreria libmupdf.so ???
« Risposta #4 il: 18 Dicembre 2013, 09:25:33 CET »
0
Ho corretto il codice con
Codice (Java): [Seleziona]
static{
                System.loadLibrary("mupdf");
        }
Io programmo in Java e mi serve utilizzare questa libreria...
Ho scaricato l' NDK solo che adesso dovrei configurarlo...
Il mio problema è che non sò come fare...cmq nel progetto esempio, io compilo e funziona tutto liscio...trova perfettamente la libreria nonostante io non abbia l'NDK.
Dopo aver importato tutto sull'altro progetto non me la vuole caricare...EPPURE NON MI PARE COSì COMPLICATO CARICARE UNA LIBRERIA
E' possibile che variando il package del Manifest non carichi la libreria perchè deve essere compilata con valori diversi?


Codice: [Seleziona]
12-17 21:17:54.703: W/dalvikvm(25776): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcom/artifex/mupdf/ChoosePDFActivity;
12-17 21:17:54.703: W/dalvikvm(25776): Class init failed in newInstance call (Lcom/artifex/mupdf/ChoosePDFActivity;)
12-17 21:17:54.703: D/AndroidRuntime(25776): Shutting down VM
12-17 21:17:54.703: W/dalvikvm(25776): threadid=1: thread exiting with uncaught exception (group=0x41fb7300)
12-17 21:17:54.713: E/AndroidRuntime(25776): FATAL EXCEPTION: main
12-17 21:17:54.713: E/AndroidRuntime(25776): java.lang.ExceptionInInitializerError
12-17 21:17:54.713: E/AndroidRuntime(25776):         at java.lang.Class.newInstanceImpl(Native Method)
12-17 21:17:54.713: E/AndroidRuntime(25776):         at java.lang.Class.newInstance(Class.java:1319)
12-17 21:17:54.713: E/AndroidRuntime(25776):         at android.app.Instrumentation.newActivity(Instrumentation.java:1053)
12-17 21:17:54.713: E/AndroidRuntime(25776):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1974)
12-17 21:17:54.713: E/AndroidRuntime(25776):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
12-17 21:17:54.713: E/AndroidRuntime(25776):         at android.app.ActivityThread.access$600(ActivityThread.java:130)
12-17 21:17:54.713: E/AndroidRuntime(25776):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
12-17 21:17:54.713: E/AndroidRuntime(25776):         at android.os.Handler.dispatchMessage(Handler.java:99)
12-17 21:17:54.713: E/AndroidRuntime(25776):         at android.os.Looper.loop(Looper.java:137)
12-17 21:17:54.713: E/AndroidRuntime(25776):         at android.app.ActivityThread.main(ActivityThread.java:4745)
12-17 21:17:54.713: E/AndroidRuntime(25776):         at java.lang.reflect.Method.invokeNative(Native Method)
12-17 21:17:54.713: E/AndroidRuntime(25776):         at java.lang.reflect.Method.invoke(Method.java:511)
12-17 21:17:54.713: E/AndroidRuntime(25776):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
12-17 21:17:54.713: E/AndroidRuntime(25776):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
12-17 21:17:54.713: E/AndroidRuntime(25776):         at dalvik.system.NativeStart.main(Native Method)
12-17 21:17:54.713: E/AndroidRuntime(25776): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load mupdf: findLibrary returned null
12-17 21:17:54.713: E/AndroidRuntime(25776):         at java.lang.Runtime.loadLibrary(Runtime.java:365)
12-17 21:17:54.713: E/AndroidRuntime(25776):         at java.lang.System.loadLibrary(System.java:535)
12-17 21:17:54.713: E/AndroidRuntime(25776):         at com.artifex.mupdf.ChoosePDFActivity.<clinit>(ChoosePDFActivity.java:55)
12-17 21:17:54.713: E/AndroidRuntime(25776):         ... 15 more
« Ultima modifica: 18 Dicembre 2013, 12:33:57 CET da MisterAnt »
Se le zampe del coniglio sono così fortunate, che fine ha fatto il coniglio?

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Come aggiungere la libreria libmupdf.so ???
« Risposta #5 il: 18 Dicembre 2013, 12:37:20 CET »
0
L'errore è esattamente quello di prima, non trova la libreria:

Codice: [Seleziona]
java.lang.UnsatisfiedLinkError: Couldn't load mupdf: findLibrary returned null
La libreria deve essere compilata per la CPU in uso e nel caso del ARM anche per architettura, si deve trovare esattamente nel posto coretto e naturalmente deve essere presente nel file .apk. I programmi scritti per NDK hanno più vincoli da rispettare rispetto ai programmi scritti solo in Java.
adb logcat | tee /tmp/logcat | grep TAG

Offline MisterAnt

  • Utente normale
  • ***
  • Post: 272
  • Respect: +4
    • IlSikano
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S4 Active,Galaxy SIII I9300, Galaxy Tab GT-P5100
  • Play Store ID:
    MisterAnt
  • Sistema operativo:
    Ubuntu 12.04/Winzoz 7/Winzoz xp
Re:Come aggiungere la libreria libmupdf.so ???
« Risposta #6 il: 18 Dicembre 2013, 12:59:05 CET »
0
Ok...ma perchè se creo un'altro progetto(copiando tutti i file libs incluse) con stesso API 4.0.3 funziona?
Se le zampe del coniglio sono così fortunate, che fine ha fatto il coniglio?

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Come aggiungere la libreria libmupdf.so ???
« Risposta #7 il: 18 Dicembre 2013, 13:46:36 CET »
0
L'errore è per me chiaro, non trova la libreria, ignoro il vero motivo. Dai sorgenti si capisce che per funzionare sugli ARMv6 e ARMv7 serve almeno API di Android 2.2, per girare sugli x86 e MIPS serve almeno Android 2.3.
adb logcat | tee /tmp/logcat | grep TAG

Offline MisterAnt

  • Utente normale
  • ***
  • Post: 272
  • Respect: +4
    • IlSikano
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S4 Active,Galaxy SIII I9300, Galaxy Tab GT-P5100
  • Play Store ID:
    MisterAnt
  • Sistema operativo:
    Ubuntu 12.04/Winzoz 7/Winzoz xp
Re:Come aggiungere la libreria libmupdf.so ???
« Risposta #8 il: 18 Dicembre 2013, 14:10:00 CET »
0
Non ne capisco nemmeno io il motivo...anche perchè utilizzo un tablet con 4.1.1 e sviluppo unicamente su quest'ultimo.
Due app diverse con la stessa API 15 e una non funziona
Credo che abbandonerò la libreria mupdf...e tenterò un'altra strada..

IMPAZZENDO PER ORE SONO GIUNTO ALLA SOLUZIONE DEL PROBLEMA.
.
..
...
....
.....
Ho cambiato la libreria android-support-v4.jar e adesso funziona!!!!!!!
« Ultima modifica: 18 Dicembre 2013, 19:33:52 CET da MisterAnt »
Se le zampe del coniglio sono così fortunate, che fine ha fatto il coniglio?