Slide 1

Slide 1 text

Beating Android Fragmentation Juan Gomez

Slide 2

Slide 2 text

Agenda • Intro • Types of fragmentation • Tools • Best practices • Review • Q&A !2

Slide 3

Slide 3 text

Intro Who am I? • Mobile Engineer at Eventbrite • Previously at OneLouder Apps • Android & Python Developer !3

Slide 4

Slide 4 text

Over 2 million events
 150 million tickets sold 
 $2 billion in gross ticket sales
 Events in 179 countries Eventbrite by the Numbers

Slide 5

Slide 5 text

Intro Slides: • http://lanyrd.com/profile/juandg/ !5

Slide 6

Slide 6 text

ANDROID FRAGMENTATION

Slide 7

Slide 7 text

Is it really that bad? ! ! ! ! ! ! Android Fragmentation Visualized (http://bit.ly/1fvOXF0) !7

Slide 8

Slide 8 text

Types of fragmentation • OS Fragmentation • OEM Fragmentation • Hardware Fragmentation !8

Slide 9

Slide 9 text

OS Fragmentation Mainly refers to the different versions of Android being used at the same time !9

Slide 10

Slide 10 text

OS Fragmentation • Android Forks • Other OSes with Android app support !10

Slide 11

Slide 11 text

OEM fragmentation • Skins • TouchWiz (Samsung) • Sense (HTC) • MotoBlur (Motorola) • OEM OS modifications. • Changes to AOSP even on certain API calls. !11

Slide 12

Slide 12 text

HW Fragmentation • All the different types of Hardware features (keyboard, camera, screen, HW buttons, etc). !12

Slide 13

Slide 13 text

HW Fragmentation • Android is designed to manage HW fragmentation • The pain points in this area are on low level things like different chipsets, GPUs, CPU cores, etc. • Android x86 is the extreme example of this. !13

Slide 14

Slide 14 text

TOOLS

Slide 15

Slide 15 text

The Basics • Set minSdkVersion to the lowest API Level you want to support. • Set targetSdkVersion to the current highest API Level. • Use Android Lint to find code that is not supported by your minimum API Level (and other possible problems). • Use fragments when possible. !15

Slide 16

Slide 16 text

The Basics • Encapsulate your version checking logic • Don’t fill your code with this: if (Build.VERSION.SDK_INT < Build.VERSION_CODES.#####) • Use the Support Libraries • Follow the Android Design Guidelines • http://bit.ly/1hMUNmX • Beware of Google Play Services! !16

Slide 17

Slide 17 text

Support Libraries • Support Library v4 • Fragments • Rich Notifications, View Pager, Navigation Drawer, Accessibility, Loaders. • Support Library v7 • ActionBarCompat • Grid Layout, Media Router • Support Library v8 • Renderscript for API Level < 14 !17

Slide 18

Slide 18 text

3rd-party libraries • ActionBarSherlock • NineOldAndroids • Android Asset Studio • http://bit.ly/Lo6Xb5 • Square libraries: • OkHttp, Picasso, Wire, Retrofit • CommonsWare libraries • http://bit.ly/1d7NQs0 !18

Slide 19

Slide 19 text

HTTP Stack • Avoid using Apache HTTPClient • Only use if you’re still supporting API Level < 10 • You should be using URLConnection and its descendants. • Better yet use OkHttp from Square (fork of HttpURLConnection). • You could also use Volley from Google !19

Slide 20

Slide 20 text

Migrate to Gradle • Gradle is a powerful tool that can help manage complicated compatibility scenarios. • Use “flavors” and “buildTypes” to create different APKs for different OSes, chipsets, etc (Kindle, Nook, Tegra, x86, Blackberry, even 2.x and 4.x versions). !20

Slide 21

Slide 21 text

BEST PRACTICES

Slide 22

Slide 22 text

API Levels Recommendations • Older projects should be supporting API Level ≥ 8 • Recommended would be API Level ≥ 10 • If you’re already using ActionBarSherlock, no need to migrate to ActionBarCompat. • New projects should start with minSdkVersion=”14” • If you absolutely have to support API Level ≥ 8 then use ActionBarCompat. !22

Slide 23

Slide 23 text

minSdkVersion=”14” • This is a new “movement” within the Android community that advocates dropping support for older versions of Android (mainly 2.x) ! • Started by Jeff Gilfelt at Google I/O last year • Advocated by Reto Meier from Google during I/O and other events. !23

Slide 24

Slide 24 text

Lots of Testing • Hopefully automated! • Test on actual devices • Use tools like JUnit, Espresso, Monkey, Roboelectric, Robotium, etc. • Leverage something like Spoon (from Square) to run your tests on multiple devices. !24

Slide 25

Slide 25 text

Leverage analytics • Measure everything • Make decisions based on your data • Analytics suites: • Flurry • MixPanel !25

Slide 26

Slide 26 text

Crash reporting • Get a tool to monitor crashes • Lots of options, including: • Crashlytics (Free) • Crittercism • HockeyApp • Some analytics suites provide this as well (like Flurry) • Worst case, use Google Play Dev Console !26

Slide 27

Slide 27 text

Tools from Google • Multiple APK support. • Alpha and Beta groups • Combined with Analytics + Crash reporting • Beta users can’t post reviews • Staged rollouts. !27

Slide 28

Slide 28 text

Summary • Android fragmentation is massively over hyped! • Be aware of the different types of fragmentation • Use libraries to homogenize feature support. • Start planning on dropping 2.x support (Old projects) • minSdkVersion=”14” on all new projects • Leverage Gradle to create multiple versions if needed. • Do lots of tests (Hopefully automated and on devices) • Use Analytics + Crash reporting • Create a Beta community and use staged rollouts. • Rinse and repeat !28

Slide 29

Slide 29 text

Eventbrite Tech Talk: Android Development + Design February 18, 2014 @ 6:30 PM http://bit.ly/1e7oIrl

Slide 30

Slide 30 text

We’re hiring! If you’re interested, let’s talk after the session eventbrite.com/jobs

Slide 31

Slide 31 text

Questions? Download our apps: eventbrite.com/eventbriteapp

Slide 32

Slide 32 text

Thank You! @_juandg [email protected]