SlideShare a Scribd company logo
ISTLab

                                                                                     java.lang.RuntimeException: Unable to resume activity {com.pinapps.android/
   java.lang.RuntimeException: Unable to start activity                              com.facebook.LoginActivity}: com.facebook.FacebookException: Cannot call LoginActivity
   ComponentInfo{com.pinapps.android/com.pinapps.android.ActAppDetails}:             with a null calling package. This can occur if the launchMode of the caller is singleInstance.
   java.lang.NullPointerException                                                    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2138)
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)     at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2153)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1682)
   at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3553)    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
   at android.app.ActivityThread.access$700(ActivityThread.java:140)                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1233)           at android.os.Handler.dispatchMessage(Handler.java:99)
   at android.os.Handler.dispatchMessage(Handler.java:99)                            at android.os.Looper.loop(Looper.java:130)
   at android.os.Looper.loop(Looper.java:137)                                        at android.app.ActivityThread.main(ActivityThread.java:3701)
   at android.app.ActivityThread.main(ActivityThread.java:4898)                      at java.lang.reflect.Method.invokeNative(Native Method)




                  What BigData tell us about
   at java.lang.reflect.Method.invokeNative(Native Method)                            at java.lang.reflect.Method.invoke(Method.java:507)
   at java.lang.reflect.Method.invoke(Method.java:511)                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
   1008)                                                                             at dalvik.system.NativeStart.main(Native Method) Caused by:
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)                   com.facebook.FacebookException: Cannot call LoginActivity with a null calling package.
   at dalvik.system.NativeStart.main(Native Method) Caused by:                       This can occur if the launchMode of the caller is singleInstance.
   java.lang.NullPointerException                                                    at com.facebook.LoginActivity.onResume(LoginActivity.java:110)




                       Android Errors
   at com.pinapps.android.FragAppMedia.onCreateView(FragAppMedia.java:126)           at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1176)
   at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)          at android.app.Activity.performResume(Activity.java:3882)
                                                                                     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2128)
   ... 12 more                                                                       ... 12 more
   java.lang.RuntimeException: Unable to start activity                              java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pinapps.android/
   ComponentInfo{com.pinapps.android/com.pinapps.android.ActSplash}:                 com.pinapps.android.ActAppDetails}: java.lang.IllegalStateException: ViewPager does not
   android.view.InflateException: Binary XML file line #2: Error inflating class        have adapter instance.
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1670)     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1686)      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
   at android.app.ActivityThread.access$1500(ActivityThread.java:118)                at android.app.ActivityThread.access$600(ActivityThread.java:130)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:932)            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
   at android.os.Handler.dispatchMessage(Handler.java:99)                            at android.os.Handler.dispatchMessage(Handler.java:99)
   at android.os.Looper.loop(Looper.java:130)                                        at android.os.Looper.loop(Looper.java:137)
   at android.app.ActivityThread.main(ActivityThread.java:3706)                      at android.app.ActivityThread.main(ActivityThread.java:4745)
   at java.lang.reflect.Method.invokeNative(Native Method)                            at java.lang.reflect.Method.invokeNative(Native Method)
   at java.lang.reflect.Method.invoke(Method.java:507)                                at java.lang.reflect.Method.invoke(Method.java:511)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
   841)                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)                   at dalvik.system.NativeStart.main(Native Method) Caused by:
   at dalvik.system.NativeStart.main(Native Method) Caused by:                       java.lang.IllegalStateException: ViewPager does not have adapter instance.
   android.view.InflateException: Binary XML file line #2: Error inflating class        at com.viewpagerindicator.TitlePageIndicator.setViewPager(TitlePageIndicator.java:716)
   at android.view.LayoutInflater.createView(LayoutInflater.java:518)                  at com.pinapps.android.ActAppDetails.onCreate(ActAppDetails.java:129)
   at                                                                                at android.app.Activity.performCreate(Activity.java:5008)
   com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInfl   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
   ater.java:56)                                                                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568)           ... 11 more




                                     What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013                                                                  1
Monday, April 8, 13
ISTLab
                                                                                                            ISTLab




                      I’m Panos Papadopoulos
                      Founder & CEO at BugSense
                      @panosjee



                                                           I’m Maria Kechagia
                                                         PhD student at AUEB
                                                         Researcher at ISTLab


                          What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013            2
Monday, April 8, 13
You are here because of

  ANDROID BUGS
Monday, April 8, 13
ISTLab
                                                                                                          ISTLab


                                    BigData Research

                               40M crashes
                                3M stack traces
                              320M devices
                      From Mar 1 to May 30 2012

                        What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013             4
Monday, April 8, 13
ISTLab
                                                                                                              ISTLab


                      Crashing apps lead to user churn
                       Total Users



                       Affected Users



                       Lost Users




                            What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013             5
Monday, April 8, 13
ISTLab
                                                                                                                     ISTLab


                                               The Process


                       Android        Java Stack               Data
                                                             Cleaning                Data               Heuristics
                        Apps            Traces




                                              API                         Crash
                      Suggestions           Design                       Causes
                                                                      Categorization                   Signatures
                                           Problems




                                                                  6
                            What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013                    6
Monday, April 8, 13
ISTLab
                                                                                                            ISTLab


                                   Heuristic Function

                                      (﴾F+ (﴾A+ I∗)﴿∗)﴿ | (﴾F∗ (﴾A+ I∗)﴿+)﴿E
                      This expresses various scenarios in which an exception can occur

                         Within the Android framework: F + E

                         Within the application: F ∗ A+ E

                         When the application calls an api: F∗ A+ I+ E

                         Within an api-‐registered application callback: F∗ (﴾A+ I+ A+)﴿+ E

                         When an api-‐registered application callback calls an api: F∗ (﴾A+ I+)﴿+ E




                          What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013             7
Monday, April 8, 13
ISTLab
                                                                                                        ISTLab


                                       API Minefield




                      What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013             8
Monday, April 8, 13
ISTLab
                                                                                                                    ISTLab


                                            Crash Categories

                        Memory Exhaustion                                                                            28

            Rece conditions and deadlocks                                                                            28

               Missing/Corrupted Resource                                           14

                                Unclassified                             10

                       Invalid format/syntax                  5

                          Indexing problem                    5

                      Connectivity Problems               4

      Improper component identification               3

                      Insufficient Permission         3

                                                0                  7.5                   15                  22.5         30




                                What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013                9
Monday, April 8, 13
ISTLab
                                                                                                        ISTLab


          You are not to blame for all crashes!


                          86% app context
                           3% Android context
                          11% API context

                      What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013             10
Monday, April 8, 13
ISTLab
                                                                                                              ISTLab

                                 Memory Exhaustion
                                   java.lang.outofmemory
                                     java.lang.outofmemory

                      37%      Although after Honeycomb bitmaps are stored into the
                               Dalvik heap, such exceptions continue to puzzle
                               developers. as mobile devices become smaller and
                               applications have heavier graphics, there is a need for
                               thrifty memory use and good performance.


                                                               Use static memory with extreme care
                                                               Study LruCache, SparseArray and Pair
                                                               Rethink the use of Array & Collection




                            What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013             11
Monday, April 8, 13
ISTLab
                                                                                                             ISTLab

                      Race Conditions & Deadlocks
                      android.database.sqlite.SQLiteOpenHelper.getReadableDatabase
                                       android.os.AsyncTask.execute
                             java.util.concurrent.RejectedExcutionException


                  28%      A lot of problems arise around the SQLite and the AsyncTask
                           classes, as they require extra attention concerning
                           multithreading errors.




                                                             Migitate the number of events
                                                           processed by the main thread
                                                             Use Java’s non-‐locking primitives and
                                                           higher level concurrency abstractions.




                           What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013             12
Monday, April 8, 13
ISTLab
                                                                                                             ISTLab

                      Missing/Corrupted Resources
                      org.jaudiotagger.audio.exceptions.InvalidAudioFrameException



                  14%      The system fails to locate or open an external file. Note that,
                           here, we refer to external resources, such as an image or an
                           audio file, and not application components..




                                                             Use try/catch blocks
                                                             Use static analysis tools like Motorola
                                                           Dev checker




                           What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013             13
Monday, April 8, 13
ISTLab
                                                                                                             ISTLab

            Improper Component Identification
                                android.content.ActivityNotFoundException


                           A lot of applications crash due to either undeclared
                      3%   application components (﴾i.e. activities, services, broadcast
                           receivers, or content providers)﴿, in the AndroidManifest.xml
                           file, or system failure to detect a suitable component for a
                           specific task.
                           Malicious apps can try to launch an activity in order to exploit
                           the permissions of the running app.


                                                             Check the existence of the necessary
                                                           application components




                           What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013             14
Monday, April 8, 13
ISTLab
                                                                                                             ISTLab

                            Insufficient Permission
                                        android.app.Activity.startActivity
                                             java.lang.SecurityException

                           This case can be probably caused by a missing or insufficient
                      3%   permission for the particular activity, in the
                           AndroidManifest.xls file. Also, there is the possibility for more
                           than one entries to exist (﴾with different properties)﴿, for this
                           activity, in the AndroidManifest.xls file. The system manager,
                           however, allows unique activities characterized by a unique id.


                                                             Check the permissions related to a
                                                           component, before calling it to start.




                           What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013             15
Monday, April 8, 13
ISTLab
                                                                                                                           ISTLab


                          Top 10 Root cause Exceptions

                                  java.lang.NullPointerException                                                              29

                                    java.lang.outOfMemoryError                                    14

                             java.lang.IllegalArgumentException                         7

                                     java.lang.RuntimeException                     5

                                  java.lang.IllegalStateException               4

         android.view.WindowManager$BadTokenException                       3

                         android.database.sqlite.SQLiteException            3

                          java.lang.IndexOutOfBoundsException           2

                      java.lang.ArrayIndexOutOfBoundsException          2

                                  java.io.FileNotFoundException         2

                                                                    0                       7.5        15           22.5           30




                                  What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013                       16
Monday, April 8, 13
10 api calls result in



                      17%
                        of the crashes


Monday, April 8, 13
ISTLab
                                                                                                                  ISTLab


                           Most Risky Android APIs
                                 android.app.Activity.setContentView                                              4
                                           android.app.Dialog.dismiss                          2
                                    android.view.LayoutInflater.inflate                        2
                                     android.app.Activity.startActivity             1
                      android.graphics.BitmapFactory.decodeResource                 1
                                             android.app.Dialog.show                1
  com.android.internal.view.BaseSurfaceHolder.unlockCanvasAndPost                   1
                               android.graphics.Bitmap.createBItmap                 1
                                                  java.util.ArrayList.get           1
                                    android.view.LayoutInflater.inflate             1

                                                                            0           1       2             3    4




                            What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013                 18
Monday, April 8, 13
ISTLab
                                                                                                        ISTLab




             #DROIDCON #LIVE #BUGSENSE
                           http://www.bugsense.com/live


                       One of the first 10 attendees to
                       tweet wins a mastiha liquor!
                      What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013             19
Monday, April 8, 13
ISTLab
                                                                                                           ISTLab




                                    Questions?

                      BugSense helps you analyze & troubleshoot your mobile
                                     applications in minutes

                                          http://www.bugsense.com




                         What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013         20
Monday, April 8, 13

More Related Content

Similar to Droid con bugsense

Lecture #4 activities & fragments
Lecture #4  activities & fragmentsLecture #4  activities & fragments
Lecture #4 activities & fragments
Vitali Pekelis
 
Building Large Scale PHP Web Applications with Laravel 4
Building Large Scale PHP Web Applications with Laravel 4Building Large Scale PHP Web Applications with Laravel 4
Building Large Scale PHP Web Applications with Laravel 4
Darwin Biler
 
Google App Engine for Java
Google App Engine for JavaGoogle App Engine for Java
Google App Engine for Java
Lars Vogel
 
Building Modern Apps using Android Architecture Components
Building Modern Apps using Android Architecture ComponentsBuilding Modern Apps using Android Architecture Components
Building Modern Apps using Android Architecture Components
Hassan Abid
 
[Ultracode Munich #4] Short introduction to the new Android build system incl...
[Ultracode Munich #4] Short introduction to the new Android build system incl...[Ultracode Munich #4] Short introduction to the new Android build system incl...
[Ultracode Munich #4] Short introduction to the new Android build system incl...
BeMyApp
 
Icpc2010 bettenburg
Icpc2010 bettenburgIcpc2010 bettenburg
Icpc2010 bettenburg
SAIL_QU
 
JavaYDL18
JavaYDL18JavaYDL18
JavaYDL18
Terry Yoast
 
Ruby conf2012
Ruby conf2012Ruby conf2012
Ruby conf2012
Chandan Jog
 
Develop Android/iOS app using golang
Develop Android/iOS app using golangDevelop Android/iOS app using golang
Develop Android/iOS app using golang
SeongJae Park
 
Java - OOPS and Java Basics
Java - OOPS and Java BasicsJava - OOPS and Java Basics
Java - OOPS and Java Basics
Victer Paul
 
Testing android apps with espresso
Testing android apps with espressoTesting android apps with espresso
Testing android apps with espresso
Édipo Souza
 
Google App Engine for Java v0.0.2
Google App Engine for Java v0.0.2Google App Engine for Java v0.0.2
Google App Engine for Java v0.0.2
Matthew McCullough
 
Google I/O 2021 Recap
Google I/O 2021 RecapGoogle I/O 2021 Recap
Google I/O 2021 Recap
furusin
 
Java applet programming concepts
Java  applet programming conceptsJava  applet programming concepts
Java applet programming concepts
Victer Paul
 
Andriod dev toolbox part 2
Andriod dev toolbox  part 2Andriod dev toolbox  part 2
Andriod dev toolbox part 2
Shem Magnezi
 
Unit Testing RPG with JUnit
Unit Testing RPG with JUnitUnit Testing RPG with JUnit
Unit Testing RPG with JUnit
Greg.Helton
 
Dive into Angular, part 5: Experience
Dive into Angular, part 5: ExperienceDive into Angular, part 5: Experience
Dive into Angular, part 5: Experience
Oleksii Prohonnyi
 
ESW #1 - Developing For Android
ESW #1 - Developing For AndroidESW #1 - Developing For Android
ESW #1 - Developing For Android
eatsleepweb
 
JRuby 6 Years in Production
JRuby 6 Years in ProductionJRuby 6 Years in Production
JRuby 6 Years in Production
Mark Menard
 
React django
React djangoReact django
React django
Heber Silva
 

Similar to Droid con bugsense (20)

Lecture #4 activities & fragments
Lecture #4  activities & fragmentsLecture #4  activities & fragments
Lecture #4 activities & fragments
 
Building Large Scale PHP Web Applications with Laravel 4
Building Large Scale PHP Web Applications with Laravel 4Building Large Scale PHP Web Applications with Laravel 4
Building Large Scale PHP Web Applications with Laravel 4
 
Google App Engine for Java
Google App Engine for JavaGoogle App Engine for Java
Google App Engine for Java
 
Building Modern Apps using Android Architecture Components
Building Modern Apps using Android Architecture ComponentsBuilding Modern Apps using Android Architecture Components
Building Modern Apps using Android Architecture Components
 
[Ultracode Munich #4] Short introduction to the new Android build system incl...
[Ultracode Munich #4] Short introduction to the new Android build system incl...[Ultracode Munich #4] Short introduction to the new Android build system incl...
[Ultracode Munich #4] Short introduction to the new Android build system incl...
 
Icpc2010 bettenburg
Icpc2010 bettenburgIcpc2010 bettenburg
Icpc2010 bettenburg
 
JavaYDL18
JavaYDL18JavaYDL18
JavaYDL18
 
Ruby conf2012
Ruby conf2012Ruby conf2012
Ruby conf2012
 
Develop Android/iOS app using golang
Develop Android/iOS app using golangDevelop Android/iOS app using golang
Develop Android/iOS app using golang
 
Java - OOPS and Java Basics
Java - OOPS and Java BasicsJava - OOPS and Java Basics
Java - OOPS and Java Basics
 
Testing android apps with espresso
Testing android apps with espressoTesting android apps with espresso
Testing android apps with espresso
 
Google App Engine for Java v0.0.2
Google App Engine for Java v0.0.2Google App Engine for Java v0.0.2
Google App Engine for Java v0.0.2
 
Google I/O 2021 Recap
Google I/O 2021 RecapGoogle I/O 2021 Recap
Google I/O 2021 Recap
 
Java applet programming concepts
Java  applet programming conceptsJava  applet programming concepts
Java applet programming concepts
 
Andriod dev toolbox part 2
Andriod dev toolbox  part 2Andriod dev toolbox  part 2
Andriod dev toolbox part 2
 
Unit Testing RPG with JUnit
Unit Testing RPG with JUnitUnit Testing RPG with JUnit
Unit Testing RPG with JUnit
 
Dive into Angular, part 5: Experience
Dive into Angular, part 5: ExperienceDive into Angular, part 5: Experience
Dive into Angular, part 5: Experience
 
ESW #1 - Developing For Android
ESW #1 - Developing For AndroidESW #1 - Developing For Android
ESW #1 - Developing For Android
 
JRuby 6 Years in Production
JRuby 6 Years in ProductionJRuby 6 Years in Production
JRuby 6 Years in Production
 
React django
React djangoReact django
React django
 

Droid con bugsense

  • 1. ISTLab java.lang.RuntimeException: Unable to resume activity {com.pinapps.android/ java.lang.RuntimeException: Unable to start activity com.facebook.LoginActivity}: com.facebook.FacebookException: Cannot call LoginActivity ComponentInfo{com.pinapps.android/com.pinapps.android.ActAppDetails}: with a null calling package. This can occur if the launchMode of the caller is singleInstance. java.lang.NullPointerException at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2138) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2153) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1682) at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3553) at android.app.ActivityThread.access$1500(ActivityThread.java:117) at android.app.ActivityThread.access$700(ActivityThread.java:140) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1233) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:130) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:3701) at android.app.ActivityThread.main(ActivityThread.java:4898) at java.lang.reflect.Method.invokeNative(Native Method) What BigData tell us about at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 1008) at dalvik.system.NativeStart.main(Native Method) Caused by: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775) com.facebook.FacebookException: Cannot call LoginActivity with a null calling package. at dalvik.system.NativeStart.main(Native Method) Caused by: This can occur if the launchMode of the caller is singleInstance. java.lang.NullPointerException at com.facebook.LoginActivity.onResume(LoginActivity.java:110) Android Errors at com.pinapps.android.FragAppMedia.onCreateView(FragAppMedia.java:126) at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1176) at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460) at android.app.Activity.performResume(Activity.java:3882) at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2128) ... 12 more ... 12 more java.lang.RuntimeException: Unable to start activity java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pinapps.android/ ComponentInfo{com.pinapps.android/com.pinapps.android.ActSplash}: com.pinapps.android.ActAppDetails}: java.lang.IllegalStateException: ViewPager does not android.view.InflateException: Binary XML file line #2: Error inflating class have adapter instance. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1670) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1686) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) at android.app.ActivityThread.access$1500(ActivityThread.java:118) at android.app.ActivityThread.access$600(ActivityThread.java:130) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:932) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:130) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:3706) at android.app.ActivityThread.main(ActivityThread.java:4745) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 841) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) at dalvik.system.NativeStart.main(Native Method) Caused by: at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.IllegalStateException: ViewPager does not have adapter instance. android.view.InflateException: Binary XML file line #2: Error inflating class at com.viewpagerindicator.TitlePageIndicator.setViewPager(TitlePageIndicator.java:716) at android.view.LayoutInflater.createView(LayoutInflater.java:518) at com.pinapps.android.ActAppDetails.onCreate(ActAppDetails.java:129) at at android.app.Activity.performCreate(Activity.java:5008) com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInfl at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) ater.java:56) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568) ... 11 more What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013 1 Monday, April 8, 13
  • 2. ISTLab ISTLab I’m Panos Papadopoulos Founder & CEO at BugSense @panosjee I’m Maria Kechagia PhD student at AUEB Researcher at ISTLab What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013 2 Monday, April 8, 13
  • 3. You are here because of ANDROID BUGS Monday, April 8, 13
  • 4. ISTLab ISTLab BigData Research 40M crashes 3M stack traces 320M devices From Mar 1 to May 30 2012 What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013 4 Monday, April 8, 13
  • 5. ISTLab ISTLab Crashing apps lead to user churn Total Users Affected Users Lost Users What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013 5 Monday, April 8, 13
  • 6. ISTLab ISTLab The Process Android Java Stack Data Cleaning Data Heuristics Apps Traces API Crash Suggestions Design Causes Categorization Signatures Problems 6 What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013 6 Monday, April 8, 13
  • 7. ISTLab ISTLab Heuristic Function (﴾F+ (﴾A+ I∗)﴿∗)﴿ | (﴾F∗ (﴾A+ I∗)﴿+)﴿E This expresses various scenarios in which an exception can occur Within the Android framework: F + E Within the application: F ∗ A+ E When the application calls an api: F∗ A+ I+ E Within an api-‐registered application callback: F∗ (﴾A+ I+ A+)﴿+ E When an api-‐registered application callback calls an api: F∗ (﴾A+ I+)﴿+ E What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013 7 Monday, April 8, 13
  • 8. ISTLab ISTLab API Minefield What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013 8 Monday, April 8, 13
  • 9. ISTLab ISTLab Crash Categories Memory Exhaustion 28 Rece conditions and deadlocks 28 Missing/Corrupted Resource 14 Unclassified 10 Invalid format/syntax 5 Indexing problem 5 Connectivity Problems 4 Improper component identification 3 Insufficient Permission 3 0 7.5 15 22.5 30 What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013 9 Monday, April 8, 13
  • 10. ISTLab ISTLab You are not to blame for all crashes! 86% app context 3% Android context 11% API context What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013 10 Monday, April 8, 13
  • 11. ISTLab ISTLab Memory Exhaustion java.lang.outofmemory java.lang.outofmemory 37% Although after Honeycomb bitmaps are stored into the Dalvik heap, such exceptions continue to puzzle developers. as mobile devices become smaller and applications have heavier graphics, there is a need for thrifty memory use and good performance. Use static memory with extreme care Study LruCache, SparseArray and Pair Rethink the use of Array & Collection What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013 11 Monday, April 8, 13
  • 12. ISTLab ISTLab Race Conditions & Deadlocks android.database.sqlite.SQLiteOpenHelper.getReadableDatabase android.os.AsyncTask.execute java.util.concurrent.RejectedExcutionException 28% A lot of problems arise around the SQLite and the AsyncTask classes, as they require extra attention concerning multithreading errors. Migitate the number of events processed by the main thread Use Java’s non-‐locking primitives and higher level concurrency abstractions. What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013 12 Monday, April 8, 13
  • 13. ISTLab ISTLab Missing/Corrupted Resources org.jaudiotagger.audio.exceptions.InvalidAudioFrameException 14% The system fails to locate or open an external file. Note that, here, we refer to external resources, such as an image or an audio file, and not application components.. Use try/catch blocks Use static analysis tools like Motorola Dev checker What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013 13 Monday, April 8, 13
  • 14. ISTLab ISTLab Improper Component Identification android.content.ActivityNotFoundException A lot of applications crash due to either undeclared 3% application components (﴾i.e. activities, services, broadcast receivers, or content providers)﴿, in the AndroidManifest.xml file, or system failure to detect a suitable component for a specific task. Malicious apps can try to launch an activity in order to exploit the permissions of the running app. Check the existence of the necessary application components What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013 14 Monday, April 8, 13
  • 15. ISTLab ISTLab Insufficient Permission android.app.Activity.startActivity java.lang.SecurityException This case can be probably caused by a missing or insufficient 3% permission for the particular activity, in the AndroidManifest.xls file. Also, there is the possibility for more than one entries to exist (﴾with different properties)﴿, for this activity, in the AndroidManifest.xls file. The system manager, however, allows unique activities characterized by a unique id. Check the permissions related to a component, before calling it to start. What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013 15 Monday, April 8, 13
  • 16. ISTLab ISTLab Top 10 Root cause Exceptions java.lang.NullPointerException 29 java.lang.outOfMemoryError 14 java.lang.IllegalArgumentException 7 java.lang.RuntimeException 5 java.lang.IllegalStateException 4 android.view.WindowManager$BadTokenException 3 android.database.sqlite.SQLiteException 3 java.lang.IndexOutOfBoundsException 2 java.lang.ArrayIndexOutOfBoundsException 2 java.io.FileNotFoundException 2 0 7.5 15 22.5 30 What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013 16 Monday, April 8, 13
  • 17. 10 api calls result in 17% of the crashes Monday, April 8, 13
  • 18. ISTLab ISTLab Most Risky Android APIs android.app.Activity.setContentView 4 android.app.Dialog.dismiss 2 android.view.LayoutInflater.inflate 2 android.app.Activity.startActivity 1 android.graphics.BitmapFactory.decodeResource 1 android.app.Dialog.show 1 com.android.internal.view.BaseSurfaceHolder.unlockCanvasAndPost 1 android.graphics.Bitmap.createBItmap 1 java.util.ArrayList.get 1 android.view.LayoutInflater.inflate 1 0 1 2 3 4 What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013 18 Monday, April 8, 13
  • 19. ISTLab ISTLab #DROIDCON #LIVE #BUGSENSE http://www.bugsense.com/live One of the first 10 attendees to tweet wins a mastiha liquor! What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013 19 Monday, April 8, 13
  • 20. ISTLab ISTLab Questions? BugSense helps you analyze & troubleshoot your mobile applications in minutes http://www.bugsense.com What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013 20 Monday, April 8, 13