在为android设置affdex sdk之后,它在armv7设备上运行得很好,但是每当我试图在armv8设备上运行该应用程序时,它都不工作,并出现以下错误:
致命异常:java.lang.UnsatisfiedLink错误
dalvik.system.pathclassloader[dexpathlist[[zip文件
“/data/app/myprojec-1/base.apk”],国家图书馆目录=[/data/app/myproject-1/lib/arm64,
/供应商/lib64,/system/lib64]]]找不到“libaffdexface_jni.so”
错误发生在本地库中:
com.affectiva.android.affdex.sdk.detector.affdexfacejni.
(AffDeExffEngIn.java:22)

最佳答案

每个使用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')
}

如果上述操作失败,您可以通过在所使用的detector对象的构造函数周围以及对detector.start()的调用周围放置try/catch块来捕获错误并针对潜在的初始化错误进行防御性编程。如果捕获未满足的linkerror,然后稍后检查空检测器实例,您将知道此时无法进行情感检测。

关于android - java.lang.UnsatisfiedLinkError CameraDetector仅适用于ARMv7设备,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34192802/

10-10 13:13