tackling android fragmentation dev:mobile 2012 @glennbech, inmeta consulting 16 klocs – not rocket...
TRANSCRIPT
Tackling Android Fragmentation
Dev:Mobile 2012 @Glennbech , Inmeta consulting
16 klocs – not rocket science
Source: Twitter / http://en.wikipedia.org/wiki/Mobile_operating_system#Market_share
Nairobi
HTC 3G SLIDE
On saleMay 2010
Got GingerbreadMay 2011
X
Situation report June 2012Situation report June 2012
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?
AgendaAgenda
«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»
ICS/Honeycomb
tabs
ActionBar& Home
Navigation
Action Items
ViewPager
https://play.google.com/store/apps/details?id=com.glennbech.nutrinfo
ContextualActionbar
https://play.google.com/store/apps/details?id=com.glennbech.nutrinfo
Tab Navigation
… with ListView
multiselect
https://play.google.com/store/apps/details?id=com.glennbech.nutrinfo
Android versions
Situation report June 2012Situation report June 2012
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
Androidmanifest.xmlAndroidmanifest.xml
<uses-sdk android:minSdkVersion=”7"android:targetSdkVersion="14” />
Example. Hello worldExample. Hello world
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;
}
}
Example. Menu.xmlExample. Menu.xml
<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
Androidmanifest.xmlAndroidmanifest.xml
<uses-sdk android:minSdkVersion=”7"android:targetSdkVersion="10” />
ICS Gingrerbread
Android Support LibrariesAndroid Support Libraries
• 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
Limitations of the support librariesLimitations of the support libraries
• No action bar
• Code «infection»
• Cannot extend MapActivity since you have to extends custom Activity class
ActionbarSherlockActionbarSherlock
• 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
ActionbarSherlock #1 IDEActionbarSherlock #1 IDE
Hello worldHello world
A quick summary A quick summary
• 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.
Fragments
Fragments crash courseFragments crash course
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
Why - ReuseWhy - Reuse
http://developer.android.com/guide/topics/fundamentals/fragments.html
Actionbar uses TabListeners for tab navigation
onTabSelected(ActionBar.Tab tab, FragmentTransaction ft)
Source: http://developer.android.com/reference/android/app/ActionBar.TabListener.html
Using fragments - example Using fragments - example
• Declared in layout
• Added/removed from code using FragmentManager
Extreme client programming
Density and Size Density and Size
HTC Sensation
Button (100dpx100dp)
Samsung Galaxy Tab 10.1
Huawei IDEOS
Definitions Definitions
• 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
Best Match layout picking Best Match layout picking
• Excellent support for providing resources based on device configuration
• Versions
• mcc310-mnc004 (US/Verizon)
• Car/desk (docking)
• Night mode
• ETCSource: http://developer.android.com/guide/topics/resources/providing-resources.html
In practiceIn practice
• 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
Dispatch Activity idiomDispatch Activity idiom
DispatchActivity
(condition)
PhoneActivity
TabletActivity
Intent
New Intent
New Intent
ConclusionConclusion
• 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