-
Notifications
You must be signed in to change notification settings - Fork 16
Description
Before creating a new issue, please confirm:
- I have searched for duplicate or closed issues.
- I have read the guide for submitting bug reports.
Which UI component?
Liveness
Gradle script dependencies
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.4'
// FaceLivenessDetector dependency
implementation 'com.amplifyframework.ui:liveness:1.6.0'
// Amplify Auth dependency (unnecessary if using your own credentials provider)
implementation 'com.amplifyframework:aws-auth-cognito:2.29.0'
// Material3 dependency for theming FaceLivenessDetector
implementation 'androidx.compose.material3:material3:1.1.2'
// Support for Java 8 features
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
implementation "androidx.activity:activity-ktx:1.8.1"
implementation 'androidx.activity:activity-compose:1.4.0'
implementation "com.android.billingclient:billing:6.1.0"
Environment information
------------------------------------------------------------
Gradle 8.10.2
------------------------------------------------------------
Build time: 2024-09-23 21:28:39 UTC
Revision: 415adb9e06a516c44b391edff552fd42139443f7
Kotlin: 1.9.24
Groovy: 3.0.22
Ant: Apache Ant(TM) version 1.10.14 compiled on August 16 2023
Launcher JVM: 23.0.2 (Homebrew 23.0.2)
Daemon JVM: /opt/homebrew/Cellar/openjdk/23.0.2/libexec/openjdk.jdk/Contents/Home (no JDK specified, using current Java home)
OS: Mac OS X 15.1 aarch64
Please include any relevant guides or documentation you're referencing
No response
Describe the bug
Android flutter app is crashing on starting AWS liveness verification. issue is related to TensorFlow Failed to load native TensorFlow Lite methods. Check that the correct native libraries are present, and, if using a custom native library, have been properly loaded via System.loadLibrary(): java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "strtod_l" referenced by "/data/app/com.elevn.prod-1/split_config.arm64_v8a.apk!/lib/arm64-v8a/libtensorflowlite_jni.so".
Reproduction steps (if applicable)
No response
Code Snippet
package com.elevn.dating
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.widget.Toast
import androidx.activity.compose.setContent
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Snackbar
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import com.amplifyframework.auth.cognito.AWSCognitoAuthPlugin
import com.amplifyframework.core.Amplify
import com.amplifyframework.ui.liveness.ui.FaceLivenessDetector
import com.amplifyframework.ui.liveness.ui.LivenessColorScheme
class LiveVerificationActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val sessionId = intent.getStringExtra("sessionId") ?: ""
val intent = Intent();
Log.d("here", "starting faceliveness detection")
Log.d("sessionId", sessionId)
getSupportActionBar()?.hide()
setContent {
MaterialTheme(colorScheme = LivenessColorScheme.default()) {
FaceLivenessDetector(
sessionId = sessionId,
region = "ap-south-1",
disableStartView = true,
onComplete = {
Log.i("sucess", "you are in sucess")
// callback?.onCompleteCallback()
intent.putExtra("result", "success");
setResult(Activity.RESULT_OK, intent);
finish();
},
onError = { error ->
intent.putExtra("errorResult", error.message);
setResult(Activity.RESULT_CANCELED, intent);
finish();
})
}
}
}
}
Log output
// Put your logs below this line
Fatal Exception: java.lang.UnsatisfiedLinkError: Failed to load native TensorFlow Lite methods. Check that the correct native libraries are present, and, if using a custom native library, have been properly loaded via System.loadLibrary():
java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "strtod_l" referenced by "/data/app/com.elevn.prod-1/split_config.arm64_v8a.apk!/lib/arm64-v8a/libtensorflowlite_jni.so"...
at org.tensorflow.lite.TensorFlowLite.init(TensorFlowLite.java:137)
at org.tensorflow.lite.NativeInterpreterWrapper.<init>(NativeInterpreterWrapper.java:62)
at org.tensorflow.lite.NativeInterpreterWrapperExperimental.<init>(NativeInterpreterWrapperExperimental.java:36)
at org.tensorflow.lite.Interpreter.<init>(Interpreter.java:230)
at org.tensorflow.lite.Interpreter.<init>(Interpreter.java:214)
at com.amplifyframework.ui.liveness.ml.FaceDetector$Companion.loadModel(FaceDetector.kt:493)
at com.amplifyframework.ui.liveness.camera.FrameAnalyzer.<init>(FrameAnalyzer.kt:39)
at com.amplifyframework.ui.liveness.camera.LivenessCoordinator.<init>(LivenessCoordinator.kt:105)
at com.amplifyframework.ui.liveness.ui.FaceLivenessDetectorKt$ChallengeView$1.invoke(FaceLivenessDetector.kt:203)
at com.amplifyframework.ui.liveness.ui.FaceLivenessDetectorKt$ChallengeView$1.invoke(FaceLivenessDetector.kt:201)
at androidx.compose.runtime.DisposableEffectImpl.onRemembered(Effects.kt:83)
at androidx.compose.runtime.internal.RememberEventDispatcher.dispatchRememberList(RememberEventDispatcher.kt:182)
at androidx.compose.runtime.internal.RememberEventDispatcher.dispatchRememberObservers(RememberEventDispatcher.kt:174)
at androidx.compose.runtime.CompositionImpl.applyChangesInLocked(Composition.kt:1044)
at androidx.compose.runtime.CompositionImpl.applyChanges(Composition.kt:1067)
at androidx.compose.runtime.Recomposer.composeInitial$runtime_release(Recomposer.kt:1159)
at androidx.compose.runtime.CompositionImpl.composeInitial(Composition.kt:677)
at androidx.compose.runtime.CompositionImpl.setContent(Composition.kt:616)
at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:123)
at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:114)
at androidx.compose.ui.platform.AndroidComposeView.setOnViewTreeOwnersAvailable(AndroidComposeView.android.kt:1970)
at androidx.compose.ui.platform.WrappedComposition.setContent(Wrapper.android.kt:114)
at androidx.compose.ui.platform.WrappedComposition.onStateChanged(Wrapper.android.kt:168)
at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.jvm.kt:320)
at androidx.lifecycle.LifecycleRegistry.addObserver(LifecycleRegistry.jvm.kt:198)
at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:121)
at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:114)
at androidx.compose.ui.platform.AndroidComposeView.onAttachedToWindow(AndroidComposeView.android.kt:2049)
at android.view.View.dispatchAttachedToWindow(View.java:15819)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3062)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3069)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3069)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3069)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3069)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3069)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3069)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1950)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1663)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7546)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:942)
at android.view.Choreographer.doCallbacks(Choreographer.java:744)
at android.view.Choreographer.doFrame(Choreographer.java:658)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:928)
at android.os.Handler.handleCallback(Handler.java:836)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:232)
at android.app.ActivityThread.main(ActivityThread.java:6806)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1103)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)
Caused by java.lang.UnsatisfiedLinkError: No implementation found for void org.tensorflow.lite.TensorFlowLite.nativeDoNothing() (tried Java_org_tensorflow_lite_TensorFlowLite_nativeDoNothing and Java_org_tensorflow_lite_TensorFlowLite_nativeDoNothing__)
at org.tensorflow.lite.TensorFlowLite.nativeDoNothing(TensorFlowLite.java)
at org.tensorflow.lite.TensorFlowLite.init(TensorFlowLite.java:132)
at org.tensorflow.lite.NativeInterpreterWrapper.<init>(NativeInterpreterWrapper.java:62)
at org.tensorflow.lite.NativeInterpreterWrapperExperimental.<init>(NativeInterpreterWrapperExperimental.java:36)
at org.tensorflow.lite.Interpreter.<init>(Interpreter.java:230)
at org.tensorflow.lite.Interpreter.<init>(Interpreter.java:214)
at com.amplifyframework.ui.liveness.ml.FaceDetector$Companion.loadModel(FaceDetector.kt:493)
at com.amplifyframework.ui.liveness.camera.FrameAnalyzer.<init>(FrameAnalyzer.kt:39)
at com.amplifyframework.ui.liveness.camera.LivenessCoordinator.<init>(LivenessCoordinator.kt:105)
at com.amplifyframework.ui.liveness.ui.FaceLivenessDetectorKt$ChallengeView$1.invoke(FaceLivenessDetector.kt:203)
at com.amplifyframework.ui.liveness.ui.FaceLivenessDetectorKt$ChallengeView$1.invoke(FaceLivenessDetector.kt:201)
at androidx.compose.runtime.DisposableEffectImpl.onRemembered(Effects.kt:83)
at androidx.compose.runtime.internal.RememberEventDispatcher.dispatchRememberList(RememberEventDispatcher.kt:182)
at androidx.compose.runtime.internal.RememberEventDispatcher.dispatchRememberObservers(RememberEventDispatcher.kt:174)
at androidx.compose.runtime.CompositionImpl.applyChangesInLocked(Composition.kt:1044)
at androidx.compose.runtime.CompositionImpl.applyChanges(Composition.kt:1067)
at androidx.compose.runtime.Recomposer.composeInitial$runtime_release(Recomposer.kt:1159)
at androidx.compose.runtime.CompositionImpl.composeInitial(Composition.kt:677)
at androidx.compose.runtime.CompositionImpl.setContent(Composition.kt:616)
at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:123)
at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:114)
at androidx.compose.ui.platform.AndroidComposeView.setOnViewTreeOwnersAvailable(AndroidComposeView.android.kt:1970)
at androidx.compose.ui.platform.WrappedComposition.setContent(Wrapper.android.kt:114)
at androidx.compose.ui.platform.WrappedComposition.onStateChanged(Wrapper.android.kt:168)
at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.jvm.kt:320)
at androidx.lifecycle.LifecycleRegistry.addObserver(LifecycleRegistry.jvm.kt:198)
at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:121)
at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:114)
at androidx.compose.ui.platform.AndroidComposeView.onAttachedToWindow(AndroidComposeView.android.kt:2049)
at android.view.View.dispatchAttachedToWindow(View.java:15819)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3062)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3069)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3069)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3069)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3069)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3069)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3069)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1950)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1663)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7546)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:942)
at android.view.Choreographer.doCallbacks(Choreographer.java:744)
at android.view.Choreographer.doFrame(Choreographer.java:658)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:928)
at android.os.Handler.handleCallback(Handler.java:836)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:232)
at android.app.ActivityThread.main(ActivityThread.java:6806)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1103)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)
grpc-timer-0:
at java.lang.Object.wait(Object.java)
at java.lang.Thread.parkFor$(Thread.java:2127)
at sun.misc.Unsafe.park(Unsafe.java:325)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:201)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2077)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1103)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1084)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1058)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
Firebase Blocking Thread #3:
at java.lang.Object.wait(Object.java)
at java.lang.Thread.parkFor$(Thread.java:2127)
at sun.misc.Unsafe.park(Unsafe.java:325)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:201)
at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:432)
at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:333)
at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:908)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1057)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at com.google.firebase.concurrent.CustomThreadFactory.lambda$newThread$0(CustomThreadFactory.java:47)
at java.lang.Thread.run(Thread.java:761)
AsyncTask #2:
at java.lang.Object.wait(Object.java)
at java.lang.Thread.parkFor$(Thread.java:2127)
at sun.misc.Unsafe.park(Unsafe.java:325)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:201)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2077)
at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:438)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1057)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
AsyncTask #4:
at java.lang.Object.wait(Object.java)
at java.lang.Thread.parkFor$(Thread.java:2127)
at sun.misc.Unsafe.park(Unsafe.java:325)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:201)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2077)
at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:438)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1057)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
Firebase Background Thread #1:
at dalvik.system.VMStack.getThreadStackTrace(VMStack.java)
at java.lang.Thread.getStackTrace(Thread.java:1566)
at java.lang.Thread.getAllStackTraces(Thread.java:1616)
at com.google.firebase.crashlytics.internal.common.CrashlyticsReportDataCapture.populateThreadsList(CrashlyticsReportDataCapture.java:343)
at com.google.firebase.crashlytics.internal.common.CrashlyticsReportDataCapture.populateExecutionData(CrashlyticsReportDataCapture.java:314)
at com.google.firebase.crashlytics.internal.common.CrashlyticsReportDataCapture.populateEventApplicationData(CrashlyticsReportDataCapture.java:261)
at com.google.firebase.crashlytics.internal.common.CrashlyticsReportDataCapture.captureEventData(CrashlyticsReportDataCapture.java:112)
at com.google.firebase.crashlytics.internal.common.SessionReportingCoordinator.persistEvent(SessionReportingCoordinator.java:336)
at com.google.firebase.crashlytics.internal.common.SessionReportingCoordinator.persistFatalEvent(SessionReportingCoordinator.java:129)
at com.google.firebase.crashlytics.internal.common.CrashlyticsController$2.call(CrashlyticsController.java:209)
at com.google.firebase.crashlytics.internal.common.CrashlyticsController$2.call(CrashlyticsController.java:195)
at com.google.firebase.crashlytics.internal.concurrency.CrashlyticsWorker.lambda$submitTask$2(CrashlyticsWorker.java:118)
at com.google.android.gms.tasks.zze.run(com.google.android.gms:play-services-tasks@@18.1.0:1)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at com.google.firebase.concurrent.CustomThreadFactory.lambda$newThread$0(CustomThreadFactory.java:47)
at java.lang.Thread.run(Thread.java:761)
Configuration File
{
"UserAgent": "aws-amplify-cli/2.0",
"Version": "1.0",
"auth": {
"plugins": {
"awsCognitoAuthPlugin": {
"UserAgent": "aws-amplify-cli/0.1.0",
"Version": "0.1.0",
"IdentityManager": {
"Default": {}
},
"CredentialsProvider": {
"CognitoIdentity": {
"Default": {
"Region": "ap-south-1"
}
}
},
"CognitoUserPool": {
"Default": {
"Region": "ap-south-1"
}
},
"Auth": {
"Default": {
"authenticationFlowType": "USER_SRP_AUTH",
"socialProviders": [],
"usernameAttributes": [
"PHONE_NUMBER"
],
"signupAttributes": [
"EMAIL"
],
"passwordProtectionSettings": {
"passwordPolicyMinLength": 8,
"passwordPolicyCharacters": []
},
"mfaConfiguration": "OFF",
"mfaTypes": [
"SMS"
],
"verificationMechanisms": [
"PHONE_NUMBER"
]
}
}
}
}
}
}
Additional information and screenshots
No response