So verwenden Sie zusätzliche * .so-Bibliotheken in Android Studio und NDK

8

Ich versuche, eine Android-Anwendung zu generieren, um einige zusätzliche * .so-Bibliotheken (speziell 'libinterface.so') zu verwenden. Diese Bibliotheken werden extern generiert und als eine Abhängigkeit innerhalb einer von Java aufgerufenen Wrapperklasse aufgenommen. Die Bibliothek wird in 'src / main / jniLibs / armeabi-v7a' gespeichert. Das System enthält alle .so-Dateien in der generierten App.

Früher habe ich Eclipse für diesen Zweck verwendet und ich konnte diese Bibliothek verwenden, aber ich habe Probleme mit Android Studio.

Der generierte Fehler ist:

%Vor%

Da der Fehler vom Linker ausgelöst wird, sieht er mit dem Bibliothekseinschlussschritt aus. In Eclipse habe ich eine 'Android.mk' Datei verwendet, um die neue Bibliothek einzubinden, aber ich finde den Weg dafür nicht mit Gradle.

%Vor%

Ich versuche, die Bibliotheken mit dieser Definition zu integrieren (Anmerkung: Ich habe die letzte JNI-Unterstützung und grelle experimentelle dieses Tutorial verwenden ):

%Vor%

Die Bibliothek wird mit CMake und Makefile-Tools extern kompiliert und für Android-Plattformen (mit Eclipse und ADT getestet) "korrekt" kompiliert.

Ich habe den Wrapper wie folgt implementiert:

%Vor%

und

%Vor%

Der Header der Bibliothek sieht folgendermaßen aus:

%Vor%

Vielen Dank im Voraus.

UPDATE:

Nach diesem Beispiel habe ich einige Blöcke in das Skript hinzugefügt:

%Vor%

funktioniert aber nicht:

%Vor%     
goe 16.03.2016, 11:45
quelle

1 Antwort

5

Ok, es könnte zwei verschiedene Probleme geben.

Zuerst müssen Sie sicher sein, dass die Bibliothek für die richtige Architektur kompiliert ist. Wenn Sie eine armea-v7a-Bibliothek verwenden, der Compiler jedoch versucht, eine armeabi-Bibliothek zu laden, schlägt die Kompilierung fehl.

Zweitens müssen Sie die Bibliotheken, abhängig von der verwendeten Architektur, mit einbeziehen. Verwenden Sie die ' Flavors Konfiguration in Ihrem Modul build.gradle Skript.

Im Beispiel können Sie versuchen, etwas wie folgt zu tun:

%Vor%

Außerdem schlage ich vor, dass Sie 'jniLibs' verwenden, um die Bibliotheken zu speichern, da dies der Standardpfad für sie ist, aber für jeden Bogen einen anderen Ordner verwenden.

Sie können andere Beispiele wie dies überprüfen .

Hoffe, das hilft. Grüße.

    
vgonisanz 17.03.2016, 13:43
quelle