Java Android-运行应用程序时加载JNI库时出错

Java Android-运行应用程序时加载JNI库时出错,java,android,java-native-interface,emotion,affdex-sdk,Java,Android,Java Native Interface,Emotion,Affdex Sdk,我安装了Affdex sdk,我正在尝试在我的Nexus5上运行 我在尝试运行应用程序时遇到以下异常 07-23 11:16:19.020: D/dalvikvm(830): Not late-enabling CheckJNI (already on) 07-23 11:16:23.280: D/AndroidRuntime(830): Shutting down VM 07-23 11:16:23.280: W/dalvikvm(830): threadid=1: thread exitin

我安装了Affdex sdk,我正在尝试在我的Nexus5上运行

我在尝试运行应用程序时遇到以下异常

07-23 11:16:19.020: D/dalvikvm(830): Not late-enabling CheckJNI (already on)
07-23 11:16:23.280: D/AndroidRuntime(830): Shutting down VM
07-23 11:16:23.280: W/dalvikvm(830): threadid=1: thread exiting with uncaught exception (group=0xada4aba8)
07-23 11:16:23.390: E/AndroidRuntime(830): FATAL EXCEPTION: main
07-23 11:16:23.390: E/AndroidRuntime(830): Process: com.affectiva.android.affdex.measureup, PID: 830
07-23 11:16:23.390: E/AndroidRuntime(830): java.lang.UnsatisfiedLinkError: Couldn't load affdexface_jni from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.affectiva.android.affdex.measureup-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.affectiva.android.affdex.measureup-1, /system/lib]]]: findLibrary returned null
07-23 11:16:23.390: E/AndroidRuntime(830):  at java.lang.Runtime.loadLibrary(Runtime.java:358)
07-23 11:16:23.390: E/AndroidRuntime(830):  at java.lang.System.loadLibrary(System.java:526)
07-23 11:16:23.390: E/AndroidRuntime(830):  at com.affectiva.android.affdex.sdk.detector.AffdexFaceJNI.<clinit>(AffdexFaceJNI.java:21)
07-23 11:16:23.390: E/AndroidRuntime(830):  at com.affectiva.android.affdex.sdk.detector.AffdexFaceJNI$$InjectAdapter.get(AffdexFaceJNI$$InjectAdapter.java:27)
07-23 11:16:23.390: E/AndroidRuntime(830):  at com.affectiva.android.affdex.sdk.detector.AffdexFaceJNI$$InjectAdapter.get(AffdexFaceJNI$$InjectAdapter.java:14)

这很可能是由于项目配置和导入库文件的方式错误造成的

如果您正在Gradle中构建项目,则需要遵循如下所示的类似结构:

AffdexGradleProject
`-- app
|-- jniLibs
|   `-- armeabi-v7a
|       `-- libaffdexface_jni.so
|-- libs
|   |-- Affdex-sdk.jar
|   `-- Affdex-sdk-javadoc.jar
`-- src
|-- main
|   |-- assets
|   |   `-- Affdex
|   |       |-- Classifiers.v_9
|   |       |   `-- ...
|   |       `-- Affectiva.licence
|   |-- java
|   |   `-- ...
|   |-- res
|   |   `-- ...
|   `-- AndroidManifest.xml
|-- app.iml
`-- build.gradle
只要您的项目正确配置为引用libs和jniLibs文件夹,libs和jniLibs文件夹的位置实际上并不重要

下面是build.gradle的一段代码,它引用了上面libs和jniLibs的位置进行比较:

android {
    ...

    sourceSets {
        main {
            jniLibs.srcDirs = ['jniLibs']
            jni.srcDirs = [] //disable automatic ndk-build
        }
    }
    ndk {
        abiFilters “armeabi-v7a”, ... (what ever other architecture types additional libraries are using)
    }
}

dependencies {
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.squareup.dagger:dagger:1.2.2'
    compile 'javax.inject:javax.inject:1'
    compile files('libs/Affdex-sdk.jar')
    compile files('libs/Affdex-sdk-javadoc.jar')
}

确保本机affdexface_jni库是作为APK的一部分构建和部署的。