App
App copied to clipboard
[$500] Android - BA - Android App crashes when starting Onfido
If you havenβt already, check out our contributing guidelines for onboarding and email [email protected] to request to join our Slack channel!
Version Number: 1.4.34-0 Reproducible in staging?: y Reproducible in production?: not able to check production If this was caught during regression testing, add the test name, ID and link from TestRail: Email or phone of affected tester (no customers): Logs: https://stackoverflow.com/c/expensify/questions/4856 Expensify/Expensify Issue URL: Issue reported by: Applause- Internal Team Slack conversation:
Action Performed:
- Open Android App
- Login with Expensifail account
- Create workspace or go to existing one
- Select 'Bank Account' > Connect with Plaid
- Select Region Bank and follow the flow for Onfido (Company - Expensify, first name - First, last name - Last)
Expected Result:
Onfido started after Personal Information page completed
Actual Result:
Android App crashes when starting Onfido
Workaround:
Unknown
Platforms:
Which of our officially supported platforms is this issue occurring on?
- [x] Android: Native
- [ ] Android: mWeb Chrome
- [ ] iOS: Native
- [ ] iOS: mWeb Safari
- [ ] MacOS: Chrome / Safari
- [ ] MacOS: Desktop
Screenshots/Videos
Add any screenshot/video evidence
https://github.com/Expensify/App/assets/93399543/3671be9a-37c0-40cb-a452-758243fd4ae6
Upwork Automation - Do Not Edit
- Upwork Job URL: https://www.upwork.com/jobs/~01dccccca284d16c78
- Upwork Job ID: 1755346472180178944
- Last Price Increase: 2024-02-07
:wave: Friendly reminder that deploy blockers are time-sensitive β± issues! Check out the open `StagingDeployCash` deploy checklist to see the list of PRs included in this release, then work quickly to do one of the following:
- Identify the pull request that introduced this issue and revert it.
- Find someone who can quickly fix the issue.
- Fix the issue yourself.
Triggered auto assignment to @hayata-suenaga (Engineering
), see https://stackoverflowteams.com/c/expensify/questions/9980/ for more details.
We think that this bug might be related to #wave6-collect-submitters CC @greg-schroeder
Hmm this might be handled by Callstack or should be - @mountiny can you confirm if this fits in the VBA refactor project or can be merged in?
Wondering if it has to do anything with https://github.com/Expensify/App/pull/35440, we merged that yesterday to fix another crash on Android. Will try to troubleshoot.
I can reproduce the crash on the current production version, using the VERIFYING
flow from https://stackoverflowteams.com/c/expensify/questions/342. Going to remove the blocker label and keep this open so we can look and fix.
cc @mkhutornyi if you have an idea how to fix.
Proposal
Please re-state the problem that we are trying to solve in this issue.
App crashes when start onfido flow on android release build
What is the root cause of that problem?
Crash log:
Process: com.expensify.chat.adhoc, PID: 1047
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.expensify.chat.adhoc/com.onfido.android.sdk.capture.ui.OnfidoActivity}: java.lang.IllegalArgumentException: Unable to create call adapter for class io.reactivex.rxjava3.core.Single
for method h.b
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: java.lang.IllegalArgumentException: Unable to create call adapter for class io.reactivex.rxjava3.core.Single
for method h.b
at fd.f9.i(SourceFile:40)
at mv.q.b(SourceFile:400)
at retrofit2.Retrofit.c(SourceFile:25)
at mv.r0.invoke(SourceFile:45)
at java.lang.reflect.Proxy.invoke(Proxy.java:1006)
at com.onfido.api.client.$Proxy18.b(Unknown Source)
at com.onfido.api.client.f.d(SourceFile:17)
at com.onfido.android.sdk.capture.network.OnfidoApiService.getSDKConfig$onfido_capture_sdk_core_release(Unknown Source:6)
at com.onfido.android.sdk.capture.internal.config.SDKConfigRepository.<init>(SourceFile:28)
at com.onfido.android.sdk.capture.internal.config.SDKConfigRepository_Factory.newInstance(Unknown Source:2)
at com.onfido.android.sdk.capture.internal.config.SDKConfigRepository_Factory.get(SourceFile:1)
at com.onfido.android.sdk.capture.internal.config.SDKConfigRepository_Factory.get(SourceFile:2)
at mj.a.get(SourceFile:14)
at com.onfido.android.sdk.capture.ui.OnfidoPresenterInitializer_Factory.get(SourceFile:1)
at com.onfido.android.sdk.capture.ui.OnfidoPresenterInitializer_Factory.get(SourceFile:2)
at com.onfido.android.sdk.capture.ui.OnfidoPresenter_Factory.get(Unknown Source:58)
at com.onfido.android.sdk.capture.ui.OnfidoPresenter_PresenterAssistedFactory_Impl.create(SourceFile:1)
at com.onfido.android.sdk.capture.ui.OnfidoActivity$presenter$2.invoke(SourceFile:1)
at com.onfido.android.sdk.capture.ui.OnfidoActivity$presenter$2.invoke(SourceFile:2)
at sq.l.getValue(SourceFile:21)
at com.onfido.android.sdk.capture.ui.OnfidoActivity.getPresenter(Unknown Source:2)
at com.onfido.android.sdk.capture.ui.OnfidoActivity.setupPresenterWith(Unknown Source:38)
at com.onfido.android.sdk.capture.ui.OnfidoActivity.onCreate(SourceFile:60)
at android.app.Activity.performCreate(Activity.java:8000)
at android.app.Activity.performCreate(Activity.java:7984)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
... 11 more
Caused by: java.lang.IllegalStateException: Single return type must be parameterized as Single<Foo> or Single<? extends Foo>
at nv.i.get(SourceFile:117)
at retrofit2.Retrofit.a(SourceFile:33)
at mv.q.b(SourceFile:381)
... 36 more
This is another case of crash after enabling proguard
What changes do you think we should make in order to solve the problem?
# Keep generic signature of RxJava3 (R8 full mode strips signatures from non-kept items).
-keep,allowobfuscation,allowshrinking class io.reactivex.rxjava3.core.Flowable
-keep,allowobfuscation,allowshrinking class io.reactivex.rxjava3.core.Maybe
-keep,allowobfuscation,allowshrinking class io.reactivex.rxjava3.core.Observable
-keep,allowobfuscation,allowshrinking class io.reactivex.rxjava3.core.Single
add this to proguard-rules.pro
reference: https://github.com/square/retrofit/blob/3770704de89233c1240699392baa7198d8b63bff/retrofit-adapters/rxjava3/src/main/resources/META-INF/proguard/retrofit2-rxjava3-adapter.pro#L1-L5
Or this might be more general solution:
# R8 full mode strips generic signatures from return types if not kept.
-if interface * { @retrofit2.http.* public *** *(...); }
-keep,allowoptimization,allowshrinking,allowobfuscation class <3>
reference: https://github.com/square/retrofit/pull/3886/files
What alternative solutions did you explore? (Optional)
bump @onfido/react-native-sdk
to latest version (10.6.0)
Why?
proguard issue fixed in onfido android sdk 19.5.0 (https://github.com/onfido/onfido-android-sdk/releases/tag/19.5.0)
react-native sdk 10.6.0 is the one which bumped android sdk to 19.5.x
@mkhutornyi what is the changelog for the onfido bump?
RN sdk changelog can be found here (after 8.3.0), mainly version bump of native sdks
Breaking changes:
- breaking changes from version bump of native sdks
- Added theme selection to the SDK configuration
Android sdk changelog is here (after 18.0.1)
Breaking changes:
- The compile sdk version has been upgraded to 33 to meet Google Play's target API level requirement
- Replaced com.google.android.play:core library with a more specific com.google.android.play:feature-delivery library for Dynamic Feature Module compatibility
- Added Proguard rules for Retrofit to support R8 full mode according to the R8 FAQ (this fixes our issue)
- Added support for the NFC required flow
iOS sdk changelog is here (after 29.0.0)
Breaking changes:
- Due to a change introduced by Apple in March 2023 with iOS v16.0, PACE-only documents can no longer be read by iOS devices installed with iOS 16 (or newer). To minimize integration complexity and instability with future releases of iOS, Onfido is removing support for NFC-PACE.
The android compile sdk looks the most dangerous but we are already on 34 https://github.com/Expensify/App/blob/b64b4080247db4e5e8fcd5dea6ada29f005ecaf7/android/build.gradle#L7 so maybe we should be good to upgrade this
@francoisl @hayata-suenaga what do you think?
@mountiny could you explain why we need to upgrade the sdk version?
I explained detail in my proposal (alternative solution)
Sounds good to me. The compile SDK version doesn't sound like a concern if we already target a higher version.
Sorry my comment meant to say: we should be good to upgrade @onfido/react-native-sdk
since the compile sdk does not have to be bumped.
@hayata-suenaga would you like to make this external and assign @mkhutornyi if you happy with their proposal?
Job added to Upwork: https://www.upwork.com/jobs/~01dccccca284d16c78
Triggered auto assignment to Contributor-plus team member for initial proposal review - @allroundexperts (External
)
Ah I didn't know that I was assigned already. @hayata-suenaga please unassign and assign me back
π£ @mkhutornyi π An offer has been automatically sent to your Upwork account for the Contributor role π Thanks for contributing to the Expensify app!
Offer link Upwork job Please accept the offer and leave a comment on the Github issue letting us know when we can expect a PR to be ready for review π§βπ» Keep in mind: Code of Conduct | Contributing π
Update: investigating android gradle build error after version bump, which came from conflict with another library
@allroundexperts, @mkhutornyi, @hayata-suenaga Whoops! This issue is 2 days overdue. Let's get this updated quick!
still working on fixing build errors
Looks like dupe issues are created:
- https://github.com/Expensify/App/issues/35768
- https://github.com/Expensify/App/issues/35974
- https://github.com/Expensify/App/issues/36453
Thanks, put them all on hold. @mkhutornyi do you want to bringthe build issues to Slack? maybe we could get someone to help you
I finally managed to fix build error in gradle. @mountiny can you please generate adhoc build in https://github.com/Expensify/App/pull/36783?
Thanks for generating build.
proguard issue seems fixed but now another new crash (related to firebase) happening:
@mkhutornyi as Vit mentioned, I think the expensify-opens-source
channel is the best place to ask help with this type of issue
I also rely on that channel for issues I can't handle myself π
That fix should be quick. I can fix myself today π (I am good at native app development)
@mountiny or @hayata-suenaga can you please generate build again? Just pushed fix
@hayata-suenaga I think you added label in the issue. Should be in PR