Catching up with the Gingerbread Man

While this is only a “point” release beyond Froyo’s 2.2 level, there are quite a few new pieces of functionality in this version, really offering “something for everyone”.

For those who are always checking their monthly minute balance, Gingerbread adds capability for Voice over IP (VOIP) via a Session Initiation Protocol (SIP) library. The library supports both initiating and receiving calls via a new package of APIs named android.net.sip. Want to call internationally, get yourself a SIP account and call away!

Of course, it remains to be seen how much of this functionality is actually supported by the various carriers who are subsidizing the phones. Google Voice and Skype are already available for Android devices, however the addition of this library makes VOIP capabilities more accessible to developers for creating converged communications applications. Naturally not all of those applications will be helpful: imagine a “Distributed Denial of Dial-Tone Attack” with an army of Droids dropping DTMF bombs on the congressional switchboard. It could be like the Clone Wars as the look-alike politicians combat the dialing droids. Mr. Lucas was certainly ahead of his time. Perhaps Android 3.0 will include a light-saber?

Speaking of the force, the next new feature to highlight is Gingerbread’s Near Field Communications (NFC) capabilities. NFC is a very short range communications technology which can be considered an iterative enhancement over RFID readers which can read passive tags. An Android device with NFC capabilities should be able to both read an RFID tag as well as share information with another NFC-capable device in close range. Here close range is defined as a few inches or less. Want to buy something? No problem, just swipe your phone past a fixed scanner, or even exchange funds directly with another individual by touching, or bumping, phones together. Just what we need, another means of increasing our debt! I wonder if Dave Ramsey will ever advocate putting our cell phones in envelopes or cutting up a Nexus S on stage for dramatic effect?

In order to interact with a “smart tag”, an application needs to register an IntentFilter for the action: “android.nfc.action.TAG_DISCOVERED”.

When a tag is read, the data is sent to an application as data attached to an Intent as “extras”. If this doesn’t make any sense to you, research the BroadcastReceiver.

This event-oriented architecture of Android makes it ideal for lifestyle events and continues the change in our programming styles away from monolithic applications and increasingly towards a collection of functionality installed on our devices — customizable to the way we live, work and play. OK, so that sounds like a commercial, but really think about the possibilities of a collection of narrowly defined functionality, customized just the way we want it. Very exciting things await Android fans down the road.

Back to the new stuff in Gingerbread. There is quite a bit and we’re not going to review all of it here because I want to jump ahead to talk briefly about the new Native Development Kit, or NDK. Before I share my thoughts on the NDK, I feel obliged to enumerate the areas where there are enhancements to the SDK, so here is a list of new and/or updated areas:

Multiple camera support

Enhanced audio capabilities

New developer oriented “Strict Mode” which aids in development by keeping applications within the lines

Download Manager

Numerous User Interface enhancements:

Scrolling

Touch events and filtering

Text selection

Large screen (i.e. tablet!) support

Open GL APIs

Better battery life with adaptive LocationManager features

New ContentProviders for making application and data interactions more intuitive and accessible

Up until this point, the NDK has been a means for adding C code to an Android SDK application. In simple terms, the NDK permitted developers to create Java Native Interface (JNI) libraries. JNI libraries are useful in certain areas to bring some body of C code into an application, however the capabilities are somewhat boxed in. With the latest NDK release, the barn door is opened and the horse is nosing its way onto the track, hoping to enter a full gallup to native applications.

The r5 release of the NDK seems to answer the prayers of C programmers hoping to avoid Java — let’s have a look.

The NativeActivity brings the main Android Application component, the Activity, to native code. This NativeActivity runs in the main UI thread, thereby enabling native-written applications. The primary target for this kind of functionality is game authoring. NDK programmers can access graphics, windows, audio, events, resources and storage mechanisms. In other words we should be able to build real applications right from this environment.

Many developers have been looking for this functionality from day one and we should see some folks get off the sidelines and join the Android fray, introducing new gaming and other hardware intensive titles to the Market.

The NDK toolchain has changed also, in a good way. This is something we will examine in an upcoming article. This is getting exciting!