stripe-android icon indicating copy to clipboard operation
stripe-android copied to clipboard

[BUG] NoSuchMethodError when using AndroidX Lifecycle 2.8.0

Open MrTheGood opened this issue 1 year ago • 2 comments

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

MrTheGood avatar May 24 '24 10:05 MrTheGood

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.

AndrewLotar avatar May 28 '24 20:05 AndrewLotar

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?

samer-stripe avatar Jun 12 '24 19:06 samer-stripe

@MrTheGood please reopen if you're having issues on Lifecycle 2.8.2.

jaynewstrom-stripe avatar Jul 02 '24 18:07 jaynewstrom-stripe

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.

MrTheGood avatar Jul 05 '24 13:07 MrTheGood

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.

Ehsan-Ullah-Tariq avatar Sep 24 '24 13:09 Ehsan-Ullah-Tariq

When updating to lifecycle >= 2.8.0, you also need to update compose to >= 1.6.8

jaynewstrom-stripe avatar Sep 24 '24 13:09 jaynewstrom-stripe

@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.

MrTheGood avatar Sep 25 '24 09:09 MrTheGood