Smíchání Android externí JAR a JNI Gone Wild

hlasů
3

Krátká historie. mějte se mnou :)

Mám projekt, Android, který používá JNI, která funguje velmi dobře.

Rozhodl jsem se vytvořit ze zdroje tohoto projektu JNI vnější nádoby (distribuce)

Za účelem vytvoření této sklenice Vzal jsem radu druhých a vytvořil nový projekt v jazyce Java, který drží těch pár JNI tříd musím uložit do sklenice. Jsem vyváží tuto java projekt jar (ne jako runnable JAR)

Vytvořil jsem nový Android projekt, ve kterém se snažím používat jar soubor se jedná.

Poté, co jsem hrál s tímto novým systémem Android projektu Začal jsem si uvědomovat, že .so soubor, který by měl doprovázet JNI třídy nemůže nacházet uvnitř souboru jar sám (Eclipse si stěžoval na to ..) Tak jsem vytvořil lib uvnitř nové Android projekt, který drží soubor .so.

Když jsem spustit tento nový projekt Android nemohu pracovat s některou z tříd, které má nativní metody a mohu pracovat pouze s těmi třídami, které jsou čistě Java implementace.

Dostávám „ExceptionInInitializerError“ Při pokusu o vytvoření instance jednoho z objektů na bázi JNI.

Aktualizace: Zdá se, že chyba pochází z pokusu o načtení JNI knihovnu v souladu

System.loadLibrary(lib-jni);

Zde je logcat:

> ERROR/SightEngine(2479): About to load the lib-jni.so
ERROR/SightExample(2479): WARNING: Could not init SightEngine java.lang.ExceptionInInitializerError
ERROR/AndroidRuntime(2479): Uncaught handler: thread main exiting due to uncaught exception
ERROR/AndroidRuntime(2479): java.lang.RuntimeException: Unable to start activity ComponentInfo{eyesight.android.example/eyesight.android.example.SightExample}: java.lang.NullPointerException: println needs a message
ERROR/AndroidRuntime(2479):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
ERROR/AndroidRuntime(2479):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
ERROR/AndroidRuntime(2479):     at android.app.ActivityThread.access$2200(ActivityThread.java:119)
ERROR/AndroidRuntime(2479):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
ERROR/AndroidRuntime(2479):     at android.os.Handler.dispatchMessage(Handler.java:99)
ERROR/AndroidRuntime(2479):     at android.os.Looper.loop(Looper.java:123)
ERROR/AndroidRuntime(2479):     at android.app.ActivityThread.main(ActivityThread.java:4363)
ERROR/AndroidRuntime(2479):     at java.lang.reflect.Method.invokeNative(Native Method)
ERROR/AndroidRuntime(2479):     at java.lang.reflect.Method.invoke(Method.java:521)
ERROR/AndroidRuntime(2479):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
ERROR/AndroidRuntime(2479):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
ERROR/AndroidRuntime(2479):     at dalvik.system.NativeStart.main(Native Method)
ERROR/AndroidRuntime(2479): Caused by: java.lang.NullPointerException: println needs a message
ERROR/AndroidRuntime(2479):     at android.util.Log.println(Native Method)
ERROR/AndroidRuntime(2479):     at android.util.Log.e(Log.java:208)
ERROR/AndroidRuntime(2479):     at eyesight.android.example.SightExample.onCreate(SightExample.java:28)
ERROR/AndroidRuntime(2479):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
ERROR/AndroidRuntime(2479):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
ERROR/AndroidRuntime(2479):     ... 11 more
ERROR/dalvikvm(2479): Unable to open stack trace file '/data/anr/traces.txt': Permission denied

Několik rad:

  • Vidím .so soubor uvnitř souboru APK.
  • Snažil jsem se definovat externí jar soubor v JNI Android.mk ale nic vzrušující nestalo. Zde jsou linky jsem použil (je sestaven bez problému ..)

    LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES: = libtestjar: lib / testJar.jar patří $ (BUILD_MULTI_PREBUILT)

  • Jsem schopen pracovat s pravidelnými java tříd, které existují pouze v JAR souboru. (Vím, že se opakuji .. :)), což znamená, že jsem správně definovala tuto nádobu v projektu.

    • Java projekt, který pořádá kurzy JNI bázi má odkaz na android.jar (úroveň SDK 7)

Má někdo nějaké návrhy musí, jak lze tento úkol dosáhnout? Mám pocit, že jsem skoro tam ...

Děkuji vám za váš čas a úsilí :)

Itamar

Položena 10/11/2010 v 14:42
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
1

V android projektu, jsi dal své .so soubory v lib / armeabi?

Mimochodem, mám stejné nastavení jako vy (java projekt, který staví sklenici a android projekt, který používá JAR).

Podařilo se mi balit .so soubory ve sklenici ... tady je to, co jsem udělal:

-Když budování knihovny JAR jsem zip .so soubory do souboru (dejme armeabi.zip) a vložte jej do složky ‚majetek‘ ve sklenici.

-Při vytváření android projekt bude armeabi.zip být ve složce ‚aktiva‘ uvnitř APK.

-at runtime (první start) I extrahovat obsah armeabi.zip z majetku do "/ data / data /" + context.getPackageName ().

-finally načíst extrahuje .so knihovnami za použití System.load (/data/data//libfilename.so)

snad to pomůže.

Fadi

Odpovězeno 21/10/2011 v 15:24
zdroj uživatelem

hlasů
0

Vypadá to jako volání protokolu chyb chybí zprávu.

ERROR/AndroidRuntime(2479): Caused by: java.lang.NullPointerException: println needs a message
ERROR/AndroidRuntime(2479): at android.util.Log.println(Native Method)
ERROR/AndroidRuntime(2479): at android.util.Log.e(Log.java:208)
ERROR/AndroidRuntime(2479): at eyesight.android.example.SightExample.onCreate(SightExample.java:28) 
Odpovězeno 11/11/2010 v 21:20
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more