在设置适用于Android的Affdex SDK之后它在ARMv7设备中运行良好,但每当我尝试在ARMv8设备中运行该应用程序时,它都无法正常工作并发出此错误:
致命异常:java.lang.UnsatisfiedLinkError dalvik.system.PathClassLoader [DexPathList [[zip文件 " /data/app/myprojec-1/base.apk"],nativeLibraryDirectories = [/数据/应用/ myproject的-1 / LIB / arm64, / vendor / lib64,/ system / lib64]]]无法找到" libaffdexface_jni.so"
错误发生在本地库中:
com.affectiva.android.affdex.sdk.detector.AffdexFaceJNI。 (AffdexFaceJNI.java:22)
答案 0 :(得分: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')
}
如果上述操作失败,您可以通过在正在使用的Detector对象的构造函数周围放置一个try / catch块,以及对detect.start()的调用来捕获错误并防御性地编写潜在的初始化错误。如果您捕获UnsatisfiedLinkError,然后检查空检测器实例,您将知道此时情绪检测不可用。