So you have decided that you need take your company/product on to the mobile/android plaform.
One of the important decisions you need to make is to decide what technology to use to build the app.
Thankfully, unlike building desktop applications or websites, the choices are not extensive. There are only 3 choices:
2. To use cross-platform tools
3. To use native app development tools.
There is nothing inherently right or wrong about choosing any of the above choices, though each one has its strengths and weaknesses.
Let us look at each of the choices in more detail.
Typically, if you are building content based apps or moving your website on to the mobile, this would be the way to go. Your application will run within the browser just like a typical HTML based website. HTML5 has native support for running embedded videos and audio, has several new inline elements such as progress bars, meters, etc., several new form types including datetime related fields, email, url, etc. that make browser side field validation a lot easier – at least for standard fields, and other nifty features that make the user experience richer than we are currently used to seeing on a typical website.
However, if you want to access the device’s camera or the telephony API, etc., then this option is not for you.
One advantage to this approach is that there is no need to download or install an app. The user just has to point to your site and use it just the way they would from their desktop.
The other advantage is that with some tweaking, these “apps” will work on all the platforms that have standard browsers available in them.
2. Cross-platform tools.
This option is for you if you are looking at building the same app across multiple platforms (iPhone, Android, Blackberry, Windows,…) and don’t want to duplicate your effort.
Or, you are only looking to build for the Android, but require access to, say, the camera, using a cross-platform tool will be an option for you.
There are a few cross-platform development tools and the more popular ones are
3. Sencha Touch, and
We have had a long history of cross-platform tools and in my experience, they never meet the requirements on any of the platforms supported. And the same is true with these cross-platform mobile app development tools also.
Understandable, in that the fastest way to get a cross-platform tool up is to support the lowest common denominator of all supported platforms. What you lose out on immediately is the special features on each platform.
Secondly, performance takes a big hit. Native methods are wrapped up in higher level functions, which have uniform wrappers written around them and so on leading to significant code bloat and several levels of nested function calls (all to make the developers job easier). The size of the download and the footprint of the app on the device increases and the app also becomes more sluggish than it needs to be for the same functionality.
Finally, you can never get the fine control over the look and feel that you get when writing native code.
However, there are many apps where a cross-platform tool is more than sufficient to meet the requirements.
Personally though, I would recommend writing the app multiple times using native libraries for each platform if you have any consumer app in mind. For an enterprise apps targeted at a captive population willing to overlook minor irritants, you should still be able to get by using one of the cross-platform tools.
3. Native development.
If you want to build a truly world-class app, there is only one way to do that and that is to use the native development environment. In the case of Android, that is the Android Software Development Kit (SDK) and the programming language is Java.
Most of the Apps that you see pre-loaded on your android phone are all native apps. Over 90% of all apps in the market today are Native apps. The native programming environment gives you access to all the features of a standard Android phone enabling you to build apps that take advantage of the cameras, the GPS, the telephony capabilities, the accelerometer, gyroscope and several other fantastic technological marvels. Additional buttons and features specific to a particular phone/model, of course, will need to be accessed using the phone’s SDK available separately.
Another advantage of going native is that Java is one of the easiest languages to use and there is already a large population of java developers available in the market, making it easy to source, retain and replace programmers.
Having said that, it is not necessary to go the native route all the time, as the first two points illustrate. The catch-phrase is horses for courses. Only as a developer, I find myself betting on the native development option all the time!