Android Unsatisfied Link mit Gradle Experimental v0.6.0-beta6

Ich habe versucht, ein einfaches Projekt zum Testen des NDK zu erstellen, in dem eine jnilib eine vorgefertigte .so-Bibliothek verwendet, aber es wird immer wieder ein UnsatisfiedLink-Fehler angezeigt:

Mit Emulator:

java.lang.UnsatisfiedLinkError: dlopen failed: library "~/AndroidStudioProjects/HelloAndroidJni/app/src/main/jni/libs/dynamic/x86/libadd.so" not found

Mit aktuellem Gerät:

Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1891]:  1675 could not load needed library '~/AndroidStudioProjects/HelloAndroidJni/app/src/main/jni/libs/dynamic/armeabi/libadd.so' for 'libhello-android-jni.so' (load_library[1093]: Library '~/AndroidStudioProjects/HelloAndroidJni/app/src/main/jni/libs/dynamic/armeabi/libadd.so' not found)

Die .so-Bibliothek verfügt über eine einzige Funktion "add", mit der 2 Zahlen hinzugefügt werden. Ich habe es mit der eigenständigen NDK-Toolchain für verschiedene ABI kompiliert doc):

add.c
#include "add.h"

int add(int x, int y){
    return x + y;
}

Meine jni (.c-Datei):

#include <jni.h>
#include "add.h"


JNIEXPORT jint JNICALL
Java_com_example_tomas_helloandroidjni_MainActivity_addNumbersJni(JNIEnv *env, jobject instance,
                                                                  jint n1, jint n2) {

    return add(n1, n2);
}

Meine Dateistruktur sieht so aus:

Und meine gradle-Datei (wie im @ definierexperimental gradle guide):

    apply plugin: 'com.android.model.application'

model {

    repositories {
        libs(PrebuiltLibraries) {
            libadd{
                headers.srcDir "src/main/jni/prebuilts/include"
                binaries.withType(SharedLibraryBinary) {
                    sharedLibraryFile = file("src/main/jni/libs/dynamic/${targetPlatform.getName()}/libadd.so")

                }
            }
        }
    }

    android {
        compileSdkVersion = 23
        buildToolsVersion = "23.0.2"


        sources {
            main {
                jni {
                    dependencies {
                        library "libadd" linkage "shared"
                    }
                }
            }
        }

        ndk {
            moduleName = "hello-android-jni"
            debuggable = true
        }

        defaultConfig.with {
            applicationId = "com.example.tomas.helloandroidjni"
            minSdkVersion.apiLevel = 15
            targetSdkVersion.apiLevel = 23
            versionCode = 1
            versionName = "1.0"
        }

        buildTypes {
            release {
                minifyEnabled = false
                proguardFiles.add(file("proguard-android.txt"))

            }
        }

        productFlavors {
            create ("x86"){
                ndk.abiFilters.add("x86")
            }

            create("arm"){
                ndk.abiFilters.add("armeabi")
            }

            create("arm7"){
                ndk.abiFilters.add("armeabi-v7a")
            }
            create ("fat"){

            }
        }

    }

}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.2.0'
}

Ich bin mir nicht sicher, wohin ich schauen soll, da ich immer wieder diese Fehlermeldung erhalte ... Vielleicht muss ich eine Flagge hinzufügen oder so?

Vielen Dank im Voraus für jeden Rat!

EDIT 1.

Ich habe es mit statischen Bibliotheken versucht und sie funktionieren einwandfrei. Infolge des Hinzufügens der statischen Bibliotheken habe ich die Ordnerstruktur leicht geändert (und die Gradle-Datei entsprechend angepasst).

Ich arbeite an beiden:

Tatsächliches Gerät:Samsung GT-I8190L Android 4.1.2, API 16 - ARMv7-Prozessor, Version 1 (v7l)Emulator:Nexus 4 API 23 - x86

EDIT 2.

Um die Bibliotheken zu kompilieren, mache ich das mit demNDK Standalone Toolchain:

Tatsächliches Gerät (ARMv7): SYSROOT = $ NDK / platform / android-21 / arch-arm undCC = "$ NDK / toolchains / arm-linux-androideabi-4.8 / vorgefertigt / darwin-x86_64 / bin / arm-linux-androideabi-gcc-4.8 --sysroot = $ SYSROOT"

Emulator (x86): SYSROOT = $ NDK / platform / android-21 / arch-x86 undCC = "/ Users / Tomas / Library / Android / android-ndk-r10e / toolchains / x86-4.8 / vorgefertigt / darwin-x86_64 / bin / i686-linux-android-gcc-4.8 --sysroot = $ SYSROOT"

Antworten auf die Frage(2)

Ihre Antwort auf die Frage