CameraDetector仅适用于ARMv7设备,java.lang.UnsatisfiedLinkError

3
在为 Android 设置 Affdex SDK 后,它在 ARMv7 设备上工作正常,但是当我尝试在 ARMv8 设备上运行应用程序时,它不能运行并显示以下错误信息:
``` Fatal Exception: java.lang.UnsatisfiedLinkError dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/myprojec-1/base.apk"],nativeLibraryDirectories=[/data/app/myproject-1/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libaffdexface_jni.so" ```
该错误出现在以下本地库中:
``` com.affectiva.android.affdex.sdk.detector.AffdexFaceJNI. (AffdexFaceJNI.java:22) ```
1个回答

0

使用ARMv8的每个设备都声称它也向后兼容ARMv7。

这很可能是由于项目配置错误以及导入库文件的方式不正确所致。

如果您正在使用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文件夹的位置并不重要。

以下是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')
}


如果上述方法失败,您可以通过在使用检测器对象的构造函数周围放置try/catch块,并在调用detector.start()时也这样做,来捕获错误并防御性地编写程序以避免潜在的初始化错误。如果您捕获了UnsatisfiedLinkError,然后稍后检查null检测器实例,您将知道此时情感检测不可用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接