flurry / flurry-android-sdk

Flurry Android SDK API reference documentation
Apache License 2.0
21 stars 3 forks source link

Crash in Flurry Android 12.13.0. Exception happened during fetching Install Id #29

Closed prady32 closed 2 years ago

prady32 commented 2 years ago

Hi Users are experiencing crash from flurry and they are unable to use the app since it crashes every-time. Happens to only few users with Android 9, 10 and 11 SDK. Following is the stack trace report.

java.lang.NullPointerException: Exception happened during fetching Install Id at com.android.org.bouncycastle.crypto.params.KeyParameter.(KeyParameter.java:13) at com.android.org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher.engineInit(BaseBlockCipher.java:557) at javax.crypto.Cipher.tryTransformWithProvider(Cipher.java:608) at javax.crypto.Cipher.tryCombinations(Cipher.java:532) at javax.crypto.Cipher.getSpi(Cipher.java:437) at javax.crypto.Cipher.init(Cipher.java:909) at javax.crypto.Cipher.init(Cipher.java:859)

poting-oath commented 2 years ago

@prady32 Thanks for the report! Could you please provide a full stack trace that includes flurry package? Thanks!

prady32 commented 2 years ago

Hi @poting-oath

Here is the full stack trace of the crash. For mapping file I have added the related classes reference. Please refer them below the stack trace. If you still need more info please let me know

Crash java.lang.NullPointerException: Exception happened during fetching Install Id at com.android.org.bouncycastle.crypto.params.KeyParameter.(KeyParameter.java:13) at com.android.org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher.engineInit(BaseBlockCipher.java:557) at javax.crypto.Cipher.tryTransformWithProvider(Cipher.java:608) at javax.crypto.Cipher.tryCombinations(Cipher.java:532) at javax.crypto.Cipher.getSpi(Cipher.java:437) at javax.crypto.Cipher.init(Cipher.java:909) at javax.crypto.Cipher.init(Cipher.java:859) at .Qn.c(14) at .In.a(61) at .Fq.run(1) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at .ls.run(6) at .ms.f(4) at .Qq.g(7) at .ls.run(3) 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)

Qn.c { com.flurry.sdk.ai -> Qn: 1:1:byte[] a(java.security.Key):157:157 -> c 2:5:byte[] a(java.security.Key):160:163 -> c 6:8:com.flurry.sdk.k$a com.flurry.sdk.k$a.a(int):46:48 -> c 6:8:byte[] a(java.security.Key):163 -> c 9:9:com.flurry.sdk.k$a com.flurry.sdk.k$a.a(int):52:52 -> c 9:9:byte[] a(java.security.Key):163 -> c 10:10:byte[] a(java.security.Key):166:166 -> c 11:11:java.lang.Object com.flurry.sdk.k.a(byte[],java.security.Key,javax.crypto.spec.IvParameterSpec,com.flurry.sdk.k$a):0:0 -> c 11:11:byte[] a(java.security.Key):166 -> c 12:12:java.lang.Object com.flurry.sdk.k.a(byte[],java.security.Key,javax.crypto.spec.IvParameterSpec,com.flurry.sdk.k$a):2042:2042 -> c 12:12:byte[] a(java.security.Key):166 -> c 13:15:java.lang.Object com.flurry.sdk.k.a(byte[],java.security.Key,javax.crypto.spec.IvParameterSpec,com.flurry.sdk.k$a):96:98 -> c 13:15:byte[] a(java.security.Key):166 -> c 16:17:java.lang.Object com.flurry.sdk.k.a(byte[],java.security.Key,javax.crypto.spec.IvParameterSpec,com.flurry.sdk.k$a):108:109 -> c 16:17:byte[] a(java.security.Key):166 -> c 18:18:java.lang.Object com.flurry.sdk.k.a(byte[],java.security.Key,javax.crypto.spec.IvParameterSpec,com.flurry.sdk.k$a):103:103 -> c 18:18:byte[] a(java.security.Key):166 -> c 19:19:byte[] a(java.security.Key):166:166 -> c 20:20:byte[] a(java.security.Key):170:170 -> c }

ln.a { com.flurry.sdk.a$23 -> ln: android.content.Context b -> B 1:1:void (com.flurry.sdk.a,int,android.content.Context):176:176 -> com.flurry.sdk.a$28 -> mn: 1:1:void (com.flurry.sdk.a,boolean):192:192 -> 1:1:void a():195:195 -> a 2:2:void a():1195:1195 -> a 3:3:void com.flurry.sdk.t.a(boolean):14:14 -> a 3:3:void a():195 -> a 4:4:void com.flurry.sdk.m.notifyObservers(java.lang.Object):75:75 -> a 4:4:void com.flurry.sdk.t.a(boolean):14 -> a 4:4:void a():195 -> a }

Fq { com.flurry.sdk.eb -> Fq: 1:1:void ():22:22 -> 1:1:void run():38:38 -> run 2:2:void com.google.devtools.build.android.desugar.runtime.ThrowableExtension.printStackTrace(java.lang.Throwable):92:92 -> run 2:2:void run():45 -> run 3:3:void com.flurry.sdk.cy.a(int,java.lang.String,java.lang.String,java.lang.Throwable):1146:1146 -> run 3:3:void run():47 -> run 4:4:void run():48:48 -> run }

ls { com.flurry.sdk.h$a -> ls: com.flurry.sdk.h b -> B int g -> C 1:2:void (com.flurry.sdk.h,com.flurry.sdk.h,java.lang.Runnable):42:43 -> 3:4:void (com.flurry.sdk.h,com.flurry.sdk.h,java.lang.Runnable):45:46 -> 5:5:void (com.flurry.sdk.h,com.flurry.sdk.h,java.lang.Runnable):48:48 -> 1:1:boolean cancel(boolean):68:68 -> cancel 2:2:boolean cancel(boolean):72:72 -> cancel 1:4:void run():107:110 -> run 5:5:void run():112:112 -> run 6:6:void run():114:114 -> run 7:7:void run():116:116 -> run }

ms { com.flurry.sdk.h -> ms: java.lang.Runnable c -> B com.flurry.sdk.h target -> C boolean syncFlush -> E boolean concurrent -> D 1:1:void ():12:12 -> 1:1:void (java.lang.String,com.flurry.sdk.h,boolean):136:136 -> 2:2:void (java.lang.String,com.flurry.sdk.h,boolean,boolean):147:147 -> 2:2:void (java.lang.String,com.flurry.sdk.h,boolean):136 -> 3:5:void (java.lang.String,com.flurry.sdk.h,boolean,boolean):149:151 -> 3:5:void (java.lang.String,com.flurry.sdk.h,boolean):136 -> void cleanupTask(java.lang.Runnable) -> b void flush(java.lang.Runnable) -> c java.util.concurrent.Future runAsync(java.lang.Runnable) -> d void runSync(java.lang.Runnable) -> e 1:1:boolean wrapNextRunnable(java.lang.Runnable):224:224 -> f 2:2:boolean wrapNextRunnable(java.lang.Runnable):226:226 -> f 3:3:boolean wrapNextRunnable(java.lang.Runnable):229:229 -> f 4:4:boolean wrapNextRunnable(java.lang.Runnable):234:234 -> f boolean wrapRunnable(java.lang.Runnable) -> g }

Qq { com.flurry.sdk.f -> Qq: java.lang.ThreadLocal a -> H java.lang.Thread b -> I 1:1:void ():174:174 -> 1:1:void (java.lang.String,com.flurry.sdk.h):198:198 -> 1:2:void flush(java.lang.Runnable):281:282 -> c 1:1:java.util.concurrent.Future runAsync(java.lang.Runnable):238:238 -> d 1:1:void runSync(java.lang.Runnable):209:209 -> e 2:3:void runSync(java.lang.Runnable):211:212 -> e 4:5:void runSync(java.lang.Runnable):214:215 -> e 6:6:void runSync(java.lang.Runnable):219:219 -> e 7:7:void runSync(java.lang.Runnable):221:221 -> e 8:8:void runSync(java.lang.Runnable):223:223 -> e 9:9:void runSync(java.lang.Runnable):226:226 -> e 10:10:void runSync(java.lang.Runnable):223:223 -> e 1:3:boolean wrapRunnable(java.lang.Runnable):258:260 -> g 4:6:boolean wrapRunnable(java.lang.Runnable):262:264 -> g 7:7:boolean wrapRunnable(java.lang.Runnable):267:267 -> g 8:12:boolean wrapRunnable(java.lang.Runnable):269:269 -> g 13:16:boolean wrapRunnable(java.lang.Runnable):270:273 -> g 17:17:boolean wrapRunnable(java.lang.Runnable):272:272 -> g 18:18:boolean wrapRunnable(java.lang.Runnable):264:264 -> g }

poting-oath commented 2 years ago

@prady32 This exception is already been caught and handled by Flurry SDK internally. Hence you see the extra words of "Exception happened during fetching Install Id" besides the java.lang.NullPointerException.

java.lang.NullPointerException: Exception happened during fetching Install Id

Did you see this from the Flurry Crash report? If so, yes, after Flurry SDK caught the exceptions, it will report it by using FlurryAgent.onError. Then it will appear in the Crash report. If the apps crashed, I guess they were caused by other reasons. Is it possible to get the console logs of these crashes?

prady32 commented 2 years ago

Yes. This crash i can only see in Flurry. We were actually not able to get exact logs from crash as it is from NDK side. Thanks for your support. Seems its not issue from flurry,

Thanks, Pradeep