DevoxxFR 2024 Reproducible Builds with Apache Maven
Bug sense droidcon-13
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
Tuesday, April 9, 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
Tuesday, April 9, 13
3. You are here because of
ANDROID BUGS
Tuesday, April 9, 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
Tuesday, April 9, 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
Tuesday, April 9, 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
Tuesday, April 9, 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
Tuesday, April 9, 13
8. ISTLab
ISTLab
API Minefield
What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013 8
Tuesday, April 9, 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
Tuesday, April 9, 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
Tuesday, April 9, 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.
Resource auto-‐resize interface
Restricted use of cache structures
Cheap file formats
Fixed heap memory
Use profiling (﴾Tracker Tab, MAT, HeapViz, etc.)﴿
What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013 11
Tuesday, April 9, 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.
Use non-‐blocking algorithms
Use Java’s non-‐locking primitives and higher level
concurrency abstractions.
Verification (﴾Java PathExplorer)﴿
Static checking (﴾Dimmunix, Jlint, FindBugs, Julia)﴿
What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013 12
Tuesday, April 9, 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
Tuesday, April 9, 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
User easy to remember codes
What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013 14
Tuesday, April 9, 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.
Provide Clear documentation
User menu
What BigData Analysis tell us about Android Errors @ DroidCon DE, 11 April 2013 15
Tuesday, April 9, 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
Tuesday, April 9, 13
17. 10 api calls result in
17%
of the crashes
Tuesday, April 9, 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
Tuesday, April 9, 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
Tuesday, April 9, 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
Tuesday, April 9, 13