Android Studio 2.2 enthält keine Bibliothek von Drittanbietern nach apk

10

Ich verwende die cmake von Android Studio 2.2, um nativen Code zu erstellen, im nativen Code habe ich die ffmpeg-API aufgerufen, also sollte die ffmpeg-Bibliothek gepackt sein. Mein CMakelists.txt ist wie folgt:

%Vor%

In diesem Fall kann ich das Projekt erfolgreich machen, aber wenn ich den Apk in den Emulator installiere und starte, ist es fehlgeschlagen und hat gezeigt, dass "libavcodec-57.so" nicht gefunden wurde. Dann benutze ich tool (analyse apk), um die apk zu überprüfen, festgestellt, dass die ffmpeg-Bibliothek nicht verpackt ist.

    
tonyye 06.10.2016, 12:18
quelle

3 Antworten

3

Ich habe einen Weg gefunden, der für mich funktioniert, nicht sicher, ob es dir hilft, aber vielleicht. Ich verwende Android Studio 2.2 und habe Ihr Problem ebenfalls erkannt.

Ich habe eine jar-Datei mit den vordefinierten Bibliotheken darin erstellt:

%Vor%

indem Sie einfach eine Ordner-Lib mit diesem Inhalt erstellen und den Befehl

ausführen %Vor%

Als nächstes setze ich die JAR-Datei hier ein:

%Vor%

Und diese Zeilen wurden zur CMakeLists.txt hinzugefügt, die eine native .so-Bibliothek in Android Studio erstellt. Das heißt, ich begann mit einem leeren Projekt von der Vorlage für Aufrufe von nativem Code (der Standard libnative-lib.so):

%Vor%

Und mag ich das jetzt, wenn ich die apk baue, kommt der Inhalt meines Glases in die letzte apk. Frag mich nicht, warum das funktioniert, wirklich, ich habe keine Ahnung, es war Zufall.

Was das für mich bedeutet, ist, dass ich das leere libnative-lib.so kompiliere, nur um Android Studio dazu zu bringen, mein Jar aufzunehmen.

Vielleicht findet jemand eine sauberere Lösung und kann darauf hinweisen, wo meine Lösung eine lächerliche Schleife ist, die aus dem Missverstehen von Gradle und Cmake resultiert ...

    
wessel 07.10.2016 12:39
quelle
2

Ich hatte genau das gleiche Problem. Cmake packt die dritte Bibliothek nicht automatisch in die apk, du musst es selbst tun.

Hier ist ein Beispiel mit libavcodec und libavutil von ffmpeg.

1- Kopieren Sie Ihre vordefinierte Bibliothek in app / libs / [abi] /
Beispiel: app/libs/armeabi-v7a/libavcodec.so

2- Kopieren Sie das Include in app / libs / include

Dann fügen Sie in Ihrer cmakelist.txt die benötigten Bibliotheken hinzu

%Vor%

Schließlich in Ihrem build.gradle set jniLibsfolder:

%Vor%

Die Einstellung von jniLibs.srcDir war der Schlüssel für mich, um die Bibliotheken in die apk zu bündeln.

Beachten Sie, dass ich den libs-Ordner verwendet habe, aber Sie können wahrscheinlich jeden Ordner verwenden, in dem Sie Ihre vordefinierten Bibliotheken speichern möchten.

Ich habe ein funktionierendes Sample auf github (nicht meins) gefunden: Ссылка

    
grunk 23.11.2016 14:50
quelle
0

Ich hatte das gleiche Problem. Gradle verpackt keine .so-Dateien in apk, während ich CMakeLists.txt korrekt gefüllt habe, aber schließlich habe ich es gelöst.

Fügen Sie den JniLibs-Pfad als Beispielcode zu sourceSets in local build.gradle hinzu: Ссылка was @Gerry im Kommentar erwähnt wird.

Ich habe:

  1. Kopieren Sie .so-Bibliotheken in src / main / JniLibs / $ {ANDROID_ABI}.

    ex) mobil / src / main / JniLibs / armeabi-v7a / libavcodec.so

  1. Bearbeiten Sie CMakeLists.txt

CMakeLists.txt

%Vor%
  1. in build.gradle (app)

build.gradle

%Vor%

hoffe es hilft dir.

ps. Ich habe FFMPEG-Bibliotheken verwendet, die mich selbst gebaut haben.

    
Kugi 16.10.2017 07:52
quelle

Tags und Links