Android 4.1 (JellyBean) was announced at the keynote address this morning at Google I/O 2012. After the keynote I attended a standing room only presentation by Chet Haase and Romain Guy who went through the features in more detail. As usual I'll break the features down into user-oriented and developer-oriented lists.
Before you ask, it is not known yet exactly which devices will get JellyBean and which will not. It will appear first (in July) on Google Nexus devices and Xooms that get their updates directly from Google. Any devices shipping now with Android 4.0 are likely to get an upgrade to 4.1. For the rest, we'll have to see what the different Android partners announce in the days and weeks to come. As I mentioned in this post, even orphaned devices can get upgrades through custom ROMs such as Cyanogenmod.
Android 4.1 is an incremental release that contains a several nice features for users, including:
- Faster, more responsive, interface throughout the system. Google started an internal effort called "Project Butter" to make the JellyBean UI "buttery smooth", and you can definitely tell a difference based on side-by-side comparisons. Using a technique that I first suggested to the team months ago, Android will actually use your finger's speed and direction to predict where it will be a few milliseconds ahead of time, and make sure the UI is there to follow it. This should finally (I hope) put to rest complaints that operations like scrolling are slower on Android than other platforms.
- Offline voice. This is a Big Deal. Until now, when you pressed the voice icon and spoke a command or query, Android had to digitize your voice, upload it to the cloud, process the waveform, turn it into text, and send the text back down to your phone. Now the phones are powerful enough that this can be built into the device, with no extra network I/O needed. As you can imagine this results in *much* faster voice recognition than previous versions.
- Richer notifications. Android already has the best notification system of any mobile OS, but in JellyBean Google is taking it to the next level. Notifications won't just be a couple of lines of text - they can be pictures, lists, or whole paragraphs, and they can have action buttons for direct access to do things like reply to email, call somebody back, or vote up an article without opening a separate app to do that. Users can expand and collapse notifications, and even block notifications from apps they don't want to hear from.
- Home screen widgets will be easier to use in JellyBean. When you drag a widget to the home screen, other widgets will move out of the way, or the one you are dragging will resize itself to fit.
- New locales and fonts for Arabic, Hebrew, Thai, and others. Right to left text is much improved in this release.
Underlying every feature for the user is one or more new Developer features or API that make it possible. Here are the ones I feel are most important:
- New Notifications API. Google added a priority and bigContentView field to Notifications, plus a number of styles such as BigTextStyle, BigPictureStyle, and InBoxStyle to make it easy for developers to provide richer notifications. During the developer talk they showed screen shots from third party apps that have already adopted the new APIs including Foursquare, Pulse, Spotify, Path, and Pocket Gems.
- Widget improvements. Memory limits can be put on widgets, and they can supply both portrait and landscape orientations. Widgets can be hosted in third party apps, and be notified of size changes.
- Animation improvements. New APIs simplify animations and provide new functionality such as zooming up from a specific point on the screen (such as where the app icon was).
- New navigation. The Up button can be handled automatically by adding one line of XML code. New APIs let you set your back stack to a more predictable state so user's won't get unexpected results when they hit the Back button.
- Accessibility APIs. Enhanced APIs allow handicapped users to do gesture based traversal of all onscreen elements. Text reading is supported by word, line, or paragraph. Custom views with extra semantic structure can be explained to the API so it can do a better job of accessibility.
- READ_EXTERNAL_STORAGE permission. This is a new permission that will be required in a future release for apps that want to read the contents of the SD card. Up to now, anybody could read the SD card. It's not enforced in JellyBean unless you turn on a special developer option. Google strongly encourages all developers that read from the SD card to include this permission now.
- Audio latency. JellyBean shortens the time between when you take an action like pressing a button and when you can hear a sound caused by that action such a click or a gunshot in a game. In current Android versions this delay can be as great as 80ms, which is several frames of a 30 or 60fps game.
- Anti-piracy measures. Starting in JellyBean, applications will be encrypted with a device-specific key so they can't simply be copied and uploaded to the Internet. This means more legitimate sales for developers.
- Incremental APK updates. Let's say you have a 50MB app in the store and you push a bug fix by changing one line of code. In JellyBean (actually in Gingerbread and up now) the Play store will only download the difference between the version the user has installed and the version you pushed, instead of the entire 50MB app again. This is automatic.
- Better NDK support. Now you can build and debug apps that have native components. Previously you had to use a separate tool for debugging the C/C++ parts that was different from what you used for debugging the Java parts.
The good news is that most of the new APIs have been added to the Android Support library, which is used by developers to support older versions of Android. And there are no new icon style guidelines, something all the developers and designers in the crowd applauded.
Have a question about JellyBean? Drop me a line and I'll try to find out the answer while I'm at the conference.