In meinem Android-Projekt verwende ich die neuesten Gradle-Build-Tools und habe eine einzige Datei mit nativem C-Code und einigen einfachen Funktionen. Das einzige, was in der C-Datei enthalten ist, ist string.h und jni.h und die Funktionen geben einfach String und Primitive zurück. Die Datei wird neben den anderen Quellordnern (java, res etc.) Im jni-Verzeichnis abgelegt.
Wenn ich die Anwendung erstelle, kompiliere sie den C-Code, erzeugt die .so-Datei und fügt sie in meine APK ein. Das Problem ist, dass die .so-Datei ALLE Symbole entfernt hat.
Bei der Überprüfung der .so-Zwischenablage, die in build / intermediate / ndk / obj abgelegt wurde, sind alle Symbole noch vorhanden. Also irgendwo nach der ersten .so-Datei wird generiert und wenn es verpackt wird, ist alles abgestreift.
Beim Erstellen der .so-Datei mit der Befehlszeile ndk-build funktioniert alles gut und die Symbole sind enthalten.
Ist es ein Fehler im Android Gradle Plugin (ich benutze das neueste!) oder fehle ich etwas?
Die Symbole befinden sich in src / main / obj / local Fügen Sie also build.grade hinzu:
%Vor%gehen Sie dann zu Debug Konfiguration- & gt; Debugger und Hinzufügen zu Symbol-Verzeichnissen: app / build / intermediates / jniLibs
danach konnte ich meinen nativen Code debuggen.
Stellen Sie sicher, dass Sie JNIEXPORT und JNICALL Makros in Ihren Methoden verwenden. Stellen Sie außerdem sicher, dass proguard nicht zuerst eine Klasse entfernt, die nur jni stuff aufruft - und später den jni-Code selbst, weil keine Klasse ihn verwendet.
Beispiel für JNIEXPORT UND JNICALL
%Vor%Tags und Links android android-ndk jni android-studio android-gradle