Friday, August 9, 2013

Getting ready for Android

Android support in Delphi is on the Roadmap and is expected in the fall.   Although I have a Mac and an IPad, I have an Android Phone.   I was not as excited for the XE4 (iOS support) release as I am about Android support.

I have some thoughts on Android that I want to share...

Market Share

Overall I see a greater number of Android devices, in fact we have 5 Android based devices in my home and only 1 iOS device.  Market studies that I have read vary, but shows in some cases a 50-50 market
and in other it shows that Android has a greater market share.   Regardless the possibility of using Delphi to write a single application that can target both is very exciting.

Android Versions

Android currently has shipped 7 different, Major product releases. These are separated by different code names.     Unlike iOS where most of the users are using the latest version.   Knowing this code names will make your life easier as they are referenced in documentation, blog posts, articles, etc...

The 3 most popular (as of July 8, 2013):
Gingerbread  - 34.1%
Ice Cream Sandwich - 23.3%
Jelly Bean  - 37.9%

Full details on the break down of each code name are market share can be found on the site.   Another good tidbit from this site is the various screen resolutions and
form factors you will see when targeting android.


Distribution is not locked down like the iOS market.
You can distribute you applications in several different ways including
-Google Play Store
-Amazon App Store
-Download from you own site

Design of your application
I love to hear customers talk about just moving an existing windows application to Windows.   After talking with them, they quickly realize that the form factor and touch interface requires a redesign to the look and feel of an application.     For example, most VCL Delphi Applications I have seen contain a Grid.   I rarely see such anything like that on mobile platforms.   To help with this mind set switch I would recommend reading a couple of Design Guidelines.

A bit about the internals of Android

At the heart of Android is the Linux Kernel (Version 3.x since Ice Cream Sandwich release).
On top of the Kernel sits the Dalvik Virtual Machine which runs Java Byte Code.

So when it comes to development you have two targeting options.  
  1. Native - Runs at the Linux Kernel Level
  2. Java Byte Code - Runs in the Dalvik Virtual Machine
Since Delphi is using LLVM for the Android Compiler, applications running will be targeting native.
Java has history of being able to interop between native compiled code, it uses a technology called JNI.
I  suspect that Delphi will have some easy way to do JNI since several of the android libraries are based in Dalvik.

Now it's time to wait and see what Delphi's Android support will really shape up to be.

1 comment:

  1. I totally agree; I'm looking forward to running the beta of the Android support in Delphi and getting to see if it can do a decent job.

    Firemonkey has been a bit of an uphill struggle at times in XE4 but within a very short period of time I had a working (commercial) app for a customer who then promptly requested another app immediately with an option for a further one to complement a desktop app I am developing for them.

    With XE4 and Firemonkey it was a lot easier than knocking things together with XCode (even though I do love the XCode IDE and I'm learning to feel some love for Obj-c too). Since then I've put out a few more apps reusing Delphi code and skills. The biggest hurdle for me was finding that Firemonkey had no decent iOS style calendar-picker. In the end I opted for the iCL components from TMS, almost entirely to get a date picker that worked the way users expected it to.

    Embacadero's reason for omitting the date picker was because they could not provide one which was consistent across platforms (i.e. look *almost* the same on Windows/OSX/iOS). I do sort of see their point as I had similar problems when I was exploring the idea of moving to Java from cross-platform development prior to the release of XE4. This coincided with the big Java worm/virus scare so the decision was sort of made for me as clients flew away from the idea of desktop apps developed with Java but by that stage I'd already found that the Java platforms offer different date pickers too - but, more importantly, the actual roll-out of an app written in Java was a nightmare of libraries and supplementary installs compared to the easy peasey "one executable and it works" world I'd been used to with Delphi for the last 17 years.

    Now, the it's going to be interesting to see what happens with Android. Will we have to put in a massive bucket of code hacks and compiler IFDEFs to make it 'sort of work from the same codebase' or will using Firemonkey save us from this?

    It still feels a bit like a Delphi renaissance..let's hope Embarcadero lives up to that.