twilio / voice-quickstart-android

Quickstart app for the Voice Android SDK
https://www.twilio.com/docs/api/voice-sdk/android/getting-started
MIT License
184 stars 140 forks source link

A Twilio library crash: MissingLibraryException #547

Closed AutoBizLineXiaokeWang closed 1 year ago

AutoBizLineXiaokeWang commented 1 year ago

Some of our users encountered the following crash with Twilio-related services:

It may be a twilio library issue.

Crash Info

Fatal Exception: com.getkeepsafe.relinker.MissingLibraryException Could not find 'libtwilio_voice_android_so.so'. Looked for: [arm64-v8a, armeabi-v7a, armeabi], but only found: []. com.getkeepsafe.relinker.ApkLibraryInstaller.installLibrary (ApkLibraryInstaller.java:173) com.getkeepsafe.relinker.ReLinkerInstance.loadLibraryInternal (ReLinkerInstance.java:180) com.getkeepsafe.relinker.ReLinkerInstance.loadLibrary (ReLinkerInstance.java:136) com.getkeepsafe.relinker.ReLinker.loadLibrary (ReLinker.java:70) com.getkeepsafe.relinker.ReLinker.loadLibrary (ReLinker.java:51) com.twilio.voice.Voice.loadLibrary (Voice.java:1233) com.twilio.voice.CallInvite.isValid (CallInvite.java:796) com.twilio.voice.Voice.handleMessage (Voice.java:1289) com.twilio.voice.Voice.handleMessage (Voice.java:901)

We don't have enouth logs to reproduce the crash

Behavior

We are temporarily unable to provide Call SID. From the information we have so far, the crash did not occur during the call, but failed to find the target library when trying to connect with Twilio's library, which eventually led to the crash.

Creash Frequency

in the last 30 days, there are 60 crashes, affecting 13 users;

Versions

Twilio dependency version: com.twilio:voice-android:5.7.2 User devices system: Android 7, 10, 11 ,13 Android Studio Chipmunk | 2021.2.1 Android Build Tools version 30.0.3 Gradle Version 7.2

kbagchiGWC commented 1 year ago

@AutoBizLineXiaokeWang

I have a couple of follow-up questions/suggestions.

  1. Can you provide a symbolicated stack trace?
  2. Are you using apk splits or app bundles?

Thanks!

AutoBizLineXiaokeWang commented 1 year ago

@kbagchiGWC we are using app bundles and you can check the following stack trace:

Crashlytics - Stack trace

Platform: android

Version: 1.2.48 (248)

Fatal Exception: com.getkeepsafe.relinker.MissingLibraryException: Could not find 'libtwilio_voice_android_so.so'. Looked for: [arm64-v8a, armeabi-v7a, armeabi], but only found: []. at com.getkeepsafe.relinker.ApkLibraryInstaller.installLibrary(ApkLibraryInstaller.java:173) at com.getkeepsafe.relinker.ReLinkerInstance.loadLibraryInternal(ReLinkerInstance.java:180) at com.getkeepsafe.relinker.ReLinkerInstance.loadLibrary(ReLinkerInstance.java:136) at com.getkeepsafe.relinker.ReLinker.loadLibrary(ReLinker.java:70) at com.getkeepsafe.relinker.ReLinker.loadLibrary(ReLinker.java:51) at com.twilio.voice.Voice.loadLibrary(Voice.java:1233) at com.twilio.voice.CallInvite.isValid(CallInvite.java:796) at com.twilio.voice.Voice.handleMessage(Voice.java:1289) at com.twilio.voice.Voice.handleMessage(Voice.java:901) at com.mysecondline.app.service.MyFirebaseMessagingService.handleIncomingCallPushMessage(MyFirebaseMessagingService.java:278) at com.mysecondline.app.service.MyFirebaseMessagingService.onMessageReceived(MyFirebaseMessagingService.java:82) at com.google.firebase.messaging.FirebaseMessagingService.dispatchMessage(com.google.firebase:firebase-messaging@@21.0.1:13) at com.google.firebase.messaging.FirebaseMessagingService.passMessageIntentToSdk(com.google.firebase:firebase-messaging@@21.0.1:8) at com.google.firebase.messaging.FirebaseMessagingService.handleMessageIntent(com.google.firebase:firebase-messaging@@21.0.1:3) at com.google.firebase.messaging.FirebaseMessagingService.handleIntent(com.google.firebase:firebase-messaging@@21.0.1:3) at com.google.firebase.messaging.EnhancedIntentService.lambda$processIntent$0$EnhancedIntentService(com.google.firebase:firebase-messaging@@21.0.1:1) at com.google.firebase.messaging.EnhancedIntentService$$Lambda$0.run(EnhancedIntentService.java:6) at com.google.android.play.core.assetpacks.ao.run$bridge(ao.java:6) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at com.google.android.gms.common.util.concurrent.zza.run(com.google.android.gms:play-services-basement@@18.0.0:2) at java.lang.Thread.run(Thread.java:920)

gads-1: at sun.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:230) at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:461) at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362) at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:937) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1091) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:920)

pool-48-thread-4: at sun.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:230) at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:461) at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362) at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:937) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1091) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:920)

pool-48-thread-2: at sun.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:230) at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:461) at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362) at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:937) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1091) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:920)

AdWorker(Schedule) #2: at sun.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:230) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2109) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1132) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:849) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1092) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:920)

kbagchiGWC commented 1 year ago

Hey @AutoBizLineXiaokeWang

I have a couple of follow up questions and suggestions.

  1. Do you know the device's ABI? If the ABI is not one of our supported ABIs (armeabi-v7a, arm64-v8a, x86, x86_64) then this issue could occur.
  2. Does your application follow our proguard guidance? This could also be an instance where proguard is obfuscating the name of the native library which would result in this MissingLibraryException.

Thanks!

AutoBizLineXiaokeWang commented 1 year ago

@kbagchiGWC Thanks! We will check this issue