Skip to content

Don't call Class.getResourceAsStream in firebase-iid #1601

@yogurtearl

Description

@yogurtearl

[REQUIRED] Step 2: Describe your environment

  • Firebase Component: com.google.firebase:firebase-iid
  • Component version: 20.1.2

[REQUIRED] Step 3: Describe the problem

Class.getResourceAsStream is very slow on Android, should instead load from Android Resource Manager.

Also, Android API 23 has a race condition with Class.getResourceAsStream that causes a ConcurrentModificationException

java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:787)
at java.util.HashMap$KeyIterator.next(HashMap.java:814)
at java.util.jar.JarVerifier.readCertificates(JarVerifier.java:266)
at java.util.jar.JarFile.getInputStream(JarFile.java:380)
at libcore.net.url.JarURLConnectionImpl.getInputStream(JarURLConnectionImpl.java:222)
at java.net.URL.openStream(URL.java:470)
at java.lang.ClassLoader.getResourceAsStream(ClassLoader.java:444)
at java.lang.Class.getResourceAsStream(Class.java:1169)
at com.google.android.gms.common.internal.LibraryVersion.getVersion(Unknown Source)
at com.google.firebase.iid.zzs.zzb(com.google.firebase:firebase-iid@@20.1.2:61)
at com.google.firebase.iid.zzs.zza(com.google.firebase:firebase-iid@@20.1.2:89)
at com.google.firebase.iid.zzv.run(com.google.firebase:firebase-iid@@20.1.2)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)```

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions