【问题标题】:java.lang.UnsatisfiedLinkError CameraDetector works only on ARMv7 devicesjava.lang.UnsatisfiedLinkError CameraDetector 仅适用于 ARMv7 设备
【发布时间】:2016-03-15 13:14:58
【问题描述】:

在为 Android 设置 Affdex SDK 后,它在 ARMv7 设备上运行良好,但每当我尝试在 ARMv8 设备上运行该应用程序时,它就无法运行并出现此错误:

致命异常:java.lang.UnsatisfiedLinkError dalvik.system.PathClassLoader[DexPathList[[zip 文件 "/data/app/myprojec-1/base.apk"],nativeLibraryDirectories=[/data/app/myproject-1/lib/arm64, /vendor/lib64, /system/lib64]]] 找不到“libaffdexface_jni.so”

错误发生在本机库中:

com.affectiva.android.affdex.sdk.detector.AffdexFaceJNI。 (AffdexFaceJNI.java:22)

【问题讨论】:

    标签: android affdex-sdk


    【解决方案1】:

    每个使用 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 的 sn-p,它引用了上面的 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 对象的构造函数周围放置一个 try/catch 块以及对检测器.start() 的调用来捕获错误并针对潜在的初始化错误进行防御性编程。如果您捕获 UnsatisfiedLinkError,然后检查空检测器实例,您将知道此时情绪检测不可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-29
      • 1970-01-01
      • 2014-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-13
      • 2013-05-27
      相关资源
      最近更新 更多