Ich habe viele Threads gelesen, wie man eine * .so-Bibliothek zu Android Studio hinzufügt, aber keine davon funktioniert, besonders wenn es um Text geht: Dies funktioniert nicht mit dem neueren xxx (Android Studio, gradle, ...)
Können wir bitte einen Neuanfang machen? Ich habe:
Android Studio 0.6.0
Aus der Projektstruktur sehe ich:
SDK-Speicherort:
/usr/share/android-studio/data/sdk
/usr/lib/jvm/default-java
Projekt:
Gradle version 1.10
Android Plugin Version 0.11.+
Module / App: Eigenschaften:
Kompilieren Sie Sdk Version 19 Build Tools Version 19.1.0
Abhängigkeiten:
{dir=libs, include=[*.jar]} Compile
{dir=libs, include=[*.so]} Provided
m com.android.support: appcompat -v7:19.+ Compile
Ich habe die * .so-Dateien vorkompiliert und in der Demo-App funktionieren sie. Ich muss den Quellcode der App ändern, daher muss ich mit denselben * .so-Dateien neu erstellen.
android
android-studio
Ronald Wiplinger
quelle
quelle
Antworten:
Aktuelle Lösung
Erstellen Sie den Ordner
project/app/src/main/jniLibs
und legen Sie Ihre*.so
Dateien in den abi-Ordnern an diesem Speicherort ab. Z.B,Veraltete Lösung
Fügen Sie beide Codeausschnitte als Abhängigkeit in Ihre Modulklasse gradle.build ein:
So erstellen Sie dieses benutzerdefinierte Glas:
Die gleiche Antwort finden Sie auch in verwandten Fragen: Fügen Sie .so Bibliothek in apk in Android Studio
quelle
Compile
Aufgabe wurde abgelehnt. Verwenden SieJavaCompile
stattdessen (aus verwandten Antworten)jniLibs
Verzeichnispfad im Gradle Plugin Benutzerhandbuch - ProjektstrukturHinzufügen einer .so-Bibliothek in Android Studio 1.0.2
Ordnerstruktur sieht wie folgt aus: | --app:
| - | --src:
| - | - | --main
| - | - | - | --jniLibs
| - | - | - | - | --armeabi
| - | - | - | - | - | -. also Dateien
| - | - | - | - | --x86
| - | - | - | - | - | -. also Dateien
Referenz
https://github.com/commonsguy/sqlcipher-gradle/tree/master/src/main
quelle
Lösung 1: Erstellen eines JniLibs-Ordners
Erstellen Sie einen Ordner mit dem Namen "jniLibs" in Ihrer App und den Ordnern, in denen sich Ihre * .so befindet. Der Ordner "jniLibs" muss im selben Ordner wie Ihre Ordner "Java" oder "Assets" erstellt werden.
Lösung 2: Änderung der Datei build.gradle
Wenn Sie keinen neuen Ordner erstellen und Ihre * .so-Dateien im libs-Ordner behalten möchten, ist dies möglich!
In diesem Fall fügen Sie einfach Ihre * .so-Dateien in den Ordner libs ein (beachten Sie beispielsweise die gleiche Architektur wie in Lösung 1: libs / armeabi / .so) und ändern Sie die Datei build.gradle Ihrer App, um das Quellverzeichnis hinzuzufügen der jniLibs.
Sie erhalten weitere Erklärungen mit Screenshots, die Ihnen hier helfen (Schritt 6):
http://blog.guillaumeagis.eu/setup-andengine-with-android-studio/
BEARBEITEN Es musste jniLibs.srcDirs sein, nicht jni.srcDirs - den Code bearbeitet. Das Verzeichnis kann ein [relativer] Pfad sein, der außerhalb des Projektverzeichnisses verweist.
quelle
source Sets {
Code unter demandroid {
Abschnitt* .so Bibliothek in Android Studio
Sie müssen den Ordner jniLibs in main in Android Studio-Projekten generieren und alle .so-Dateien darin ablegen. Sie können diese Zeile auch in build.gradle integrieren
compile fileTree (dir: 'libs', include: [' .jar', ' .so'])
Es funktioniert perfekt
| --app:
| - | --src:
| - | - | --main
| - | - | - | --jniLibs
| - | - | - | - | --armeabi
| - | - | - | - | - | -. also Dateien
Dies ist die Projektstruktur.
quelle
Dies ist meine build.gradle-Datei. Bitte beachten Sie die Zeile
Dies schließt die * .so-Datei von libs an apk ein.
quelle
Offizielles
hello-libs
CMake-Beispiel für Android NDKhttps://github.com/googlesamples/android-ndk/tree/840858984e1bb8a7fab37c1b7c571efbe7d6eb75/hello-libs
Ich habe gerade für Ubuntu 17.10 Host, Android Studio 3, Android SDK 26 gearbeitet. Ich empfehle daher dringend, dass Sie Ihr Projekt darauf aufbauen.
Die gemeinsam genutzte Bibliothek wird aufgerufen
libgperf
. Die wichtigsten Codeteile sind:hallo-libs / app / src / main / cpp / CMakeLists.txt :
app / build.gradle :
Wenn Sie dann unter
/data/app
auf das Gerät schauen ,libgperf.so
wird auch dort sein.Verwenden Sie in C ++ - Code:
#include <gperf.h>
Header-Position:
hello-libs/distribution/gperf/include/gperf.h
lib location:
distribution/gperf/lib/arm64-v8a/libgperf.so
Wenn Sie nur einige Architekturen unterstützen, lesen Sie: Gradle Build NDK-Ziel nur für ARM
Das Beispiel-Git verfolgt die vorgefertigten gemeinsam genutzten Bibliotheken, enthält jedoch auch das Build-System, um sie tatsächlich zu erstellen: https://github.com/googlesamples/android-ndk/tree/840858984e1bb8a7fab37c1b7c571efbe7d6eb75/hello-libs/gen-libs
quelle
So verwenden Sie die native Bibliothek (also Dateien) Sie müssen der Datei "build.gradle" einige Codes hinzufügen.
Dieser Code dient zum Löschen des Verzeichnisses "armeabi" und zum Kopieren von "so" -Dateien in "armeabi", während "Projekt bereinigen".
Ich wurde von unten verwiesen. https://gist.github.com/pocmo/6461138
quelle
Ich habe ein ähnliches Problem mit externen nativen lib-Abhängigkeiten gelöst, die in JAR-Dateien gepackt sind. Manchmal sind diese architekturabhängigen Bibliotheken zusammen in einem JAR gepackt, manchmal sind sie in mehrere JAR-Dateien aufgeteilt. Also habe ich ein Buildscript geschrieben, um die JAR-Abhängigkeiten nach nativen Bibliotheken zu durchsuchen und sie in die richtigen Android-Lib-Ordner zu sortieren. Darüber hinaus bietet dies auch eine Möglichkeit zum Herunterladen von Abhängigkeiten, die nicht in Maven-Repos gefunden wurden. Dies ist derzeit nützlich, um JNA auf Android zum Laufen zu bringen, da nicht alle nativen Jars in öffentlichen Maven-Repos veröffentlicht werden.
quelle
Ich habe die Lösungen in den obigen Antworten ausprobiert, aber keine hat für mich funktioniert. Ich hatte eine Bibliothek mit .so-, .dll- und .jar-Dateien. Am Ende habe ich dies getan, Sie können die Details hier sehen: https://stackoverflow.com/a/54976458/7392868
Ich habe die .so-Dateien in einen Ordner namens jniLibs kopiert und in den Ordner app / src / main / eingefügt. Für andere Abhängigkeiten habe ich die Notenabhängigkeiten verwendet.
quelle