Wie kann ich * .so Bibliothek in Android Studio einbeziehen?

Ich lese viele Threads, wie man eine * .so-Bibliothek zu Android Studio hinzufügt, aber keiner von ihnen funktioniert, besonders wenn es um den Text geht: Das funktioniert nicht mit dem neueren xxx (Android Studio, gradle, …)

Können wir bitte einen Neuanfang machen? Ich habe:

  • Android-Geräte mit Drucksensor
  • Glänzender Farbverlauf mit androider Zieh-Xml
  • Facebook SDK 4.7.0 logs ClassNotFoundException für AppEventsLogger
  • Google Maps werden nicht im signierten apk angezeigt
  • Android x86 Emulator extrem langsam
  • Bekomme die Android-Berechtigung dynamisch
  • Android Studio 0.6.0

    Aus Projektstruktur sehe ich:

    SDK Ort:

    /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 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 bei der Demo-App arbeiten sie. Ich muss den Quellcode der App ändern, also muss ich mit den gleichen * .so Dateien wieder aufbauen.

  • Wie benutzt man DatePickerDialog als Präferenz
  • Android - Gridview mit benutzerdefiniertem BaseAdapter, create onclicklistener
  • Bold Worte in einer Zeichenfolge von strings.xml in Android
  • Nicht in der Lage, xmpp-Verbindung zwischen meinem App-Server und GCM CCS mit XMPPHP-Bibliothek zu machen
  • Wie kann ich in RecyclerView klebrige Header machen? (Ohne externe lib)
  • Wie sicher ist Vorrecht gegen Reverse Engineering?
  • 7 Solutions collect form web for “Wie kann ich * .so Bibliothek in Android Studio einbeziehen?”

    Erstellen Sie neue Ordner project/app/src/main/jniLibs und legen Sie dann Ihre *.so Dateien mit seinen abi Ordner an diesen Ort.

    Veraltete Lösung

    Füge beide Code-Snippets in deinem Modul gradle.build-Datei als Abhängigkeit hinzu:

     compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar') 

    Wie man dieses benutzerdefinierte Glas schafft:

     task nativeLibsToJar(type: Jar, description: 'create a jar archive of the native libs') { destinationDir file("$buildDir/native-libs") baseName 'native-libs' from fileTree(dir: 'libs', include: '**/*.so') into 'lib/' } tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn(nativeLibsToJar) } 

    Gleiche Antwort kann auch in verwandter Frage gefunden werden: Include .so Bibliothek in apk in android studio

    Hinzufügen von .so Bibliothek in Android Studio 1.0.2

    1. Ordner erstellen "jniLibs" innerhalb "src / main /"
    2. Setzen Sie alle Ihre .so Bibliotheken in "src / main / jniLibs" Ordner
    3. Folderstruktur sieht aus wie,
      | –app:
      | – | –src:
      | – | – | –main
      | – | – | – | –jniLibs
      | – | – | – | – | –armeabi
      | – | – | – | – | – | –
      | – | – | – | – | –x86
      | – | – | – | – | – | –
    4. Kein zusätzlicher Code erfordert nur Synchronisierung deines Projekts und laufe deine Anwendung.

      Referenz
      https://github.com/commonsguy/sqlcipher-gradle/tree/master/src/main

    * .so Bibliothek in Android Studio

    Sie müssen jniLibs Ordner innerhalb main in androiden Studio-Projekten generieren und setzen Sie alle .so Dateien innen. Sie können diese Zeile auch in build.gradle integrieren

    Compile fileTree (dir: 'libs', include: [' .jar', ' .so'))

    Es ist perfekt

    | –app:

    | – | –src:

    | – | – | –main

    | – | – | – | –jniLibs

    | – | – | – | – | –armeabi

    | – | – | – | – | – | –

    Dies ist die Projektstruktur.

    Lösung 1: Erstellen eines JniLibs-Ordners

    Erstellen Sie einen Ordner namens "jniLibs" in Ihre App und die Ordner mit Ihrem * .so innen. Der Ordner "jniLibs" muss im selben Ordner wie die Ordner "Java" oder "Assets" erstellt werden.

    Lösung 2: Änderung der build.gradle-Datei

    Wenn du keinen neuen Ordner erstellen und deine * .so-Dateien in den libs-Ordner aufbewahren willst, ist es möglich!

    In diesem Fall fügen Sie einfach Ihre * .so Dateien in den libs Ordner (bitte respektieren die gleiche Architektur wie die Lösung 1: libs / armeabi / .so zum Beispiel) und ändern Sie die build.gradle Datei Ihrer App, um das Quellverzeichnis hinzuzufügen Der jniLibs

     sourceSets { main { jni.srcDirs = ["libs"] } } 

    Sie haben weitere Erklärungen, mit Screenshots, um Ihnen hier zu helfen (Schritt 6):

    http://blog.guillaumeagis.eu/setup-andengine-with-android-studio/

    Dies ist meine build.gradle Datei, bitte beachten Sie die Zeile

     jniLibs.srcDirs = ['libs'] 

    Dazu gehören libs's * .so-Datei zu apk.

     sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] jniLibs.srcDirs = ['libs'] } // Move the tests to tests/java, tests/res, etc... instrumentTest.setRoot('tests') // Move the build types to build-types/<type> // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ... // This moves them out of them default location under src/<type>/... which would // conflict with src/ being used by the main source set. // Adding new build types or product flavors should be accompanied // by a similar customization. debug.setRoot('build-types/debug') release.setRoot('build-types/release') } 

    So verwenden Sie native-library (so Dateien) Sie müssen einige Codes in der Datei "build.gradle" hinzufügen.

    Dieser Code ist für das Cleaing "armeabi" Verzeichnis und kopieren 'so' Dateien in "armeabi" während "sauberes Projekt".

     task copyJniLibs(type: Copy) { from 'libs/armeabi' into 'src/main/jniLibs/armeabi' } tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn(copyJniLibs) } clean.dependsOn 'cleanCopyJniLibs' 

    Ich habe von der unten erwähnt. https://gist.github.com/pocmo/6461138

    Ich habe ein ähnliches Problem mit externen nativen lib-Abhängigkeiten gelöst, die innerhalb von JAR-Dateien verpackt sind. Manchmal sind diese Architektur-abhängigen Bibliotheken zusammen in einem Glas verpackt, manchmal sind sie in mehrere JAR-Dateien aufgeteilt. So schrieb ich einige buildscript, um die jar-abhängigkeiten für native libs zu scannen und sie in die korrekten androiden lib ordner zu sortieren. Darüber hinaus bietet dies auch einen Weg, um Abhängigkeiten herunterzuladen, die nicht in maven repos gefunden werden, was derzeit nützlich ist, um JNA auf Android zu bekommen, weil nicht alle einheimischen Gläser im öffentlichen Maven Repos veröffentlicht werden.

     android { compileSdkVersion 23 buildToolsVersion '24.0.0' lintOptions { abortOnError false } defaultConfig { applicationId "myappid" minSdkVersion 17 targetSdkVersion 23 versionCode 1 versionName "1.0.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } sourceSets { main { jniLibs.srcDirs = ["src/main/jniLibs", "$buildDir/native-libs"] } } } def urlFile = { url, name -> File file = new File("$buildDir/download/${name}.jar") file.parentFile.mkdirs() if (!file.exists()) { new URL(url).withInputStream { downloadStream -> file.withOutputStream { fileOut -> fileOut << downloadStream } } } files(file.absolutePath) } dependencies { testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.3.0' compile 'com.android.support:design:23.3.0' compile 'net.java.dev.jna:jna:4.2.0' compile urlFile('https://github.com/java-native-access/jna/blob/4.2.2/lib/native/android-arm.jar?raw=true', 'jna-android-arm') compile urlFile('https://github.com/java-native-access/jna/blob/4.2.2/lib/native/android-armv7.jar?raw=true', 'jna-android-armv7') compile urlFile('https://github.com/java-native-access/jna/blob/4.2.2/lib/native/android-aarch64.jar?raw=true', 'jna-android-aarch64') compile urlFile('https://github.com/java-native-access/jna/blob/4.2.2/lib/native/android-x86.jar?raw=true', 'jna-android-x86') compile urlFile('https://github.com/java-native-access/jna/blob/4.2.2/lib/native/android-x86-64.jar?raw=true', 'jna-android-x86_64') compile urlFile('https://github.com/java-native-access/jna/blob/4.2.2/lib/native/android-mips.jar?raw=true', 'jna-android-mips') compile urlFile('https://github.com/java-native-access/jna/blob/4.2.2/lib/native/android-mips64.jar?raw=true', 'jna-android-mips64') } def safeCopy = { src, dst -> File fdst = new File(dst) fdst.parentFile.mkdirs() fdst.bytes = new File(src).bytes } def archFromName = { name -> switch (name) { case ~/.*android-(x86-64|x86_64|amd64).*/: return "x86_64" case ~/.*android-(i386|i686|x86).*/: return "x86" case ~/.*android-(arm64|aarch64).*/: return "arm64-v8a" case ~/.*android-(armhf|armv7|arm-v7|armeabi-v7).*/: return "armeabi-v7a" case ~/.*android-(arm).*/: return "armeabi" case ~/.*android-(mips).*/: return "mips" case ~/.*android-(mips64).*/: return "mips64" default: return null } } task extractNatives << { project.configurations.compile.each { dep -> println "Scanning ${dep.name} for native libs" if (!dep.name.endsWith(".jar")) return zipTree(dep).visit { zDetail -> if (!zDetail.name.endsWith(".so")) return print "\tFound ${zDetail.name}" String arch = archFromName(zDetail.toString()) if(arch != null){ println " -> $arch" safeCopy(zDetail.file.absolutePath, "$buildDir/native-libs/$arch/${zDetail.file.name}") } else { println " -> No valid arch" } } } } preBuild.dependsOn(['extractNatives']) 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.