The document discusses findings from analyzing crash data from over 40 million crashes reported by 320 million Android devices between March and May 2012. Key findings include:
- Memory exhaustion and race conditions/deadlocks accounted for over half of all crashes.
- Most crashes (86%) occurred in app context rather than Android or API context.
- Ten Android APIs accounted for 17% of crashes. The most risky were setContentView, dismiss, inflate, and startActivity.
- Common root cause exceptions were NullPointer, OutOfMemoryError, and IllegalArgumentException.
The document discusses findings from analyzing crash data from 40 million crashes and 3 million stack traces collected from 320 million Android devices between March and May 2012. Key findings include:
- Crashing apps can lead to user churn as affected users may stop using the app.
- Most crashes (86%) occurred in app context, 11% in API context, and 3% in Android context.
- The top crash categories were memory exhaustion (28%) and race conditions/deadlocks (28%).
- The top 10 root cause exceptions included NullPointerException (29%) and OutOfMemoryError (14%).
- 10 API calls accounted for 17% of crashes, with setContentView being the riskiest
This document provides an overview of Google App Engine, including what cloud computing is, the different types of cloud computing models, how App Engine provides a scalable infrastructure, the programming languages and frameworks supported, how data is stored and accessed via the datastore, services available on App Engine like caching, task queues, and mail, and tips for testing and deploying App Engine applications.
DEVIEW2013: Automating Performance Tests for Android ApplicationsKyungmin Lee
The document discusses automating performance testing of Android apps. It explains that instrumentation can be used to track activity navigation and lifecycle without modifying the app or framework. The kmemtracer tool uses instrumentation to trace memory usage historically. It provides steps to use kmemtracer, including installing the app and test packages, starting instrumentation, interacting with the app, and pulling the trace file. The document also discusses what aspects of performance to measure, like memory, CPU and network, and some public and internal Android/Linux commands that can be used to measure resources.
The document discusses the design and implementation of Usergrid, a multi-tenant, multi-server application platform built using Java, Spring, Jersey, Jackson, and Cassandra to provide user management, data storage, analytics and other features through a RESTful API in a scalable way that allows multiple teams and applications to easily build and deploy mobile and web apps. The document outlines some of the challenges in building such a platform and how Usergrid addresses issues like consistency, API design, permissions, built-in logic and operations.
Fact: Full acceptance test suites that run in the browser are slow, flakey, awkward to write, and hard to maintain. This is the lore that has been handed down to JavaScript developers for generations. But what if that fact was fiction? What if your UI tests were fast, robust and a breeze to maintain? Introducing BigTest. The framework that believes you don't need to make compromises in order to make tests that faithfully replicate your production environment. We’ll explore how BigTest upends the boring and often painful subject of UI testing and makes it fast, robust, and a pleasure to work with.
Using Selenium to Test Native Apps (Wait, you can do that?)Sauce Labs
This document discusses automating tests for native mobile applications. It begins by describing the challenges of testing iOS applications using Apple's UI Automation and Instruments tools. It then reviews two attempted approaches for automation that were brittle and difficult to use at scale. The document advocates for using Appium, an open source test automation tool that allows controlling native and hybrid applications using the WebDriver protocol. It provides an example of using Appium to automate tests for a native iOS application and discusses the tool's benefits and limitations. In closing, it outlines opportunities to further enhance Appium's capabilities and integrations.
The document discusses findings from analyzing crash data from 40 million crashes and 3 million stack traces collected from 320 million Android devices between March and May 2012. Key findings include:
- Crashing apps can lead to user churn as affected users may stop using the app.
- Most crashes (86%) occurred in app context, 11% in API context, and 3% in Android context.
- The top crash categories were memory exhaustion (28%) and race conditions/deadlocks (28%).
- The top 10 root cause exceptions included NullPointerException (29%) and OutOfMemoryError (14%).
- 10 API calls accounted for 17% of crashes, with setContentView being the riskiest
This document provides an overview of Google App Engine, including what cloud computing is, the different types of cloud computing models, how App Engine provides a scalable infrastructure, the programming languages and frameworks supported, how data is stored and accessed via the datastore, services available on App Engine like caching, task queues, and mail, and tips for testing and deploying App Engine applications.
DEVIEW2013: Automating Performance Tests for Android ApplicationsKyungmin Lee
The document discusses automating performance testing of Android apps. It explains that instrumentation can be used to track activity navigation and lifecycle without modifying the app or framework. The kmemtracer tool uses instrumentation to trace memory usage historically. It provides steps to use kmemtracer, including installing the app and test packages, starting instrumentation, interacting with the app, and pulling the trace file. The document also discusses what aspects of performance to measure, like memory, CPU and network, and some public and internal Android/Linux commands that can be used to measure resources.
The document discusses the design and implementation of Usergrid, a multi-tenant, multi-server application platform built using Java, Spring, Jersey, Jackson, and Cassandra to provide user management, data storage, analytics and other features through a RESTful API in a scalable way that allows multiple teams and applications to easily build and deploy mobile and web apps. The document outlines some of the challenges in building such a platform and how Usergrid addresses issues like consistency, API design, permissions, built-in logic and operations.
Fact: Full acceptance test suites that run in the browser are slow, flakey, awkward to write, and hard to maintain. This is the lore that has been handed down to JavaScript developers for generations. But what if that fact was fiction? What if your UI tests were fast, robust and a breeze to maintain? Introducing BigTest. The framework that believes you don't need to make compromises in order to make tests that faithfully replicate your production environment. We’ll explore how BigTest upends the boring and often painful subject of UI testing and makes it fast, robust, and a pleasure to work with.
Using Selenium to Test Native Apps (Wait, you can do that?)Sauce Labs
This document discusses automating tests for native mobile applications. It begins by describing the challenges of testing iOS applications using Apple's UI Automation and Instruments tools. It then reviews two attempted approaches for automation that were brittle and difficult to use at scale. The document advocates for using Appium, an open source test automation tool that allows controlling native and hybrid applications using the WebDriver protocol. It provides an example of using Appium to automate tests for a native iOS application and discusses the tool's benefits and limitations. In closing, it outlines opportunities to further enhance Appium's capabilities and integrations.
This document provides information about an Android development community and lessons on activities and fragments. It summarizes the key topics covered in an online Android course, including activity and fragment lifecycles, saving persistent data, and communicating between fragments. It also introduces mentors from the community and examples of how to create activities and fragments and handle configuration changes and backgrounding.
Building Large Scale PHP Web Applications with Laravel 4Darwin Biler
Learn how Laravel 4 can be leveraged to its fullest by making use of its powerful design patterns, specifically IoC Container and Dependency Injection.
This document provides an overview of Google App Engine for Java (GAE/J) through a presentation. It discusses key aspects of GAE/J including the scalable infrastructure, programming languages supported, frameworks, development tools, deployment, data storage using the datastore, testing, limits, and services. It emphasizes that GAE/J handles the infrastructure and allows developers to focus on application code without worrying about scaling or maintaining servers.
Building Modern Apps using Android Architecture ComponentsHassan Abid
Android architecture components are part of Android Jetpack. They are a collection of libraries that help you design robust, testable, and maintainable apps. In this talk, We will cover LiveData, ViewModel, Room and lifecycle components. We will go through practical code example to understand modern android app architecture especially MVVM architecture.
[Ultracode Munich #4] Short introduction to the new Android build system incl...BeMyApp
By Thomas Endres & Andres Würl both Senior Consultant from TNG Technology Consulting https://www.tngtech.com
Join the Ultracode Munich meetup: http://www.meetup.com/Ultracode-Munich/
The document describes a study on the impact of social structures on software quality using the Eclipse project as a case study. It analyzed 300,000 bug reports and 224,643 code changes to measure social communication dynamics like participation, centrality, and reputation across developers. Four dimensions of social measures - content, structure, communication dynamics, and workflow - were used to understand their relationship to post-release bugs.
This document discusses Java applets and how to develop them. It covers converting GUI applications to applets, embedding applets in web pages, understanding the applet security model, writing programs that can run as both applications and applets, and overriding applet lifecycle methods. Specific topics covered include displaying a label in an applet, the <applet> HTML tag, enabling applets to run as applications, and how the browser interacts with applets by calling init(), start(), stop(), and destroy() methods.
This document provides an overview of EzSMS, a simple SMS gateway application for Android built using Ruby. It discusses why SMS is a useful communication method, introduces some key aspects of building Android applications like activities and intents, and provides a high-level look at how Ruboto allows Ruby scripts to be packaged and run as Android applications by mapping the underlying Android APIs. It also shares some limitations of using JRuby and Ruboto on Android.
The document discusses using Golang for mobile application development. It provides an example of building a pure Golang Android app without Java by compiling Golang code to a shared object library and using the NativeActivity. It also provides an example of using Golang as a library in a Java Android app by generating bindings between Golang and Java code. Additionally, it proposes an approach for running a standalone Golang process on Android by cross-compiling Golang code to ARM/Linux and executing it from an Android app.
The document discusses procedural programming versus object-oriented programming and provides examples using Java. It defines procedural programming as dividing a program into subprocedures that perform specific tasks, with most data shared globally. Object-oriented programming is defined as partitioning memory for both data and functions using objects. The document then outlines key concepts of OOP like objects, classes, encapsulation, and polymorphism. It provides history on the development of Java and its advantages over C++ as a simpler, safer, and more robust language.
This document provides an overview and introduction to testing Android apps with Espresso:
- Espresso is a testing framework created by Google for writing reliable UI tests for Android apps. It allows writing tests to interact with views in the app and check their expected behavior.
- The core components of Espresso include matchers to find views, actions to perform interactions, and assertions to validate views match expected states. Common matchers, actions, and assertions are introduced.
- Configuration and setup for Espresso tests in Android projects is explained, including dependencies, test rules, and JUnit annotations. Additional libraries that extend Espresso functionality are also listed.
Google App Engine is a PaaS that allows developers to build and host web applications in the Google cloud. The document summarizes a workshop on using the Java runtime environment on GAE. It discusses the SDKs, deploying and managing apps on GAE, data storage using the datastore, and limitations like the 30-second request limit. The biggest benefits of GAE are scalability and low startup costs, while the hardest limit is the 30-second request processing time.
An Android engineer from Sansan shares highlights from Google I/O, including new features in Android 12 like splash screens, easier effects in Jetpack, macrobenchmark testing, and updates to Jetpack Compose like ConstraintLayout support and interactive previews. Key releases included Android 12 Developer Preview 3, DataStore as an alternative to SharedPreferences, and Dagger Hilt becoming stable.
The document provides an overview of Java applets, including:
- An applet is a small Java program that runs in a web browser within an HTML page. Applets are created by subclassing the Applet class.
- The life cycle of an applet involves initialization, running, display, idle, and destruction states, with corresponding init(), start(), paint(), stop(), and destroy() methods.
- Applets have some restrictions compared to standalone Java applications due to security concerns, such as not being able to access local files.
- Examples are provided for creating a simple "Hello World" applet, embedding an applet in an HTML page, displaying images with applets, and passing
The second part of the Android dev toolbox lecture,
This time we’ll focus on collection of tools and resources that help you build better apps in less time.
This document discusses using JUnit to automate unit testing of RPG code on an IBM iSeries system. It provides an overview of the benefits of automated testing and outlines the steps to set up the infrastructure for testing, including creating Java and RPG modules, compiling the code, and running tests. Sample code is provided for a simple math module and test. The document recommends automating the testing process through a shell script to run compilation and tests.
This presentation has been prepared by Oleksii Prohonnyi for internal Angular.js training to improve skills of newbies in JS/Angular.
Part 1 (Introduction): http://www.slideshare.net/oprohonnyi/dive-into-angular-part-1-introduction
Part 2 (Architecture): http://www.slideshare.net/oprohonnyi/dive-into-angular-part-2-architecture
Part 3 (Performance): http://www.slideshare.net/oprohonnyi/dive-into-angular-part-3-performance
Part 4 (Angular 2.0): http://www.slideshare.net/oprohonnyi/dive-into-angular-part-4-angular-20
The document provides an introduction to developing applications for Android. It discusses concerns regarding mobile platforms like battery power, CPU performance, and internet connectivity. It outlines the structure of an Android application including activities, services, broadcast receivers, and content providers. Activities represent the main user interface and have a lifecycle of create, start, resume, running, pause, stop, and destroy. The document also discusses multitasking, inter-application communication, background processing via services, and notifications. It provides some final notes on testing, understanding workflows, and staying up to date.
The document discusses experiences with using JRuby to integrate Ruby and Java applications. It describes three case studies of using JRuby:
1) Integrating a new Ruby on Rails application with an existing Java/Spring application for single sign-on. This was successful due to the minimal integration required and compartmentalized nature of the project.
2) Quickly building an iPhone application for a client in Ruby on Rails within a week.
3) An initial attempt to port an existing Java/Groovy/Spring application to Ruby on Rails that encountered challenges due to the size and complexity of the existing application. The document discusses some approaches tried such as having Ruby classes implement Java interfaces.
Django is a Python web framework that follows the MVT (Model-View-Template) architectural pattern. React allows building user interfaces using reusable components. This document discusses combining Django and React to take advantage of both. It provides steps to create a Django project with REST API endpoints and a React frontend app that fetches data from the API. Key steps include creating Django models, views and URLs, then setting up a React app with components that call the Django REST API and render data. Bringing Django and React together allows building scalable web apps rapidly with Django's backend and React's frontend capabilities.
This document provides information about an Android development community and lessons on activities and fragments. It summarizes the key topics covered in an online Android course, including activity and fragment lifecycles, saving persistent data, and communicating between fragments. It also introduces mentors from the community and examples of how to create activities and fragments and handle configuration changes and backgrounding.
Building Large Scale PHP Web Applications with Laravel 4Darwin Biler
Learn how Laravel 4 can be leveraged to its fullest by making use of its powerful design patterns, specifically IoC Container and Dependency Injection.
This document provides an overview of Google App Engine for Java (GAE/J) through a presentation. It discusses key aspects of GAE/J including the scalable infrastructure, programming languages supported, frameworks, development tools, deployment, data storage using the datastore, testing, limits, and services. It emphasizes that GAE/J handles the infrastructure and allows developers to focus on application code without worrying about scaling or maintaining servers.
Building Modern Apps using Android Architecture ComponentsHassan Abid
Android architecture components are part of Android Jetpack. They are a collection of libraries that help you design robust, testable, and maintainable apps. In this talk, We will cover LiveData, ViewModel, Room and lifecycle components. We will go through practical code example to understand modern android app architecture especially MVVM architecture.
[Ultracode Munich #4] Short introduction to the new Android build system incl...BeMyApp
By Thomas Endres & Andres Würl both Senior Consultant from TNG Technology Consulting https://www.tngtech.com
Join the Ultracode Munich meetup: http://www.meetup.com/Ultracode-Munich/
The document describes a study on the impact of social structures on software quality using the Eclipse project as a case study. It analyzed 300,000 bug reports and 224,643 code changes to measure social communication dynamics like participation, centrality, and reputation across developers. Four dimensions of social measures - content, structure, communication dynamics, and workflow - were used to understand their relationship to post-release bugs.
This document discusses Java applets and how to develop them. It covers converting GUI applications to applets, embedding applets in web pages, understanding the applet security model, writing programs that can run as both applications and applets, and overriding applet lifecycle methods. Specific topics covered include displaying a label in an applet, the <applet> HTML tag, enabling applets to run as applications, and how the browser interacts with applets by calling init(), start(), stop(), and destroy() methods.
This document provides an overview of EzSMS, a simple SMS gateway application for Android built using Ruby. It discusses why SMS is a useful communication method, introduces some key aspects of building Android applications like activities and intents, and provides a high-level look at how Ruboto allows Ruby scripts to be packaged and run as Android applications by mapping the underlying Android APIs. It also shares some limitations of using JRuby and Ruboto on Android.
The document discusses using Golang for mobile application development. It provides an example of building a pure Golang Android app without Java by compiling Golang code to a shared object library and using the NativeActivity. It also provides an example of using Golang as a library in a Java Android app by generating bindings between Golang and Java code. Additionally, it proposes an approach for running a standalone Golang process on Android by cross-compiling Golang code to ARM/Linux and executing it from an Android app.
The document discusses procedural programming versus object-oriented programming and provides examples using Java. It defines procedural programming as dividing a program into subprocedures that perform specific tasks, with most data shared globally. Object-oriented programming is defined as partitioning memory for both data and functions using objects. The document then outlines key concepts of OOP like objects, classes, encapsulation, and polymorphism. It provides history on the development of Java and its advantages over C++ as a simpler, safer, and more robust language.
This document provides an overview and introduction to testing Android apps with Espresso:
- Espresso is a testing framework created by Google for writing reliable UI tests for Android apps. It allows writing tests to interact with views in the app and check their expected behavior.
- The core components of Espresso include matchers to find views, actions to perform interactions, and assertions to validate views match expected states. Common matchers, actions, and assertions are introduced.
- Configuration and setup for Espresso tests in Android projects is explained, including dependencies, test rules, and JUnit annotations. Additional libraries that extend Espresso functionality are also listed.
Google App Engine is a PaaS that allows developers to build and host web applications in the Google cloud. The document summarizes a workshop on using the Java runtime environment on GAE. It discusses the SDKs, deploying and managing apps on GAE, data storage using the datastore, and limitations like the 30-second request limit. The biggest benefits of GAE are scalability and low startup costs, while the hardest limit is the 30-second request processing time.
An Android engineer from Sansan shares highlights from Google I/O, including new features in Android 12 like splash screens, easier effects in Jetpack, macrobenchmark testing, and updates to Jetpack Compose like ConstraintLayout support and interactive previews. Key releases included Android 12 Developer Preview 3, DataStore as an alternative to SharedPreferences, and Dagger Hilt becoming stable.
The document provides an overview of Java applets, including:
- An applet is a small Java program that runs in a web browser within an HTML page. Applets are created by subclassing the Applet class.
- The life cycle of an applet involves initialization, running, display, idle, and destruction states, with corresponding init(), start(), paint(), stop(), and destroy() methods.
- Applets have some restrictions compared to standalone Java applications due to security concerns, such as not being able to access local files.
- Examples are provided for creating a simple "Hello World" applet, embedding an applet in an HTML page, displaying images with applets, and passing
The second part of the Android dev toolbox lecture,
This time we’ll focus on collection of tools and resources that help you build better apps in less time.
This document discusses using JUnit to automate unit testing of RPG code on an IBM iSeries system. It provides an overview of the benefits of automated testing and outlines the steps to set up the infrastructure for testing, including creating Java and RPG modules, compiling the code, and running tests. Sample code is provided for a simple math module and test. The document recommends automating the testing process through a shell script to run compilation and tests.
This presentation has been prepared by Oleksii Prohonnyi for internal Angular.js training to improve skills of newbies in JS/Angular.
Part 1 (Introduction): http://www.slideshare.net/oprohonnyi/dive-into-angular-part-1-introduction
Part 2 (Architecture): http://www.slideshare.net/oprohonnyi/dive-into-angular-part-2-architecture
Part 3 (Performance): http://www.slideshare.net/oprohonnyi/dive-into-angular-part-3-performance
Part 4 (Angular 2.0): http://www.slideshare.net/oprohonnyi/dive-into-angular-part-4-angular-20
The document provides an introduction to developing applications for Android. It discusses concerns regarding mobile platforms like battery power, CPU performance, and internet connectivity. It outlines the structure of an Android application including activities, services, broadcast receivers, and content providers. Activities represent the main user interface and have a lifecycle of create, start, resume, running, pause, stop, and destroy. The document also discusses multitasking, inter-application communication, background processing via services, and notifications. It provides some final notes on testing, understanding workflows, and staying up to date.
The document discusses experiences with using JRuby to integrate Ruby and Java applications. It describes three case studies of using JRuby:
1) Integrating a new Ruby on Rails application with an existing Java/Spring application for single sign-on. This was successful due to the minimal integration required and compartmentalized nature of the project.
2) Quickly building an iPhone application for a client in Ruby on Rails within a week.
3) An initial attempt to port an existing Java/Groovy/Spring application to Ruby on Rails that encountered challenges due to the size and complexity of the existing application. The document discusses some approaches tried such as having Ruby classes implement Java interfaces.
Django is a Python web framework that follows the MVT (Model-View-Template) architectural pattern. React allows building user interfaces using reusable components. This document discusses combining Django and React to take advantage of both. It provides steps to create a Django project with REST API endpoints and a React frontend app that fetches data from the API. Key steps include creating Django models, views and URLs, then setting up a React app with components that call the Django REST API and render data. Bringing Django and React together allows building scalable web apps rapidly with Django's backend and React's frontend capabilities.
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