We got a crash log like this:

But there is no function named: com.jwplayer.ui.j.b
And there is no class named: com.jwplayer.ui.n.n
So, I think the proguard obfuscator change the name, and download the mapping file from the bitrise:

OK, the origin name is: com.jwplayer.ui.d.c
And I can't search a result with -> com.jwplayer.ui.j, so I think com.jwplayer.ui.j is the origin name, but after checked com.jwplayer.ui.j, the crash happens in the line 266, I can't understand the crash report "com.jwplayer.ui.j.b (j.java:5475)"

But I'm sure the line 266 is the CRASH, "var7.a" is a map, but is public, GREAT:

If we want to know how a public field used in other classes, we can watch the field by breakpoint(very slow and easy failed), BUT I set the breakpoint in the constructor function, and when some where new a object, we can get the reference and analyse like this:



Bad news: the reference is referenced by other classes.
Good news: there are only 3 classes.
So analysis one by one:
com.jwplayer.ui.c looks simple BUT with public field:

a and b is public and the reference of c(var119) is used in other class:


SO, the key class is com.jwplayer.api.b, and this.S and this.e is "var118" and "var119"



Bad news: this.e is default access modifier, and I can't search where use the "this.e", but there must be used somewhere.So I checked the package:

Good news is the package is small.
I checked all the class in the package, and located the PrivateLifecycleObserverPi class:

YES, both com.jwplayer.ui.d.c and com.jwplayer.ui.j can access the map and call clear(). This.a is "var116", is the key class com.jwplayer.api.b:

Remember the "this.S" and "this.e", YES, line 54 "var1.e.a" is the MAP.
So, we can locate the problem:
clear() called first and the Runnable in the post runs, then crash happens.