2016-05-23 11 views
1

Ich habe http://kn-gloryo.github.io/Build_NDK_AndroidStudio_detail/ gefolgt und es funktioniert gut! Allerdings möchte ich die generierte .so-Bibliothek in einer neuen Android-Anwendung verwenden, und ich weiß einfach nicht, wie ich das machen soll ... Ich habe seit Tagen gekämpft und wenn eine Schritt-für-Schritt-Anleitung geteilt werden kann das wäre hilfreich!Wie wird die generierte .so-Bibliothek in einem anderen Android-Projekt verwendet?

Dies ist das Android-Projekt MeineAnw, die ich die .so-Dateien zu erzeugen, verwendet:

enter image description here

MainActivity:

enter image description here

Java-Klasse: MyNDK

enter image description here

Header-Datei: com_demo_ble_myapp_MyNDK.h

enter image description here

CPP-Datei: MyLibrary

enter image description here

Und das ist die Struktur meiner neuen Android-Projekt useSOLib, kopiere ich einfach alles die so Dateien von MyApp \ app \ src \ main \ libs zu useSoLib \ app \ src \ main \ jniLibs

enter image description here

Und das ist MainActivity in useSoLib:

enter image description here

kann ich Build-> erfolgreich Projekt aktualisieren, aber wenn ich es laufen Auf dem Gerät zeigt die App "Leider hat UseSoLib gestoppt." und zerquetscht. Ich weiß, dass ich hier ein paar Schritte verpasse, aber ich bin neu in Android Studio, also habe ich keine Ahnung, wo ich anfangen sollte ... Vielen Dank im Voraus für irgendwelche Vorschläge! :)

+0

Wahrscheinlich stimmt etwas mit Ihrem systemeigenen Code nicht. Haben Sie versucht, log oder gdb zu verwenden, um zu überprüfen, welche Zeile des Codes die Ausnahme verursacht hat? – yushulx

+0

Danke für die Antwort! Im MainActivity des Projekts MyApp (das ich zum Erzeugen der .so-Bibliothek verwendet habe) habe ich eine Instanz von MyNDK, die so genannte native Funktion getMyString, neu erstellt und sie läuft erfolgreich auf dem Gerät, ich kann auch die korrekte zurückgegebene Zeichenfolge sehen Mein Logcat, also nehme ich an, dass die native C++ Funktion gut funktioniert. Gerade wenn ich versuche auf das generierte zuzugreifen.so Bibliothek von anderen Android-Projekt mit einem anderen Paketnamen, es zerquetscht ... Ich füge auch meine Header-und CPP-Dateien oben als Referenz. – Alison

+0

Ihr Code ist falsch. Siehe meine Antwort. Sie müssen die Java-Klasse exportieren und mit der * .so-Datei in Ihr neues Projekt importieren. – yushulx

Antwort

1

Sie sollten MyNDK importieren und ihre Instanz verwenden. Die JNI-Bibliothek ist mit der Java-Klasse verwandt. Ändern Sie den Code:

public class MainActivity extends AppCompatActivity{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState){ 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Log.i("MyTag", new MyNDK().getMyString()); 
    } 
} 

Sie entweder die MyNDK Klasse als JAR-Paket exportieren oder erstellen Sie eine aar Bündel. Importieren Sie anschließend die Java-Klasse in Ihr neues Projekt mit der JNI-Bibliothek.

Der Beitrag How to Build *.so Library Files into AAR Bundle in Android Studio kann Ihnen helfen.

+0

Ich versuche, ein aar zu machen, aber bisher kein Glück bekam ... Ich werde meine Frage mit ein paar Fotos bearbeiten zu zeigen, was ich getan habe, lass es mich wissen, wenn es alles, was ich dank verpasst haben, eine Menge! :) – Alison

+0

.aar ist in der Tat die Lösung für mich! Danke! :) – Alison