> 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
}
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/