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