SlideShare una empresa de Scribd logo
1 de 34
Descargar para leer sin conexión
Beating Android Fragmentation
Here be Dragons
Why it’s Scary
That’s a big number.
Know Thy Enemy
• Android OSVersions
• Device DisplayVariations
• Hardware Configurations
The Landscape
The Landscape
• Over 40% of devices in the wild are running Gingerbread! (Android
version 2.3.x,API level 8)
• "Modern" Android OS versions (Honeycomb and higher) are < 50%
of the market.
• Thus, in order to reach all potential users in your market, you must
deal with OS fragmentation.
Basic Defense
• Set targetSdk to the current highest API level.
• Use helper classes to encapsulate OS version checking logic.
Reflection will not work. But you can check
Build.VERSION.SdkInt
• Optionally set minSdk to the lower bound of Android API level
your app supports.
• It is possible to have multiple APKs in Google Play that support
different Android API levels.
Rdio’s Android Landscape
Rdio’s Long Tail
77%
23%
Total Android Users
Top 10 Devices The Rest
Rdio Device Distribution
31%
67%
2%
Devices with over 1,000 users
Devices with > 1 and < 1,000 users
Devices with 1 user
Rdio’s Long-tail (is long)
• 2866 unique devices per month (as determined by Build.Product,
Build.Model)
• Top 10 devices represent 23% of all users
• 255 devices represent 85% of all users
• 894 devices had exactly (one) user
How Did We Get This Data?
• Not from Google Play.
• Even a simple means of identifying the device types and Android
versions running your app/service will prove invaluable.
• Embedding the Build.Model, Build.Product,
Build.VERSION.SdkInt into the User-Agent header, for
example.
• A service that pings an API endpoint every 24 hours. (The example
app has an implementation of this method).
Be Cautious
• The product and model strings can be too granular sometimes.
• Many devices with the same street name have multiple model and
product strings.
• The Samsung Galaxy S III has at least 5 unique model strings.
PickYour Battles
• Use data to drive your development focus.
• Make smart decisions on where you cut off support.
• It is _possible_ to support all the way down to Android 1.6, but is
it worth it?
• Focus on device-specific issues that a lot of your users have.
Device DisplayVariations
Device DisplayVariations
• Display dimensions
• Display density (dpi)
• Display quality
• Don’t try to collect
them all.
• Use SDK tools to help
during design
Tools
• Android support library:Adds support for certain features (such as
Fragments) all the way back to Donut (1.6).
• ActionBar Sherlock:An open source library that adds support for
ActionBar to all versions of Android. http://actionbarsherlock.com
• android-ui-utils: https://code.google.com/p/android-ui-utils/
Use Fragments!
• Activities are heavy, Fragments are light.
• Allow for more flexible UI design and runtime configuration.
Think in Points, not Pixels
• You can’t make a pixel perfect implementation, so don’t try.
• A point is a logical representation of a pixel, based on the actual size
of a pixel on a 160dpi display.
• When designing start with the baseline (160dpi), and extrapolate
upwards. At this density 1pt == 1px (roughly).
Think in Points, not Pixels
• 9-patch is your friend. If your designers aren’t using 9-patch, make
them. There is an excellent 9-patch tool that ships with the Android
SDK (draw9patch).
• 9-patch images are specially formatted PNGs that define what areas
can and cannot be stretched.
draw9patch
Design for Android
• Don’t just take a design made for iOS and shoehorn it into Android.
• Use Android UI idioms:ActionBar, long-press, support landscape
orientation whenever possible, etc.
• RTFM! Google provides some excellent resources on how to design
and develop apps to support different display types.
Level-upYour Layout!
• Two easy, and often overlooked, resources are dimens.xml, and
integers.xml.
• Use Android’s resource directory structure to include multiple
versions (as with any resource). Layout-land, Layout-large, etc.
• For example, define number of columns in a grid view in
integers.xml so different values will be used depending on screen
size and orientation (in lieu of using auto_fit).
integers.xml example
dimens.xml example
Level-upYour Layout!
• Use layout aliases: Define your different layouts (single_pane.xml,
dual_pane.xml, etc) in Resource/Layout, and provide mappings in the
size-qualified values directories (Resource/Values-large, etc).
• This saves you from having duplicate layouts residing in different
Layout directories (i.e. Layout-large/ and Layout-sw600dp/).
Don’t Forget About Focused State
• When designing buttons, or any other clickable/tappable widget,
don’t forget to supply a focused state.
• Without the focused state, the pointing device becomes useless as
the user will have no visual feedback to indicate which control has
focus and will be activated on click.
•<item android:state_focused="true"
android:drawable="@drawable/button_focused" />
Hardware Fragmentation
• May not be an issue depending on your application’s domain.
• Use your manifest to inform Google Play of your hardware
requirements (requires camera, etc).
• Use available APIs to determine fallback action at runtime if optional
peripheral is not available. Such as SensorManager.
External Storage
• Not always external or removable
• Never use a hardcoded path! /sdcard is wrong, wrong, wrong.
• Environment.ExternalDirectory can return a path to internal
storage.
• Store vital application data on internal storage (sqlite database, etc).
Media Framework
• OEMs use many different vendors for their media hardware needs.
• OEMs don’t always or can’t use the default Android MediaPlayer
implementation.
• This means the MediaPlayer can behave in insane ways.
How Rdio Mitigates Device Issues
• Trial and Error (and sometimes luck).
• Beta users group.
• Send one-off test builds to affected users.
• Remote device laboratories such as DeviceAnywhere and Perfecto
Mobile.
Conclusion
• You have no choice, you will encounter fragmentation.
• Be pragmatic, choose your battles, and use usage data to backup
your decisions on where to focus resources.
• Design for Android! Android is not iOS,Android users are not iOS
users, make an app that Android users will like.
Thanks!
• There are 4 of us from Rdio at Evolve (Anthony, Eric, Patrick, and
myself), if you see us, say hi!
• Brett Duncavage, Rdio Android Lead
• @xforward, http://brett.duncavage.org
• Source for example available here: https://github.com/bduncavage/
evolve2013
Biblography
• Android OSVersion Distribution: http://developer.android.com/
about/dashboards/index.html
• Android Designing for Multiple Screens: http://
developer.android.com/training/multiscreen/index.html
• ActionBar Sherlock: http://actionbarsherlock.com
• android-ui-utils: https://code.google.com/p/android-ui-utils/
THANKYOU

Más contenido relacionado

Similar a Beating Android Fragmentation, Brett Duncavage

Android Programming Basic
Android Programming BasicAndroid Programming Basic
Android Programming Basic
Duy Do Phan
 
Android webinar class_1
Android webinar class_1Android webinar class_1
Android webinar class_1
Edureka!
 
Introduction to android sessions new
Introduction to android   sessions newIntroduction to android   sessions new
Introduction to android sessions new
Joe Jacob
 

Similar a Beating Android Fragmentation, Brett Duncavage (20)

Android Application Development Training by NITIN GUPTA
Android Application Development Training by NITIN GUPTA Android Application Development Training by NITIN GUPTA
Android Application Development Training by NITIN GUPTA
 
18th android intro
18th android intro18th android intro
18th android intro
 
18th android intro
18th android intro18th android intro
18th android intro
 
Android Programming Basic
Android Programming BasicAndroid Programming Basic
Android Programming Basic
 
Mobile Application Development powerpoint
Mobile Application Development powerpointMobile Application Development powerpoint
Mobile Application Development powerpoint
 
Android webinar class_1
Android webinar class_1Android webinar class_1
Android webinar class_1
 
Android based os
Android based osAndroid based os
Android based os
 
Android Seminar BY Suleman Khan.pdf
Android Seminar BY Suleman Khan.pdfAndroid Seminar BY Suleman Khan.pdf
Android Seminar BY Suleman Khan.pdf
 
Android ppt
Android ppt Android ppt
Android ppt
 
Android Applications
Android ApplicationsAndroid Applications
Android Applications
 
Android ppt
Android pptAndroid ppt
Android ppt
 
Developing for Android-Types of Android Application
Developing for Android-Types of Android ApplicationDeveloping for Android-Types of Android Application
Developing for Android-Types of Android Application
 
Android dev tips
Android dev tipsAndroid dev tips
Android dev tips
 
Android app development by abhi android
Android app development by abhi androidAndroid app development by abhi android
Android app development by abhi android
 
Android app development
Android app developmentAndroid app development
Android app development
 
Android technology
Android technology Android technology
Android technology
 
Introduction to android sessions new
Introduction to android   sessions newIntroduction to android   sessions new
Introduction to android sessions new
 
Android
AndroidAndroid
Android
 
Enhancing and modifying_the_core_android_os
Enhancing and modifying_the_core_android_osEnhancing and modifying_the_core_android_os
Enhancing and modifying_the_core_android_os
 
Chapter 1 - The Computer of The Future is in Your Hand.pdf
Chapter 1 - The Computer of The Future is in Your Hand.pdfChapter 1 - The Computer of The Future is in Your Hand.pdf
Chapter 1 - The Computer of The Future is in Your Hand.pdf
 

Más de Xamarin

Más de Xamarin (20)

Xamarin University Presents: Building Your First Intelligent App with Xamarin...
Xamarin University Presents: Building Your First Intelligent App with Xamarin...Xamarin University Presents: Building Your First Intelligent App with Xamarin...
Xamarin University Presents: Building Your First Intelligent App with Xamarin...
 
Xamarin University Presents: Ship Better Apps with Visual Studio App Center
Xamarin University Presents: Ship Better Apps with Visual Studio App CenterXamarin University Presents: Ship Better Apps with Visual Studio App Center
Xamarin University Presents: Ship Better Apps with Visual Studio App Center
 
Get the Most Out of iOS 11 with Visual Studio Tools for Xamarin
Get the Most Out of iOS 11 with Visual Studio Tools for XamarinGet the Most Out of iOS 11 with Visual Studio Tools for Xamarin
Get the Most Out of iOS 11 with Visual Studio Tools for Xamarin
 
Get the Most out of Android 8 Oreo with Visual Studio Tools for Xamarin
Get the Most out of Android 8 Oreo with Visual Studio Tools for XamarinGet the Most out of Android 8 Oreo with Visual Studio Tools for Xamarin
Get the Most out of Android 8 Oreo with Visual Studio Tools for Xamarin
 
Creative Hacking: Delivering React Native App A/B Testing Using CodePush
Creative Hacking: Delivering React Native App A/B Testing Using CodePushCreative Hacking: Delivering React Native App A/B Testing Using CodePush
Creative Hacking: Delivering React Native App A/B Testing Using CodePush
 
Build Better Games with Unity and Microsoft Azure
Build Better Games with Unity and Microsoft AzureBuild Better Games with Unity and Microsoft Azure
Build Better Games with Unity and Microsoft Azure
 
Exploring UrhoSharp 3D with Xamarin Workbooks
Exploring UrhoSharp 3D with Xamarin WorkbooksExploring UrhoSharp 3D with Xamarin Workbooks
Exploring UrhoSharp 3D with Xamarin Workbooks
 
Desktop Developer’s Guide to Mobile with Visual Studio Tools for Xamarin
Desktop Developer’s Guide to Mobile with Visual Studio Tools for XamarinDesktop Developer’s Guide to Mobile with Visual Studio Tools for Xamarin
Desktop Developer’s Guide to Mobile with Visual Studio Tools for Xamarin
 
Developer’s Intro to Azure Machine Learning
Developer’s Intro to Azure Machine LearningDeveloper’s Intro to Azure Machine Learning
Developer’s Intro to Azure Machine Learning
 
Customizing Xamarin.Forms UI
Customizing Xamarin.Forms UICustomizing Xamarin.Forms UI
Customizing Xamarin.Forms UI
 
Session 4 - Xamarin Partner Program, Events and Resources
Session 4 - Xamarin Partner Program, Events and ResourcesSession 4 - Xamarin Partner Program, Events and Resources
Session 4 - Xamarin Partner Program, Events and Resources
 
Session 3 - Driving Mobile Growth and Profitability
Session 3 - Driving Mobile Growth and ProfitabilitySession 3 - Driving Mobile Growth and Profitability
Session 3 - Driving Mobile Growth and Profitability
 
Session 2 - Emerging Technologies in your Mobile Practice
Session 2 - Emerging Technologies in your Mobile PracticeSession 2 - Emerging Technologies in your Mobile Practice
Session 2 - Emerging Technologies in your Mobile Practice
 
Session 1 - Transformative Opportunities in Mobile and Cloud
Session 1 - Transformative Opportunities in Mobile and Cloud Session 1 - Transformative Opportunities in Mobile and Cloud
Session 1 - Transformative Opportunities in Mobile and Cloud
 
SkiaSharp Graphics for Xamarin.Forms
SkiaSharp Graphics for Xamarin.FormsSkiaSharp Graphics for Xamarin.Forms
SkiaSharp Graphics for Xamarin.Forms
 
Building Games for iOS, macOS, and tvOS with Visual Studio and Azure
Building Games for iOS, macOS, and tvOS with Visual Studio and AzureBuilding Games for iOS, macOS, and tvOS with Visual Studio and Azure
Building Games for iOS, macOS, and tvOS with Visual Studio and Azure
 
Intro to Xamarin.Forms for Visual Studio 2017
Intro to Xamarin.Forms for Visual Studio 2017Intro to Xamarin.Forms for Visual Studio 2017
Intro to Xamarin.Forms for Visual Studio 2017
 
Connected Mobile Apps with Microsoft Azure
Connected Mobile Apps with Microsoft AzureConnected Mobile Apps with Microsoft Azure
Connected Mobile Apps with Microsoft Azure
 
Introduction to Xamarin for Visual Studio 2017
Introduction to Xamarin for Visual Studio 2017Introduction to Xamarin for Visual Studio 2017
Introduction to Xamarin for Visual Studio 2017
 
Building Your First iOS App with Xamarin for Visual Studio
Building Your First iOS App with Xamarin for Visual StudioBuilding Your First iOS App with Xamarin for Visual Studio
Building Your First iOS App with Xamarin for Visual Studio
 

Último

EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Último (20)

Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 

Beating Android Fragmentation, Brett Duncavage

  • 3. Know Thy Enemy • Android OSVersions • Device DisplayVariations • Hardware Configurations
  • 5. The Landscape • Over 40% of devices in the wild are running Gingerbread! (Android version 2.3.x,API level 8) • "Modern" Android OS versions (Honeycomb and higher) are < 50% of the market. • Thus, in order to reach all potential users in your market, you must deal with OS fragmentation.
  • 6. Basic Defense • Set targetSdk to the current highest API level. • Use helper classes to encapsulate OS version checking logic. Reflection will not work. But you can check Build.VERSION.SdkInt • Optionally set minSdk to the lower bound of Android API level your app supports. • It is possible to have multiple APKs in Google Play that support different Android API levels.
  • 8. Rdio’s Long Tail 77% 23% Total Android Users Top 10 Devices The Rest
  • 9. Rdio Device Distribution 31% 67% 2% Devices with over 1,000 users Devices with > 1 and < 1,000 users Devices with 1 user
  • 10. Rdio’s Long-tail (is long) • 2866 unique devices per month (as determined by Build.Product, Build.Model) • Top 10 devices represent 23% of all users • 255 devices represent 85% of all users • 894 devices had exactly (one) user
  • 11. How Did We Get This Data? • Not from Google Play. • Even a simple means of identifying the device types and Android versions running your app/service will prove invaluable. • Embedding the Build.Model, Build.Product, Build.VERSION.SdkInt into the User-Agent header, for example. • A service that pings an API endpoint every 24 hours. (The example app has an implementation of this method).
  • 12. Be Cautious • The product and model strings can be too granular sometimes. • Many devices with the same street name have multiple model and product strings. • The Samsung Galaxy S III has at least 5 unique model strings.
  • 13. PickYour Battles • Use data to drive your development focus. • Make smart decisions on where you cut off support. • It is _possible_ to support all the way down to Android 1.6, but is it worth it? • Focus on device-specific issues that a lot of your users have.
  • 15. Device DisplayVariations • Display dimensions • Display density (dpi) • Display quality • Don’t try to collect them all. • Use SDK tools to help during design
  • 16. Tools • Android support library:Adds support for certain features (such as Fragments) all the way back to Donut (1.6). • ActionBar Sherlock:An open source library that adds support for ActionBar to all versions of Android. http://actionbarsherlock.com • android-ui-utils: https://code.google.com/p/android-ui-utils/
  • 17. Use Fragments! • Activities are heavy, Fragments are light. • Allow for more flexible UI design and runtime configuration.
  • 18. Think in Points, not Pixels • You can’t make a pixel perfect implementation, so don’t try. • A point is a logical representation of a pixel, based on the actual size of a pixel on a 160dpi display. • When designing start with the baseline (160dpi), and extrapolate upwards. At this density 1pt == 1px (roughly).
  • 19. Think in Points, not Pixels • 9-patch is your friend. If your designers aren’t using 9-patch, make them. There is an excellent 9-patch tool that ships with the Android SDK (draw9patch). • 9-patch images are specially formatted PNGs that define what areas can and cannot be stretched.
  • 21. Design for Android • Don’t just take a design made for iOS and shoehorn it into Android. • Use Android UI idioms:ActionBar, long-press, support landscape orientation whenever possible, etc. • RTFM! Google provides some excellent resources on how to design and develop apps to support different display types.
  • 22. Level-upYour Layout! • Two easy, and often overlooked, resources are dimens.xml, and integers.xml. • Use Android’s resource directory structure to include multiple versions (as with any resource). Layout-land, Layout-large, etc. • For example, define number of columns in a grid view in integers.xml so different values will be used depending on screen size and orientation (in lieu of using auto_fit).
  • 25. Level-upYour Layout! • Use layout aliases: Define your different layouts (single_pane.xml, dual_pane.xml, etc) in Resource/Layout, and provide mappings in the size-qualified values directories (Resource/Values-large, etc). • This saves you from having duplicate layouts residing in different Layout directories (i.e. Layout-large/ and Layout-sw600dp/).
  • 26. Don’t Forget About Focused State • When designing buttons, or any other clickable/tappable widget, don’t forget to supply a focused state. • Without the focused state, the pointing device becomes useless as the user will have no visual feedback to indicate which control has focus and will be activated on click. •<item android:state_focused="true" android:drawable="@drawable/button_focused" />
  • 27. Hardware Fragmentation • May not be an issue depending on your application’s domain. • Use your manifest to inform Google Play of your hardware requirements (requires camera, etc). • Use available APIs to determine fallback action at runtime if optional peripheral is not available. Such as SensorManager.
  • 28. External Storage • Not always external or removable • Never use a hardcoded path! /sdcard is wrong, wrong, wrong. • Environment.ExternalDirectory can return a path to internal storage. • Store vital application data on internal storage (sqlite database, etc).
  • 29. Media Framework • OEMs use many different vendors for their media hardware needs. • OEMs don’t always or can’t use the default Android MediaPlayer implementation. • This means the MediaPlayer can behave in insane ways.
  • 30. How Rdio Mitigates Device Issues • Trial and Error (and sometimes luck). • Beta users group. • Send one-off test builds to affected users. • Remote device laboratories such as DeviceAnywhere and Perfecto Mobile.
  • 31. Conclusion • You have no choice, you will encounter fragmentation. • Be pragmatic, choose your battles, and use usage data to backup your decisions on where to focus resources. • Design for Android! Android is not iOS,Android users are not iOS users, make an app that Android users will like.
  • 32. Thanks! • There are 4 of us from Rdio at Evolve (Anthony, Eric, Patrick, and myself), if you see us, say hi! • Brett Duncavage, Rdio Android Lead • @xforward, http://brett.duncavage.org • Source for example available here: https://github.com/bduncavage/ evolve2013
  • 33. Biblography • Android OSVersion Distribution: http://developer.android.com/ about/dashboards/index.html • Android Designing for Multiple Screens: http:// developer.android.com/training/multiscreen/index.html • ActionBar Sherlock: http://actionbarsherlock.com • android-ui-utils: https://code.google.com/p/android-ui-utils/