microg / microg/GmsCore

DynamicLinkData class not initializable due to AbstractSafeParcelable->findCreator not finding the creator for the class.

Open
#2,596 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
Java
Stars
14.6k
Forks
3.2k
Avg merge
12d 11h
Merged PRs (30d)
4

Description

Describe the bug

A while ago I created a pull request https://github.com/microg/GmsCore/pull/2297 to improve / fix firebase dynamic link authentication. Back then I tried the login mechanism on my local version. Just now I tried to login in an app using the official microg release and encountered this exception:

10-26 11:16:19.939 27309 27338 E JavaBinder: *** Uncaught remote exception! Exceptions are not yet supported across processes. Client PID 27037 UID 10196.
10-26 11:16:19.939 27309 27338 E JavaBinder: java.lang.ExceptionInInitializerError
10-26 11:16:19.939 27309 27338 E JavaBinder: 	at org.microg.gms.firebase.dynamiclinks.DynamicLinksServiceImpl.getDynamicLink(DynamicLinksServiceImpl.java:48)
10-26 11:16:19.939 27309 27338 E JavaBinder: 	at com.google.firebase.dynamiclinks.internal.IDynamicLinksService$Stub.onTransact(IDynamicLinksService.java:70)
10-26 11:16:19.939 27309 27338 E JavaBinder: 	at org.microg.gms.firebase.dynamiclinks.DynamicLinksServiceImpl.onTransact(DynamicLinksServiceImpl.java:75)
10-26 11:16:19.939 27309 27338 E JavaBinder: 	at android.os.Binder.execTransactInternal(Binder.java:1500)
10-26 11:16:19.939 27309 27338 E JavaBinder: 	at android.os.Binder.execTransact(Binder.java:1444)
10-26 11:16:19.939 27309 27338 E JavaBinder: Caused by: java.lang.RuntimeException: No Creator found for com.google.firebase.dynamiclinks.internal.DynamicLinkData
10-26 11:16:19.939 27309 27338 E JavaBinder: 	at com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable.findCreator(AbstractSafeParcelable.java:21)
10-26 11:16:19.939 27309 27338 E JavaBinder: 	at com.google.firebase.dynamiclinks.internal.DynamicLinkData.<clinit>(DynamicLinkData.java:65)
10-26 11:16:19.939 27309 27338 E JavaBinder: 	... 5 more
10-26 11:16:19.939 27309 27338 E JavaBinder: Caused by: java.lang.ClassNotFoundException: com.google.firebase.dynamiclinks.internal.DynamicLinkData$000Creator
10-26 11:16:19.939 27309 27338 E JavaBinder: 	at java.lang.Class.classForName(Native Method)
10-26 11:16:19.939 27309 27338 E JavaBinder: 	at java.lang.Class.forName(Class.java:607)
10-26 11:16:19.939 27309 27338 E JavaBinder: 	at java.lang.Class.forName(Class.java:512)
10-26 11:16:19.939 27309 27338 E JavaBinder: 	at com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable.findCreator(AbstractSafeParcelable.java:19)
10-26 11:16:19.939 27309 27338 E JavaBinder: 	... 6 more
10-26 11:16:19.939 27309 27338 E JavaBinder: Caused by: java.lang.ClassNotFoundException: com.google.firebase.dynamiclinks.internal.DynamicLinkData$000Creator
10-26 11:16:19.939 27309 27338 E JavaBinder: 	... 10 more
10-26 11:16:19.940 27309 27338 E AndroidRuntime: FATAL EXCEPTION: binder:27309_4
10-26 11:16:19.940 27309 27338 E AndroidRuntime: Process: com.google.android.gms, PID: 27309
10-26 11:16:19.940 27309 27338 E AndroidRuntime: java.lang.ExceptionInInitializerError
10-26 11:16:19.940 27309 27338 E AndroidRuntime: 	at org.microg.gms.firebase.dynamiclinks.DynamicLinksServiceImpl.getDynamicLink(DynamicLinksServiceImpl.java:48)
10-26 11:16:19.940 27309 27338 E AndroidRuntime: 	at com.google.firebase.dynamiclinks.internal.IDynamicLinksService$Stub.onTransact(IDynamicLinksService.java:70)
10-26 11:16:19.940 27309 27338 E AndroidRuntime: 	at org.microg.gms.firebase.dynamiclinks.DynamicLinksServiceImpl.onTransact(DynamicLinksServiceImpl.java:75)
10-26 11:16:19.940 27309 27338 E AndroidRuntime: 	at android.os.Binder.execTransactInternal(Binder.java:1500)
10-26 11:16:19.940 27309 27338 E AndroidRuntime: 	at android.os.Binder.execTransact(Binder.java:1444)
10-26 11:16:19.940 27309 27338 E AndroidRuntime: Caused by: java.lang.RuntimeException: No Creator found for com.google.firebase.dynamiclinks.internal.DynamicLinkData
10-26 11:16:19.940 27309 27338 E AndroidRuntime: 	at com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable.findCreator(AbstractSafeParcelable.java:21)
10-26 11:16:19.940 27309 27338 E AndroidRuntime: 	at com.google.firebase.dynamiclinks.internal.DynamicLinkData.<clinit>(DynamicLinkData.java:65)
10-26 11:16:19.940 27309 27338 E AndroidRuntime: 	... 5 more
10-26 11:16:19.940 27309 27338 E AndroidRuntime: Caused by: java.lang.ClassNotFoundException: com.google.firebase.dynamiclinks.internal.DynamicLinkData$000Creator
10-26 11:16:19.940 27309 27338 E AndroidRuntime: 	at java.lang.Class.classForName(Native Method)
10-26 11:16:19.940 27309 27338 E AndroidRuntime: 	at java.lang.Class.forName(Class.java:607)
10-26 11:16:19.940 27309 27338 E AndroidRuntime: 	at java.lang.Class.forName(Class.java:512)
10-26 11:16:19.940 27309 27338 E AndroidRuntime: 	at com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable.findCreator(AbstractSafeParcelable.java:19)
10-26 11:16:19.940 27309 27338 E AndroidRuntime: 	... 6 more
10-26 11:16:19.940 27309 27338 E AndroidRuntime: Caused by: java.lang.ClassNotFoundException: com.google.firebase.dynamiclinks.internal.DynamicLinkData$000Creator
10-26 11:16:19.940 27309 27338 E AndroidRuntime: 	... 10 more

So AbstractSafeParcelable.findCreator() is not finding the com.google.firebase.dynamiclinks.internal.DynamicLinkData$000Creator class, which, suggesting from the name could be some auto generated class.

@zainarbani I do see that you committed https://github.com/zainarbani/GmsCore/commit/ce0802da285b9ebc2bda5bd12b82ec678e752a6b in the pull request to change DynamicLinkData to extend from AbstractSafeParcelable instead of AutoSafeParcelable. Myself not familiar with these two Parcelable mechanisms, may it be possible that something is missing for the AbstractSafeParcelable to work?

To Reproduce

  1. Open a dynamic "email login link" with the appropriate app, which is internally using firebase dynamic links
  2. microg crashes

Expected behavior
Microg should not crash and pass the link data to the app

System
Android Version: 14
Custom ROM: LineageOS 21

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at DynamicLinksServiceImpl.java line 48 and trace DynamicLinkData initialization through AbstractSafeParcelable.findCreator(). Compare the DynamicLinkData parcelable implementation with the expected creator lookup, then reproduce the email login link flow on Android 14. Done means the service no longer crashes and passes the link data to the app.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, firebase, java
Domain
api, mobile
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.