JNI- java.lang.UnsatisfiedLinkError: Native Methode wurde nicht gefunden

8

Ich entwickle ein Android-Projekt mit OpenCV. Einige der Methoden haben keine Java-Version, daher muss ich NDK verwenden, um sie in meinem Projekt zu verwenden.

Dies ist das erste Mal, dass ich NDK verwende. Nachdem ich nach einigen Beispielen gesucht habe, habe ich meinen Code geschrieben, auf meinem Gerät ausgeführt und die folgende Fehlermeldung erhalten:

%Vor%

Ich habe .so-Dateien mehrmals neu generiert und die Namensgebung für jni-Funktionen überprüft. Ich habe auch externe C-Wrapper zu jni-Funktionen hinzugefügt. Aber keine dieser Lösungen hat funktioniert.

Hinweis: Ich benutze immer Intellij Idea, um JAVA-Programme zu entwickeln, und da Idea NDK nicht unterstützt, und ich muss Eclipse verwenden, um zu NDK zu gelangen, also ... das ist auch das erste Mal, dass ich Eclipse benutze. Ich hätte viele dumme Fehler machen können. lol

Unten sind meine C ++ - Codes und Makefile.

LocalMain.cpp

%Vor%

LocalFeatures.h und LocalFeatures.cpp werden nicht angezeigt, aber ich bin mir sicher, dass das Problem nicht bei ihnen liegt.

Android.mk

%Vor%

Diese .cpp-Dateien und .mk-Dateien befinden sich in einem Eclipse-Projekt. libmytest_lib.so, libopencv_java.so, libnonfree.so kann korrekt generiert werden. Die folgenden .java-Dateien befinden sich in einem Intellij Idea-Projekt. Ich habe diese .so-Dateien im Idea-Projekt nach \ lib kopiert.

JNIlib.java

%Vor%

Teil von MainActivity.java

%Vor%

Vielen Dank!

    
pwwpche 04.07.2014, 03:05
quelle

3 Antworten

6

Nachdem ich dem Rat von JonesV gefolgt war, entfernte ich den statischen Code. Aber danach besteht das Problem immer noch.

Schließlich habe ich mein Programm debugged und wenn ich zu dieser Zeile lief:

%Vor%

Das Programm hat einen Fehler ausgegeben, anstatt normal zu laufen, wie ich dachte. WIRKLICH DUMMES FEHLER: & lt;

Jetzt habe ich einen Fehler gefunden, den ich vorher nie bemerkt habe.

%Vor%

Was bedeutet, dass keine LIBES geladen sind. Also überprüfte ich meine Projektstruktur und stellte fest, dass ich meine .so-Dateien in den Ordner libs / anstelle von libs / armeabi / ordner legte.

Und die Lösung ist hier zu finden: Android NDK java.lang.UnsatisfiedLinkError: findLibrary gab null zurück von user1647750

    
pwwpche 05.07.2014, 05:42
quelle
4

Ich habe

hinzugefügt %Vor%

vor Funktionen deklarieren zB:

%Vor%

dann war der Fehler weg

    
TheLastSummer 03.11.2016 15:49
quelle
2

Entfernen Sie static von:

%Vor%

d. schreib es so:

%Vor%

Wenn Sie wirklich möchten, dass Ihre Methode readImg() statisch ist, sollten Sie die JNI-Methode wie folgt deklarieren (mit jclass anstelle von jobject ):

%Vor%     
Sekhar Madhiyazhagan 04.07.2014 05:15
quelle

Tags und Links