stripe-android
stripe-android copied to clipboard
[BUG] NoSuchMethodError when using AndroidX Lifecycle 2.8.0
Summary
When opening a PaymentSheet, a NoSuchMethodError is thrown after upgrading AndroidX Lifecycle to version 2.8.0.
Android version
Android 12
Impacted devices
Only tested on OnePlus HD1903
Installation method
Gradle dependency
Dependency Versions
Kotlin: 2.0.0
Stripe-Android: 20.44.0
AGP: 8.4.1
Gradle: 8.6
Crashlog
java.lang.NoSuchMethodError: No static method performImeAction$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)V in class Landroidx/compose/ui/semantics/SemanticsPropertiesKt; or its super classes (declaration of 'androidx.compose.ui.semantics.SemanticsPropertiesKt' appears in /data/app/~~iQEf7J18Ui3OJsw60nZNjQ==/app.example.debug-nKeBMoXjQ_9j77YI2kxfHw==/base.apk)
at androidx.compose.foundation.text.CoreTextFieldKt$CoreTextField$semanticsModifier$1.invoke(CoreTextField.kt:532)
at androidx.compose.foundation.text.CoreTextFieldKt$CoreTextField$semanticsModifier$1.invoke(CoreTextField.kt:433)
at androidx.compose.ui.semantics.CoreSemanticsModifierNode.applySemantics(SemanticsModifier.kt:73)
at androidx.compose.ui.node.LayoutNode$collapsedSemantics$1.invoke(LayoutNode.kt:430)
at androidx.compose.ui.node.LayoutNode$collapsedSemantics$1.invoke(LayoutNode.kt:421)
at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:2303)
at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:500)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:256)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:133)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeSemanticsReads$ui_release(OwnerSnapshotObserver.kt:121)
at androidx.compose.ui.node.LayoutNode.getCollapsedSemantics$ui_release(LayoutNode.kt:421)
at androidx.compose.ui.semantics.SemanticsNodeKt.SemanticsNode(SemanticsNode.kt:48)
at androidx.compose.ui.semantics.SemanticsNode.fillOneLayerOfSemanticsWrappers(SemanticsNode.kt:268)
at androidx.compose.ui.semantics.SemanticsNode.fillOneLayerOfSemanticsWrappers(SemanticsNode.kt:270)
at androidx.compose.ui.semantics.SemanticsNode.unmergedChildren$ui_release(SemanticsNode.kt:248)
at androidx.compose.ui.semantics.SemanticsNode.getChildren(SemanticsNode.kt:327)
at androidx.compose.ui.semantics.SemanticsNode.getChildren(SemanticsNode.kt:285)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.geometryDepthFirstSearch(AndroidComposeViewAccessibilityDelegateCompat.android.kt:715)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.subtreeSortedByGeometryGrouping(AndroidComposeViewAccessibilityDelegateCompat.android.kt:743)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.geometryDepthFirstSearch(AndroidComposeViewAccessibilityDelegateCompat.android.kt:714)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.geometryDepthFirstSearch(AndroidComposeViewAccessibilityDelegateCompat.android.kt:721)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.subtreeSortedByGeometryGrouping(AndroidComposeViewAccessibilityDelegateCompat.android.kt:743)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.geometryDepthFirstSearch(AndroidComposeViewAccessibilityDelegateCompat.android.kt:714)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.geometryDepthFirstSearch(AndroidComposeViewAccessibilityDelegateCompat.android.kt:721)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.subtreeSortedByGeometryGrouping(AndroidComposeViewAccessibilityDelegateCompat.android.kt:743)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.setTraversalValues(AndroidComposeViewAccessibilityDelegateCompat.android.kt:758)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.getCurrentSemanticsNodes(AndroidComposeViewAccessibilityDelegateCompat.android.kt:344)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.createEvent(AndroidComposeViewAccessibilityDelegateCompat.android.kt:1590)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.sendEventForVirtualView(AndroidComposeViewAccessibilityDelegateCompat.android.kt:1532)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.sendEventForVirtualView$default(AndroidComposeViewAccessibilityDelegateCompat.android.kt:1522)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.sendSubtreeChangeAccessibilityEvents(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2348)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.boundsUpdatesEventLoop$ui_release(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2220)
at androidx.compose.ui.platform.AndroidComposeView.boundsUpdatesEventLoop(AndroidComposeView.android.kt:1297)
at androidx.compose.ui.platform.WrappedComposition$setContent$1$1$1.invokeSuspend(Wrapper.android.kt:136)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
at androidx.compose.ui.platform.AndroidUiDispatcher.performTrampolineDispatch(AndroidUiDispatcher.android.kt:81)
at androidx.compose.ui.platform.AndroidUiDispatcher.access$performTrampolineDispatch(AndroidUiDispatcher.android.kt:41)
at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.run(AndroidUiDispatcher.android.kt:57)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:233)
at android.os.Looper.loop(Looper.java:344)
at android.app.ActivityThread.main(ActivityThread.java:8212)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034)
Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [androidx.compose.ui.platform.MotionDurationScaleImpl@da4822, androidx.compose.runtime.BroadcastFrameClock@b3742b3, StandaloneCoroutine{Cancelling}@64c2070, AndroidUiDispatcher@6ec1fe9]6
It works on my device, but I also see this crash on several devices' pre-launch reports from Google Play. It occurs when the stripe window appears.
Looks like Lifecycle 2.8.0 forces Compose to upgrade to 1.7 which isn't stable yet. We are planning on supporting once it is stable. Lifecycle 2.8.2 appears to fix this issue. Can you try upgrading to that?
@MrTheGood please reopen if you're having issues on Lifecycle 2.8.2.
Sorry, I was still investigating a change on our end. I still had issues with Lifecycle 2.8.2, but I just updated to 2.8.3 and that has solved the problem.
Hi, I'm facing this same issue, in 3rd party payment gateway which is using Stripe we have tried several solutions but this issue is still there. We have tried 2.8.2 and 2.8.3 also tried latest 2.8.6 but still issue persists. It is impacting our large user base.
When updating to lifecycle >= 2.8.0, you also need to update compose to >= 1.6.8
@Ehsan-Ullah-Tariq I also recommend using the Compose BOM to ensure that the versions of any Compose libraries in your app are compatible with each other. This issue returned once more for us until we started using the BOM.