简体   繁体   中英

sinch force close on application start on android lollipop

please help me, I'm using sinch sdk in my app and it's running normally on all android platforms except android lollipop, it force closes when ever i try to open it. here is the log:

12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] JNI DETECTED ERROR IN APPLICATION: attempt to return an instance of com.sinch.android.rtc.internal.natives.jni.NativeServiceProviderImpl from com.sinch.android.rtc.internal.natives.jni.NativeServiceProviderImpl com.sinch.android.rtc.internal.natives.jni.ServiceProviderFactory.createServiceProvider(com.sinch.android.rtc.internal.service.dispatcher.Dispatcher, com.sinch.android.rtc.internal.service.http.HttpService, com.sinch.android.rtc.internal.service.pubnub.PubSubClient, com.sinch.android.rtc.internal.service.uniqueid.UniqueId, com.sinch.android.rtc.internal.service.crypto.CryptoService, com.sinch.android.rtc.internal.service.persistence.PersistenceService)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] from com.sinch.android.rtc.internal.natives.jni.NativeServiceProviderImpl com.sinch.android.rtc.internal.natives.jni.ServiceProviderFactory.createServiceProvider(com.sinch.android.rtc.internal.service.dispatcher.Dispatcher, com.sinch.android.rtc.internal.service.http.HttpService, com.sinch.android.rtc.internal.service.pubnub.PubSubClient, com.sinch.android.rtc.internal.service.uniqueid.UniqueId, com.sinch.android.rtc.internal.service.crypto.CryptoService, com.sinch.android.rtc.internal.service.persistence.PersistenceService)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] "main" prio=5 tid=1 Runnable
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] | group="main" sCount=0 dsCount=0 obj=0x86eafef0 self=0xb4e07800
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] | sysTid=5423 nice=-11 cgrp=apps sched=0/0 handle=0xb6f5aec8
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] | state=R schedstat=( 284397663 94742126 1467 ) utm=18 stm=10 core=2 HZ=100
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] | stack=0xbe5dc000-0xbe5de000 stackSize=8MB
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] | held mutexes= "mutator lock"(shared held)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] native: #00 pc 00004640 /system/lib/libbacktrace_libc++.so (UnwindCurrent::Unwind(unsigned int, ucontext)+23)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] native: #1 pc 00002e8d /system/lib/libbacktrace_libc++.so (Backtrace::Unwind(unsigned int, ucontext)+8)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] native: #2 pc 00244bd9 /system/lib/libart.so (art::DumpNativeStack(std::__1::basic_ostream >&, int, char const, art::mirror::ArtMethod)+68)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] native: #3 pc 0022997f /system/lib/libart.so (art::Thread::Dump(std::__1::basic_ostream >&) const+146)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] native: #4 pc 000b0cdb /system/lib/libart.so (art::JniAbort(char const, char const)+582)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] native: #5 pc 000b1415 /system/lib/libart.so (art::JniAbortF(char const, char const, ...)+60)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] native: #6 pc 002634ff /system/lib/libart.so (art::CheckReferenceResult(art::mirror::Object, art::Thread)+486)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] native: #07 pc 000874f3 /system/lib/libart.so (art::JniMethodEndWithReference(_jobject, unsigned int, art::Thread)+62)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] native: #08 pc 002dfdf1 /data/dalvik-cache/arm/data@app@com.galsa.example-2@base.apk@classes.dex (Java_com_sinch_android_rtc_internal_natives_jni_ServiceProviderFactory_createServiceProvider__Lcom_sinch_android_rtc_internal_service_dispatcher_Dispatcher_2Lcom_sinch_android_rtc_internal_service_http_HttpService_2Lcom_sinch_android_rtc_internal_service_pubnub_PubSubClient_2Lcom_sinch_android_rtc_internal_service_uniqueid_UniqueId_2Lcom_sinch_android_rtc_internal_service_crypto_CryptoService_2Lcom_sinch_android_rtc_internal_service_persistence_PersistenceService_2+240)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] at com.sinch.android.rtc.internal.natives.jni.ServiceProviderFactory.createServiceProvider(Native method)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] at com.sinch.android.rtc.internal.service.serviceprovider.DefaultServiceProvider.(DefaultServiceProvider.java:24)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] at com.sinch.android.rtc.internal.client.DefaultSinchClient.(DefaultSinchClient.java:147)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] at com.sinch.android.rtc.internal.client.InternalSinchClientFactory.createSinchClient(InternalSinchClientFactory.java:17)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] - locked (a java.lang.Class)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] at com.sinch.android.rtc.DefaultSinchClientBuilder.build(DefaultSinchClientBuilder.java:95)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] at call.SinchClientService.startSinchClient(SinchClientService.java:194)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] at call.SinchClientService.onCreate(SinchClientService.java:138)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] at android.app.ActivityThread.handleCreateService(ActivityThread.java:3102)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] at android.app.ActivityThread.access$1900(ActivityThread.java:172)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1505)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] at android.os.Handler.dispatchMessage(Handler.java:102)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] at android.os.Looper.loop(Looper.java:145)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] at android.app.ActivityThread.main(ActivityThread.java:5834)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] at java.lang.reflect.Method.invoke!(Native method)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] at java.lang.reflect.Method.invoke(Method.java:372)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
12-26 01:33:00.577: A/art(5423): art/runtime/check_jni.cc:65]

help would be appreciated.

I'm assuming you are only seeing this on Galaxy S5, if not, please let me know.

Based on my research Samsung has done something to the install process (dex2oat etc) or to ART that makes it behave differently from every other manufacturer out there.

For whatever reason, for a given class A any object that is instantiated from a JNI layer is reported as being of a different class compared to an object that is instantiated from plain Java.
This works fine when CheckJNI is disabled because the classes are actually identical, but when CheckJNI is enabled it complains (when debugging this it seems that any class instantiated from the JNI layer on S5 is actually part of a different dexcache -- this is not the case on eg Nexus 5 running L).

TL;DR : CheckJNI seems to malfunction on S5 with Android L. Building the app in release mode disables CheckJNI and everything works as expected.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM