2015-12-10 115 views
3

爲Android設置Affdex SDK之後它在ARMv7設備中工作正常,但每當我嘗試在ARMv8設備中運行應用程序時,它都不起作用,並且出現此錯誤:java.lang.UnsatisfiedLinkError CameraDetector僅適用於ARMv7設備

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)

回答

0

使用ARMv8的每臺設備都聲稱,它也向後兼容ARMv7的。

這很可能是由於項目配置和導入庫文件的錯誤導致的。

如果您正在構建您的項目在搖籃,你需要遵循類似的結構如下所示:

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 

的庫和jniLibs文件夾的位置並不真正重要,只要你的項目配置適當地引用它們。

這裏是引用庫和上述jniLibs的位置進行比較的build.gradle的片段:

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塊,並圍繞對detector.start()的調用,防禦性地編程潛在的初始化錯誤。如果您捕獲UnsatisfiedLinkError,然後再檢查一個空檢測器實例,您將知道此時情感檢測不可用。

相關問題