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

Tap to Pay- Crash at initTerminal when used along with Retrofit

Open MrVipinVijayan opened this issue 10 months ago • 8 comments

I am having below dependencies in my gradle for android

implementation 'com.squareup.retrofit2:retrofit:2.11.0' implementation 'com.squareup.retrofit2:converter-gson:2.11.0'

implementation "com.stripe:stripeterminal:3.4.0" implementation "com.stripe:stripeterminal-localmobile:3.5.0" implementation "com.stripe:stripeterminal-core:3.5.0"

When I call Terminal.initTerminal(mainActivity, logLevel, tokenProvider!!, this)

It crashes with below log shown at the end of the post

Code to reproduce call initTerminal.

Installation method Android - SDK using gradle

SDK version implementation "com.stripe:stripeterminal:3.4.0" implementation "com.stripe:stripeterminal-localmobile:3.5.0" implementation "com.stripe:stripeterminal-core:3.5.0"

Other information Logs FATAL EXCEPTION: main Process: com.madinaapps.madinaappskiosk, PID: 8336 java.lang.ExceptionInInitializerError at java.lang.Class.classForName(Native Method) at java.lang.Class.forName(Class.java:536) at java.lang.Class.forName(Class.java:467) at com.stripe.stripeterminal.dagger.CotsModule.isCotsAdapterIncluded(CotsModule.kt:94) at com.stripe.stripeterminal.dagger.CotsModule_IsCotsAdapterIncludedFactory.isCotsAdapterIncluded(CotsModule_IsCotsAdapterIncludedFactory.java:40) at com.stripe.stripeterminal.dagger.CotsModule_IsCotsAdapterIncludedFactory.get(CotsModule_IsCotsAdapterIncludedFactory.java:32) at com.stripe.stripeterminal.dagger.CotsModule_IsCotsAdapterIncludedFactory.get(CotsModule_IsCotsAdapterIncludedFactory.java:9) at dagger.internal.DoubleCheck.get(DoubleCheck.java:47) at com.stripe.stripeterminal.HttpModule_ProvideOkHttpClientFactory.get(HttpModule_ProvideOkHttpClientFactory.java:39) at com.stripe.stripeterminal.HttpModule_ProvideOkHttpClientFactory.get(HttpModule_ProvideOkHttpClientFactory.java:12) at dagger.internal.DoubleCheck.get(DoubleCheck.java:47) at com.stripe.stripeterminal.dagger.MainlandModule_Companion_ProvideRestClientFactory.get(MainlandModule_Companion_ProvideRestClientFactory.java:69) at com.stripe.stripeterminal.dagger.MainlandModule_Companion_ProvideRestClientFactory.get(MainlandModule_Companion_ProvideRestClientFactory.java:18) at com.stripe.core.transaction.dagger.CoreTransactionModule_ProvideAuthenticatedRestClientFactory.get(CoreTransactionModule_ProvideAuthenticatedRestClientFactory.java:53) at com.stripe.core.transaction.dagger.CoreTransactionModule_ProvideAuthenticatedRestClientFactory.get(CoreTransactionModule_ProvideAuthenticatedRestClientFactory.java:15) at dagger.internal.DoubleCheck.get(DoubleCheck.java:47) at com.stripe.stripeterminal.internal.common.api.ApiClient_Factory.get(ApiClient_Factory.java:43) at com.stripe.stripeterminal.internal.common.api.ApiClient_Factory.get(ApiClient_Factory.java:12) at dagger.internal.DoubleCheck.get(DoubleCheck.java:47) at com.stripe.stripeterminal.DaggerTerminalComponent$TerminalComponentImpl.getCotsAdapter(DaggerTerminalComponent.java:2021) at com.stripe.stripeterminal.Terminal$Companion.initTerminal(Terminal.kt:977) at com.stripe.stripeterminal.Terminal$Companion.initTerminal(Terminal.kt:907) at com.madinaapps.kiosk.screens.StripePaymentFragment.initStripe(StripePaymentFragment.kt:601) at com.madinaapps.kiosk.screens.StripePaymentFragment.access$initStripe(StripePaymentFragment.kt:89) at com.madinaapps.kiosk.screens.StripePaymentFragment$getDonationPriceDetails$1.invoke(StripePaymentFragment.kt:451) at com.madinaapps.kiosk.screens.StripePaymentFragment$getDonationPriceDetails$1.invoke(StripePaymentFragment.kt:416) at com.madinaapps.kiosk.services.ServiceUtil$getPriceDetails$1.onResponse(ServiceUtil.kt:344) at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall$1.lambda$onResponse$0$retrofit2-DefaultCallAdapterFactory$ExecutorCallbackCall$1(DefaultCallAdapterFactory.java:89) at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall$1$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0) at android.os.Handler.handleCallback(Handler.java:959) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loopOnce(Looper.java:232) at android.os.Looper.loop(Looper.java:317) at android.app.ActivityThread.main(ActivityThread.java:8501) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:878) Caused by: java.lang.RuntimeException: java.lang.SecurityException: Invalid signature file digest for Manifest main attributes at com.s.c.As.(:275) at com.stripe.cots.aidlservice.CotsService.(Unknown Source:68) at java.lang.Class.classForName(Native Method) at java.lang.Class.forName(Class.java:536) at java.lang.Class.forName(Class.java:467) at com.stripe.stripeterminal.dagger.CotsModule.isCotsAdapterIncluded(CotsModule.kt:94) at com.stripe.stripeterminal.dagger.CotsModule_IsCotsAdapterIncludedFactory.isCotsAdapterIncluded(CotsModule_IsCotsAdapterIncludedFactory.java:40) at com.stripe.stripeterminal.dagger.CotsModule_IsCotsAdapterIncludedFactory.get(CotsModule_IsCotsAdapterIncludedFactory.java:32) at com.stripe.stripeterminal.dagger.CotsModule_IsCotsAdapterIncludedFactory.get(CotsModule_IsCotsAdapterIncludedFactory.java:9) at dagger.internal.DoubleCheck.get(DoubleCheck.java:47) at com.stripe.stripeterminal.HttpModule_ProvideOkHttpClientFactory.get(HttpModule_ProvideOkHttpClientFactory.java:39) at com.stripe.stripeterminal.HttpModule_ProvideOkHttpClientFactory.get(HttpModule_ProvideOkHttpClientFactory.java:12) at dagger.internal.DoubleCheck.get(DoubleCheck.java:47) at com.stripe.stripeterminal.dagger.MainlandModule_Companion_ProvideRestClientFactory.get(MainlandModule_Companion_ProvideRestClientFactory.java:69) at com.stripe.stripeterminal.dagger.MainlandModule_Companion_ProvideRestClientFactory.get(MainlandModule_Companion_ProvideRestClientFactory.java:18) at com.stripe.core.transaction.dagger.CoreTransactionModule_ProvideAuthenticatedRestClientFactory.get(CoreTransactionModule_ProvideAuthenticatedRestClientFactory.java:53) at com.stripe.core.transaction.dagger.CoreTransactionModule_ProvideAuthenticatedRestClientFactory.get(CoreTransactionModule_ProvideAuthenticatedRestClientFactory.java:15) at dagger.internal.DoubleCheck.get(DoubleCheck.java:47) at com.stripe.stripeterminal.internal.common.api.ApiClient_Factory.get(ApiClient_Factory.java:43) at com.stripe.stripeterminal.internal.common.api.ApiClient_Factory.get(ApiClient_Factory.java:12) at dagger.internal.DoubleCheck.get(DoubleCheck.java:47) at com.stripe.stripeterminal.DaggerTerminalComponent$TerminalComponentImpl.getCotsAdapter(DaggerTerminalComponent.java:2021) at com.stripe.stripeterminal.Terminal$Companion.initTerminal(Terminal.kt:977) at com.stripe.stripeterminal.Terminal$Companion.initTerminal(Terminal.kt:907) at com.madinaapps.kiosk.screens.StripePaymentFragment.initStripe(StripePaymentFragment.kt:601) at com.madinaapps.kiosk.screens.StripePaymentFragment.access$initStripe(StripePaymentFragment.kt:89) at com.madinaapps.kiosk.screens.StripePaymentFragment$getDonationPriceDetails$1.invoke(StripePaymentFragment.kt:451) at com.madinaapps.kiosk.screens.StripePaymentFragment$getDonationPriceDetails$1.invoke(StripePaymentFragment.kt:416) at com.madinaapps.kiosk.services.ServiceUtil$getPriceDetails$1.onResponse(ServiceUtil.kt:344) at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall$1.lambda$onResponse$0$retrofit2-DefaultCallAdapterFactory$ExecutorCallbackCall$1(DefaultCallAdapterFactory.java:89) at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall$1$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0) at android.os.Handler.handleCallback(Handler.java:959) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loopOnce(Looper.java:232) at android.os.Looper.loop(Looper.java:317) at android.app.ActivityThread.main(ActivityThread.java:8501) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:878) Caused by: java.lang.SecurityException: Invalid signature file digest for Manifest main attributes at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:314) at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:268) at java.util.jar.JarVerifier.processEntry(JarVerifier.java:321) at java.util.jar.JarVerifier.update(JarVerifier.java:233) at java.util.jar.JarFile.initializeVerifier(JarFile.java:407) at java.util.jar.JarFile.getInputStream(JarFile.java:474) at libcore.io.ClassPathURLStreamHandler$ClassPathURLConnection.getInputStream(ClassPathURLStreamHandler.java:168) at java.net.URL.openStream(URL.java:1072) at java.lang.ClassLoader.getResourceAsStream(ClassLoader.java:989) at java.lang.Class.getResourceAsStream(Class.java:3115) at com.s.c.As.(:2410) ... 38 more

MrVipinVijayan avatar Apr 19 '24 01:04 MrVipinVijayan

Any update on this issue?

MrVipinVijayan avatar Apr 20 '24 03:04 MrVipinVijayan

Hi @MrVipinVijayan, looking at your comment it looks like your dependencies are a bit misconfigured:

implementation "com.stripe:stripeterminal:3.4.0"
implementation "com.stripe:stripeterminal-localmobile:3.5.0"
implementation "com.stripe:stripeterminal-core:3.5.0"

The instructions in our README indicate you only need the stripeterminal-localmobile and stripeterminal-core dependencies. The first one is at the very least largely redundant, and is also likely causing the exception you're seeing because the version (3.4.0) does not match the version of your other dependencies (3.5.0).

Can you remove the implementation "com.stripe:stripeterminal:3.4.0" line from your application and let me know if that fixes this issue for you?

chr-stripe avatar Apr 22 '24 17:04 chr-stripe

@chr-stripe I used the 3.5.0 for all dependencies. no change. also I will need stripe.android because I require PaymentConfiguration from stripe.android dependency.

I dont see the import for PaymentConfiguration from other libraries.

MrVipinVijayan avatar Apr 25 '24 00:04 MrVipinVijayan

@chr-stripe

Keeping these 3 wont fix it too implementation 'com.stripe:stripe-android:20.41.0' implementation "com.stripe:stripeterminal-localmobile:3.5.0" implementation "com.stripe:stripeterminal-core:3.5.0"

MrVipinVijayan avatar Apr 26 '24 02:04 MrVipinVijayan

Any fix for this problem? I am blocked for more than a week now.

MrVipinVijayan avatar Apr 27 '24 03:04 MrVipinVijayan

Same issue on my app, I downgraded from 3.5.0 to 3.4.0 to temporarily solve.

AlanMTuring avatar Apr 29 '24 15:04 AlanMTuring

@AlanMTuring Thanks for the support.

however this didnot fix the problem.

Such a terrible support from the STRIPE TEAM. no proper solution yet.

MrVipinVijayan avatar Apr 30 '24 01:04 MrVipinVijayan

Hi folks,

Sorry that we've been unable to reproduce this issue so far using some of the dependencies mentioned in this thread. If you're able to create and share a zip file in this thread that contains a minimal reproducible project that exhibits this issue, that would greatly help us try to figure out exactly what's going on here and how to address it.

chr-stripe avatar Apr 30 '24 01:04 chr-stripe

Found the fix myself using packaging options. thankyou.

MrVipinVijayan avatar May 10 '24 05:05 MrVipinVijayan

Thank you @MrVipinVijayan! If your fix could be helpful to others in this thread, I'd recommend posting your solution using packaging options in this thread for future reference. I'll close this ticket out but feel free to comment again if there's something actionable here for Stripe.

chr-stripe avatar May 10 '24 16:05 chr-stripe

Hi @MrVipinVijayan @chr-stripe , what's your solution? I'm still facing this issue at init. Always get java.lang.SecurityException: Invalid signature file digest for Manifest main attributes

Phong-TH avatar Oct 11 '24 01:10 Phong-TH