Android

Implications of Android 4.0 Ice Cream Sandwich for app developers

Developer Kyle Miller explains why Android 4.0 Ice Cream Sandwich has him confused about the future of his current apps.

As a daily Android user and avid fan, I'm extremely excited about Android 4.0 Ice Cream Sandwich. I thought it would be a slight upgrade from Honeycomb to bring phones and tablets into sync, so I was not expecting all of the amazing features Google added. There's a lot to look forward to, including the completely overhauled UI, Face Unlock, hardware acceleration, and the new camera software.

As a developer, I'm a little confused regarding the future of my current apps. The Galaxy Nexus, the first Google flagship device to launch with Ice Cream Sandwich, has no hardware buttons, which follows in the footsteps of Honeycomb tablets. Some of the buttons that used to be hardware buttons (such as Back and Home) are now in software. However, Google has chosen to replace the Menu and Search buttons with a dedicated multi-tasking button to switch quickly between open apps.

For legacy apps, Honeycomb and Ice Cream Sandwich are designed to display a software Menu button to support the old Options Menu, but it doesn't always seem to work correctly, as users of the Galaxy Nexus are discovering on certain popular apps such as Facebook. If the legacy Menu button doesn't appear, users have no way to access your Options Menu, which is typically where developers like to stick the Settings.

Back when Honeycomb first came out, Google introduced developers to the Action Bar. The Action Bar was meant to replace the old Options Menu and was a smart move on Google's part -- the design gives developers a lot of flexibility. The Action Bar also eliminates one of the big downfalls of the old Options Menu by bringing previously hidden options to the forefront and making it obvious these options exist.

When I first started developing Android apps, I was a big fan of the Options Menu; it was a great way to easily pack additional options into my UI without cluttering it up. I would add lots of features to the Options Menu because I loved how clean it left my UI. I quickly learned that only the power users thought to press the Menu button when they were looking for more options, so many of my best features were not being discovered. The Action Bar solves this problem perfectly, and in a future post I'll cover all the customizations that can be done.

If I allow Honeycomb and Ice Cream Sandwich devices to use my app, I run the risk of no one being able to access the current Options Menu. I could restrict tablets from downloading my app from the Android Market (although I didn't see this issue arise before in Honeycomb), which would only leave the Galaxy Nexus. This evokes more questions:

  1. Is supporting one device worth the time and effort it takes to learn about the Action Bar and implement it in place of your old Options Menu?
  2. What will be the trend with Ice Cream Sandwich phones? Will manufacturers follow in Google's footsteps and remove hardware buttons in lieu of software buttons?

Question #2 is what you need to consider if you're going to invest the time to upgrade your app. When Ice Cream Sandwich was first announced, OEMs were quick to put out a list of devices that would be upgraded. Since all of the devices already have physical buttons, your apps will be unaffected on these devices even once they're running Ice Cream Sandwich because the OS was designed to only use virtual buttons when the hardware is lacking physical ones.

It really comes down to future devices. One of the leaked renders I have seen online is the HTC Edge, which is rumored to be a quad-core, 4.5" 720p-toting monster. If the renders are correct, the device will sport physical hardware buttons, which has me scratching my head.

I think the software buttons are the way to go, because it allows the manufacturer to use most of the device's body for the screen in order to maximize the screen size while keeping the overall footprint of the device to a minimum. Of course, that doesn't mean they will.

It would make things easier if the new Action Bar was backwards compatible, like Fragments. Because of this, it's not wise to go ahead and switch your app to using the new Action Bar, which would require you to target Ice Cream Sandwich and thus leave previous versions of Android unsupported. This is likely one of the reasons that lead Google to introduce a feature in the Android Market that allows you to publish multiple APKs for each of your apps.

For now, your best bet is to branch off your source code into a separate version just for Ice Cream Sandwich (and possibly Honeycomb if you wish to support tablets), implement the new Action Bar, and publish it to the Market as a separate APK. To do this, I advise turning your current project into an Android Library and then creating two new projects -- one for 2.3 and below and the other for Honeycomb and above, and including the Android Library you created. This will allow you to make bug fixes and changes to shared areas of the code only once instead of in two separate apps.

Have you already converted your app to the new Action Bar? Have you added support for Honeycomb/Ice Cream Sandwich, but you're relying on the legacy Menu button? Sound off in the comments.

Related: Inside Android 4.0 Ice Cream Sandwich (screenshots)

About

Kyle is a senior software engineer specializing in web/Android development living in Austin TX. He's a self-professed "gadget freak" whose passion for mobile devices drove him to jump into the mobile industry in 2010. He enjoys the fast-paced nature ...

2 comments
chun.wai.wong
chun.wai.wong

I have been an iPhone and iPad user for 3 years. I got my HTC Sensation XE a month ago and love it to bits. The fixed buttons enabled me to backtrack to where I came from. Using iOS, it is frustrating to have to enter the software where you came from. Hence, the Android hard keys are a delight. Don't take them away.

daviddeveloper
daviddeveloper

Hi Kyle, Great text. An alternative is to create a view like the ActionBar in pre honeycomb versions. Some developers do that by placing a fixed view containing buttons in the top of the activities. What do you think about this approach?