16 klocs – not rocket science Tackling Android Fragmentation Dev:Mobile 2012 @Glennbech , Inmeta consulting Source: Twitter / http://en.wikipedia.org/wiki/Mobile_operating_system#Market_share Nairobi HTC 3G SLIDE On sale May 2010 Got Gingerbread May 2011 Android • ICS 7.3% (All versions) • Honeycomb 2.7% • Gingerbread (2.3) dominant @ 65% • Froyo (2.2) still at 19.1 % • As of February 2012 Phones with no ICS upgrade plan still sold • This will continue iOS • 61% on iOS 5 or above in 15. days! Source: http://developer.android.com/resources/dashboard/platform-versions.html WHO CARES? «Prove that it is feasable, and not overly difficult to, write single APK, native android apps that works well across android versions and form factors» ActionBar & Home Navigation ICS/ Honeycomb tabs ViewPager Action Items https://play.google.com/store/apps/details?id=com.glennbech.nutrinfo Tab Navigation Contextual Actionbar … with ListView multiselect https://play.google.com/store/apps/details?id=com.glennbech.nutrinfo https://play.google.com/store/apps/details?id=com.glennbech.nutrinfo Android • ICS 7.3% (All versions) • Honeycomb 2.7% • Gingerbread (2.3) dominant @ 65% • Froyo (2.2) still at 19.1 % • As of February 2012 Phones with no ICS upgrade plan still sold • This will continue iOS • 61% on iOS 5 or above in 15. days! Source: http://developer.android.com/resources/dashboard/platform-versions.html <uses-sdk android:minSdkVersion=”7" android:targetSdkVersion="14” /> public class TargetSDKVersionExample extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); return true; } } <menu > <item android:id="@+id/menu_save« android:icon="@drawable/ic_menu_save" android:title="@string/menu_save" android:showAsAction="ifRoom|withText" /> </menu> ICS Gingrerbread <uses-sdk android:minSdkVersion=”7" android:targetSdkVersion="10” /> ICS Gingrerbread • • • Official Android 3 & 4 features backported Very simple to use; download using SDK manager and include JAR file in project Includes • • • • Fragment API & DialogFragment Loader API ViewPager, Pager Adapter & FragmentPagerAdapter SearchView Simple Actionbar implementation provided in samples source: http://developer.android.com/sdk/compatibility-library.html#SettingUp • • • No action bar Code «infection» Cannot extend MapActivity since you have to extends custom Activity class • • • • Written by Jake Whorton Easy to use (git clone) Includes & based on support libraries Elaborate. Support for wide range of Honeycomb and ICS features • • • • • • Actionbar Navigation Modes, Tabs and spinners in the action bar. Contextual Action Bar / ActionMode The ICS feature "split action bar“ Plugin for MapActvity (!) www.actionbarsherlock.com Apache License Version 2.0 • • We have used the support libraries, through ActionBarSherlock to get ICS looking apps on pre-ICS phones (back to 1.6 supported) The price • • • Must use a custom theme Must extends SherlockActivity classes Must use overloaded methods, and use getSuppportMenuInflater() etc. WHAT • Introduced in Android 3.0 • Reusable UI components • Have their own lifecycle • Can add their own items to actionbar etc. WHY • Code Reuse • Fragments are integrated into the ICS SDK http://developer.android.com/guide/topics/fundamentals/fragments.html onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) Source: http://developer.android.com/reference/android/app/ActionBar.TabListener.html Actionbar uses TabListeners for tab navigation • • Declared in layout Added/removed from code using FragmentManager Button (100dpx 100dp) HTC Sensation Samsung Galaxy Tab 10.1 Huawei IDEOS • • • • xlarge screens are at least 960dp x 720dp. large screens are at least 640dp x 480dp. normal screens are at least 470dp x 320dp. small screens are at least 426dp x 320dp • • • • • • Excellent support for providing resources based on device configuration Versions mcc310mnc004 (US/Verizon) Car/desk (docking) Night mode ETC Source: http://developer.android.com/guide/topics/resources/providing-resources.html • • Provide differnet layout for different screens and orientations backed by the same activity Provide a different Activity class for a different device/layout. Example one for phone and one for tablet Intent New Intent Phone Activity New Intent Tablet Activity Dispatch Activity (condition) • • • • The Android OS and devices are both forward- and backwards compatible in regard to OS versions Android has excellent support for layout on devices with different screen sizes and densities By using the ActionbarSherlock/Fragment activities you can write code that use fragments and deploy on tablets and phones By using ActionbarSherlock you can get the «ICS look» on your Android 1.X + devices today. Including the kindle fire. “I am an old man and have known a great many troubles, but most of them never happened” – Mark Twain