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!
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
Ich habe
hinzugefügt %Vor%vor Funktionen deklarieren zB:
%Vor%dann war der Fehler weg
Entfernen Sie static
von:
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
):