Slide 1

Slide 1 text

WHY ARE ANDROID APPS SO CRASH-PRONE?

Slide 2

Slide 2 text

JAMES SMITH loopj loopj

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

android-async-http http://loopj.com/android-async-http

Slide 5

Slide 5 text

CONGRATS ON LAUNCHING! …NOW WHAT?

Slide 6

Slide 6 text

> 400,000 APPS IN THE PLAY STORE HAVE NEVER BEEN DOWNLOADED

Slide 7

Slide 7 text

< 0.1% OF APPS HAVE 50,000 OR MORE DOWNLOADS

Slide 8

Slide 8 text

CRASHES MATTER

Slide 9

Slide 9 text

YOUR APP WILL LIVE OR DIE BASED ON ITS QUALITY — CUSTOMERS HAVE A CHOICE

Slide 10

Slide 10 text

80 - 90% OF APPS ARE USED ONCE THEN DELETED

Slide 11

Slide 11 text

84% OF USERS ABANDON AFTER TWO CRASHES

Slide 12

Slide 12 text

WHY ARE ANDROID APPS SO CRASHY?

Slide 13

Slide 13 text

THE CLIENT-SIDE IS THE WILD WEST

Slide 14

Slide 14 text

1. FRAGMENTED HARDWARE 2. ROOTED PHONES 3. MULTIPLE ANDROID VERSIONS 4. VENDOR MODIFICATIONS 5. MULTIPLE APP VERSIONS LIVE 6. OUT OF MEMORY ERRORS

Slide 15

Slide 15 text

1. FRAGMENTED HARDWARE

Slide 16

Slide 16 text

https://developer.android.com/guide/topics/ manifest/uses-feature-element.html#hw-features DETECT FEATURES PRE-DOWNLOAD

Slide 17

Slide 17 text

DETECT FEATURES AT RUNTIME import android.content.pm.PackageManager; PackageManager pm = context.getPackageManager(); if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) { // Use the camera }

Slide 18

Slide 18 text

2. ROOTED PHONES

Slide 19

Slide 19 text

DETECT ROOTED DEVICES https://blog.netspi.com/android- root-detection-techniques/

Slide 20

Slide 20 text

3. MULTIPLE ANDROID VERSIONS

Slide 21

Slide 21 text

TRACK ANDROID PENETRATION https://developer.android.com/about/dashboards/index.html

Slide 22

Slide 22 text

FOLLOW GOOGLE BEST-PRACTICES https://developer.android.com/training/ basics/supporting-devices/platforms.html ...

Slide 23

Slide 23 text

4. VENDOR MODIFICATIONS

Slide 24

Slide 24 text

¯\_(ツ)_/¯

Slide 25

Slide 25 text

5. MULTIPLE APP VERSIONS LIVE

Slide 26

Slide 26 text

VERSION YOUR APIS

Slide 27

Slide 27 text

6. OUT OF MEMORY ERRORS

Slide 28

Slide 28 text

java.lang.OutOfMemoryError at android.graphics.Bitmap.nativeCreate(Bitmap.java:-2) at android.graphics.Bitmap.createBitmap(Bitmap.java:689) at com.squareup.ui.SignView.createSignatureBitmap(SignView.java:121)

Slide 29

Slide 29 text

USE LEAK CANARY https://github.com/square/leakcanary

Slide 30

Slide 30 text

YOU AREN’T ALONE

Slide 31

Slide 31 text

AVERAGE CRASH RATE BETWEEN 4% - 7%

Slide 32

Slide 32 text

CHECK OUT BUGSNAG TO HELP YOU FIND + FIX THESE CRASHES!

Slide 33

Slide 33 text

THANK YOU!

Slide 34

Slide 34 text

QUESTIONS? @loopj • come and say hi at our booth - we’ll give you 2 months free • https://speakerdeck.com/loopj/