taplytics / Taplytics-Android-SDK

Taplytics Android SDK
http://taplytics.com
19 stars 9 forks source link

Crashlytics crash in Taplytics SDK #5

Closed oliveeyay closed 9 years ago

oliveeyay commented 9 years ago

Hello guys,

Crashlytics detected a new crash on the SDK in our app (Prevent on Android). Here is the stacktrace:

Fatal Exception: java.lang.RuntimeException
An error occured while executing doInBackground()
 raw
android.os.AsyncTask$3.done (AsyncTask.java:300)
java.lang.Thread.run (Thread.java:818)
Caused by java.lang.OutOfMemoryError
java.util.ArrayList.add (ArrayList.java:118)
org.json.JSONArray.put (JSONArray.java:185)
com.taplytics.sdk.stingray.buffalo (SourceFile:162)
com.taplytics.sdk.analytics.buffalo.hamster (SourceFile:321)
com.taplytics.sdk.analytics.buffalo.buffalo (SourceFile:398)
com.taplytics.sdk.analytics.external.cockroach.alpaca (SourceFile:181)
com.taplytics.sdk.analytics.external.cockroach.panda (SourceFile:97)
com.taplytics.sdk.analytics.external.wolverine.buffalo (SourceFile:144)
com.taplytics.sdk.analytics.external.wolverine.doInBackground (SourceFile:137)
android.os.AsyncTask$2.call (AsyncTask.java:288)
java.lang.Thread.run (Thread.java:818)

This version was uploaded to the Play Store the 24th of April, so I guess you can retrieve the SDK version with this info.

Thanks a lot in advance.

Cheers,

Olivier Goutay

VicV commented 9 years ago

Hey there!

You are running SDK 1.3.24.

This should not be a problem in SDK 1.3.26, our most recent SDK.

Let me know!

oliveeyay commented 9 years ago

Ok cool I'm planning on releasing a new version today on the PlayStore, I keep you in touch in a few days.

VicV commented 9 years ago

Definitely let me know. We'll hop on this right away for you if this keeps up.

oliveeyay commented 9 years ago

This one does not seem to appear anymore, thanks for that.

Unfortunately, one library you are using is crashing since a few versions (we are currently in 1.4.1 and it still crashes). Here is the stacktrace:

Fatal Exception: java.lang.NullPointerException
Attempt to invoke virtual method 'com.github.do.if.do com.github.do.for.do.finally.b(java.lang.String, com.github.do.if.if)' on a null object reference
 raw
com.github.nkzawa.engineio.client.Socket$7.call (Socket.java:333)
com.github.nkzawa.emitter.Emitter$OnceListener.call (Emitter.java:164)
com.github.nkzawa.emitter.Emitter.emit (Emitter.java:117)
com.github.nkzawa.engineio.client.Transport.onOpen (Transport.java:112)
com.github.nkzawa.engineio.client.transports.WebSocket.access$002 (WebSocket.java:29)
com.github.nkzawa.engineio.client.transports.WebSocket$1$1.run (WebSocket.java:71)
com.github.nkzawa.thread.EventThread$2.run (EventThread.java:75)
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1112)
java.lang.Thread.run (Thread.java:818)

Do you know if "com.github.nkzawa.engineio" as a known issue?

Thanks in advance.

Cheers,

Olivier

VicV commented 9 years ago

Hey Olivier,

I'll look into this.

Luckily, that library is only used in debug mode (it's used for testing your experiments).

If you have a release build this crash will not appear.

What's odd is that the com.github call is not one of ours, and I'm not sure why it's leaking into our SDK.

Could you show me the dependencies you are using that are not required by Taplytics?

oliveeyay commented 9 years ago

Hey @VicV

Crashlytics seems to detect these crashes in production (we got two different package name for debug and production.

Here is the list of all of our dependencies. It seems that any of the other ones are using socket.io.

compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.0.0'
    compile 'com.android.support:recyclerview-v7:22.0.0'
    compile 'com.google.code.gson:gson:2.+'
    compile 'com.jakewharton:butterknife:5.1.1'
    compile 'com.crashlytics.android:crashlytics:1.+'

    //Lollipin (passcode blocking page)
    compile 'com.github.orangegangsters:lollipin:1.1.0@aar'
    //CircularBarPager
    compile 'com.github.orangegangsters:library:1.2.5@aar'
    //SwipyRefreshLayout
    compile 'com.github.orangegangsters:swipy:1.2.0@aar'
    //CirclePageIndicator
    compile 'com.viewpagerindicator:library:2.4.1@aar'
    //SlidePager
    compile 'com.github.omadahealth.slidepager:slidepager:1.5.1@aar'
    //TypefaceTextView
    compile 'com.github.omadahealth.typefaceview:typefaceview:1.3.0@aar'

    //Animations and animation easing
    compile 'com.daimajia.easing:library:1.0.1@aar'
    compile 'com.daimajia.androidanimations:library:1.1.3@aar'

    //Lollipop dialogs https://github.com/lewisjdeane/L-Dialogs and buttons, animations etc...
    compile 'uk.me.lewisdeane.ldialogs:ldialogs:1.2.0@aar'
    compile 'com.getbase:floatingactionbutton:1.9.0'
    compile 'com.github.traex.rippleeffect:ripple:1.2.3.2-OG'
    compile 'com.pnikosis:materialish-progress:1.5'

    //Custom progress bar
    compile 'com.daimajia.numberprogressbar:library:1.2@aar'

    //Parse push library
    compile 'com.parse.bolts:bolts-android:1.+'

    //Circular View for direct messages
    compile 'de.hdodenhof:circleimageview:1.2.1'

    //AutoFitTextView
    compile 'me.grantland:autofittextview:0.2.+'

    //Android-SlideExpandableListView
    compile 'com.tjerkw.slideexpandable:library:1.1.0.11-OG'

    //Database SQLCipher
    compile 'com.sqlcipher.oliviergoutay:sqlcipher_android:1.1.0'
    compile 'de.greenrobot:greendao:1.3.8.1-SQLCIPHER'

    //Analytics and Health
    compile 'com.mixpanel.android:mixpanel-android:5.0.0.0@aar'
    compile 'com.google.android.gms:play-services-base:6.5.87'
    compile 'com.google.android.gms:play-services-fitness:6.5.87'
    compile 'com.github.omadahealth.shealth.sdk:shealth_android:1.0.0'

    // Taplytics
    compile('com.taplytics.sdk:taplytics:+@aar')
    compile("com.mcxiaoke.volley:library:+")
    compile("com.squareup.okhttp:okhttp-urlconnection:+")
    compile("com.squareup.okhttp:okhttp:+")
    compile("com.github.nkzawa:socket.io-client:+") {
        exclude group: 'org.json'
    }
    compile("com.github.nkzawa:engine.io-client:+") {
        exclude group: 'org.json'
    }

    compile project(':crop')
    androidTestCompile 'com.jayway.android.robotium:robotium-solo:5.2.+'
    androidTestCompile 'com.squareup.spoon:spoon-client:1.1.1'

Thanks in advance.

Cheers,

Olivier

oliveeyay commented 9 years ago

Hey @VicV any news on that problem? Thanks in advance.

VicV commented 9 years ago

Hey @olivierg13 ,

Unfortunately, I can't reproduce this issue at all.

That socket call is not from Taplytics.

The function causing the crash: com.github.do.if.do com.github.do.for.do.finally.b(java.lang.String, com.github.do.if.if)'

Is not within Taplytics.

Could have more information as to what that function is, and what its calling? I'm trying to find how this conflict could exist.

Thanks.

oliveeyay commented 9 years ago

Hey @VicV

The function

com.github.do.if.do com.github.do.for.do.finally.b(java.lang.String, com.github.do.if.if)

is called like that because we obfuscate our code with java keywords.

However the line:

com.github.nkzawa.engineio.client.Socket$7.call (Socket.java:333)

seems to indicate that the problem is within the engineio library (which we only retrieve through Taplytics). Crashlytics can retrieve the source line of the problem through the dump.txt file provided when we obfuscate via proguard, but it can't retrieve the source code entirely. The problem does not seem too big though (2 crashes by week approx.). Is that possible that this piece of code is still used, even in release mode?

Cheers,

Olivier

VicV commented 9 years ago

Hey Olivier,

I know its your obfuscated code, but I am curious as to what the unobfuscated version of that line is.

As for seeing it in release -- that seems extremely unlikely. There are no socket connections made in release mode at all unless its on your dev device.

I'm not sure at all what this could be. Like I said, socket code can't be hit in release, so there is something odd at play. Thats why I'm just curious as to what that obfuscated line is.

oliveeyay commented 9 years ago

I guess it should be equivalent to the line 333 of https://github.com/nkzawa/engine.io-client.java/blob/master/src/main/java/com/github/nkzawa/engineio/client/Socket.java

Except if the obfuscation is failing (which would be extremely weird), maybe this library has a problem.

Oh also we got another issue with the latests SDK:

Fatal Exception: java.lang.OutOfMemoryError
java.lang.OutOfMemoryError
       at java.lang.String.(String.java:422)
       at java.lang.AbstractStringBuilder.toString(AbstractStringBuilder.java:642)
       at java.lang.StringBuilder.toString(StringBuilder.java:663)
       at org.json.JSONStringer.toString(JSONStringer.java:430)
       at org.json.JSONObject.toString(JSONObject.java:642)
       at com.android.volley.toolbox.JsonObjectRequest.(JsonObjectRequest.java:82)
       at com.taplytics.sdk.network.hamster.albatross(SourceFile:233)
       at com.taplytics.sdk.analytics.buffalo.albatross(SourceFile:507)
       at com.taplytics.sdk.analytics.albatross.run(SourceFile:97)
       at android.os.Handler.handleCallback(Handler.java:733)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:136)
       at android.app.ActivityThread.main(ActivityThread.java:5086)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:515)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
       at dalvik.system.NativeStart.main(NativeStart.java)

Thanks.

Cheers,

Olivier

VicV commented 9 years ago

As a recap:

  1. Initial crash reported was fixed in a newer version.
  2. In a private message, it was determined that the second error seen here was on a dev device and not a production device. Sometimes the socket connection is a bit odd, but it seems to only occur on nexus 6 running 5.1
  3. Third error has been covered in the newest release, 1.4.6