2014-11-28 2 views
4

liballjoyn_java.so (Android Core SDK에서 here)라는 네이티브 라이브러리를 사용하는 Android 앱을 개발 중입니다. IDE/Maven으로 Android Studio를 사용하고 있습니다 (Gradle 아님). 안드로이드와 킷캣의 모든 매력처럼 일이 내가 내 프로젝트에 라이브러리를 추가하는 방법입니다Android 5.0으로 업데이트 한 후 java.lang.UnsatisfiedLinkError

1) POM 파일에 대한 종속성을 정의 내 로컬 메이븐의 repo

mvn install:install-file -Dfile=./alljoyn/liballjoyn_java.so -DgroupId=org.alljoyn -DartifactId=liballjoyn_java -Dversion=14.06.00 -Dscope=runtime -Dpackaging=so 

2)에 라이브러리를 추가 :

static { 
    try { 
     System.loadLibrary("alljoyn_java"); 
     Log.d("AllJoynManager", "static - Loaded AllJoyn native library"); 
    } catch (Exception exception) { 
     Log.d("AllJoynManager", "static - Error loading AllJoyn native library"); 
     exception.printStackTrace(); 
    } 
} 

이 있었다 :

 <dependency> 
      <groupId>org.alljoyn</groupId> 
      <artifactId>liballjoyn_java</artifactId> 
      <scope>runtime</scope> 
      <type>so</type> 
      <version>14.06.00</version> 
     </dependency> 

3) 내 코드에서 정적을 호출 내 넥서스 4 전화에 킷캣에서 완벽하게 작동하지만 지금은 공식 안드로이드 5.0 OTA 업데이트를 설치하고 난 런타임에 다음과 같은 오류 얻을 :

11-28 17:57:39.988 30068-30068/com.avispalabs.kiihome E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.avispalabs.kiihome, PID: 30068 
    java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.avispalabs.kiihome-2/base.apk"],nativeLibraryDirectories=[/data/app/com.avispalabs.kiihome-2/lib/arm, /vendor/lib, /system/lib]]] couldn't find "liballjoyn_java.so" 
      at java.lang.Runtime.loadLibrary(Runtime.java:366) 
      at java.lang.System.loadLibrary(System.java:989) 
      at com.avispalabs.kiihome.helpers.network.alljoyn.AlljoynManager.<clinit>(AlljoynManager.java:38) 
      at com.avispalabs.kiihome.ui.activities.MainActivity.<init>(MainActivity.java:38) 
      at java.lang.reflect.Constructor.newInstance(Native Method) 
      at java.lang.Class.newInstance(Class.java:1572) 
      at android.app.Instrumentation.newActivity(Instrumentation.java:1065) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
      at android.app.ActivityThread.access$800(ActivityThread.java:144) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5221) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
11-28 17:57:55.432 30068-30068/com.avispalabs.kiihome I/Process﹕ Sending signal. PID: 30068 SIG: 9 

내가 의심하는 .so 라이브러리는 방법으로 컴파일되었을 수 있습니다 어떻게 든 새로운 Android 5.0 ART (?)와 호환되지 않습니다. 라이브러리를 찾을 수 없다는 메시지는 오해의 소지가 있습니다 (라이브러리가로드되지 않는 경우에도 예외가 표시됩니다). 그러나 확실하지는 않습니다. 또 다른 가능성은 .so가 올바르게 추출되거나 배치되지 않은 것입니다.

라이브러리는 사전 컴파일되어 제공되며 JellyBean과 호환되도록 광고됩니다. 이전 동적 라이브러리가 Android의 새 버전과 호환 될 것이라고 생각했습니다. 그렇지 않으면 많은 앱이 중단 될 것입니다. KitKat을 사용하여 Nexus 4에 동일한 APK를 설치하면 작동합니다.

모든 조언을 매우 높이 평가합니다.

업데이트 : KitKat 기반 장치에서 프로젝트를 테스트하고 Dalvik 대신 ART로 런타임을 전환 했으므로 프로젝트가 올바르게 작동합니다. 이 문제는 ART 자체보다는 Android 5와 관련이있는 것 같습니다.

+1

"나는 그냥 작동 킷캣과 넥서스 4와 같은 APK를 설치하는 경우"- 당신은 넥서스 4에 개발자 옵션에서 ART를 사용 했습니까? 그렇지 않다면 시도하십시오. ART가 가장 가능성있는 범죄자이며 업데이트 된 라이브러리를 받아야합니다. http://developer.android.com/guide/practices/verifying-apps-art.html – CommonsWare

+0

Nexus 4에서 ART를 사용하도록 설정하면 ART가 범인이라면 KitKat이이 문제를 일으켜야합니까? 나는 그것을 시험해보고 무슨 일이 일어날 지 알 수 있습니다 ... – German

+1

"ART가 범인이라면 KitKat이있는 Nexus 4에서 ART를 활성화하면이 문제가 발생합니다." -- 예. 이제 ART 자체가 4.4에서 5.0 사이로 변경되었을 가능성이 있으므로 문제가 5.0 ART에만 적용될 수 있습니다. 그러나 앱이 Dalvik과 4.4에서 작동하고 ART로 4.4에서 실패하는 경우 문제가 ART와 관련되어 있다는 것은 매우 긍정적 인 신호입니다. – CommonsWare

답변

관련 문제