Having created an Android version of my iPhone app Grocery Cook I thought I would share some thoughts on the differences between the two platforms. To boil it down, Android’s language of choice, Java is better than iOS’s Objective-C, but iOS has a more comprehensive API. Having full desktop Java on a mobile device is quite nice but you tend to have to create more code to make up for the holes in the API.
On the UI side both have list views. The equivalent of swiping a table row in Android would be a long-press to bring up a menu. There isn’t any built-in way to re-order table rows though there is code out there to do it. Grouping table rows requires your own code. The equivalent of navigation controller on Android would be activity stacks where you use the back hardware key to move back up the stack. The activity takes up the fullscreen which can be a little bit of an issue if you’re using tabs but there is code out there to get around this. On Android you can bring up a menu by pressing a hardware button. It’s a nice idea to save screen real estate but new users might not realise the menu exists. In Android you can have standard dialogs with text input fields. The equivalent on iOS, alert view can only have a message and buttons. Though can use the following code to make a view that looks like an alert View. When you rotate the device, an activity is disposed of and re-created. Android takes care of re-populating fields but you will also need to handle re-initialising it’s state to what it was. I prefer the way Android’s views can handle change in screen dimensions but handling the re-initialisation of activities is a bit of a pain. I find Android more skinable than iOS. You can define images that stretch properly which is handy. There are different guidelines for icons depending on the version of Android. I just targeted one version. You are also ideally meant to create icons for the different screen densities (high, medium and low) but I just targeted high and medium. I tested the high density images on a device and the medium density ones on an emulator. I found that Android apps run slower than iOS apps probably because Java isn’t compiled to machine code. So you end up doing threading more to stop the UI freezing.
Both platforms have support for SQLite databases but iOS has an ORM framework called Core Data. I created a simple ORM framework on Android. There are paid and free ORM frameworks out there but I wasn’t happy with them.
On iOS it takes around a week to get your app approved for the app store. On Android Market your app is published within an hour with no approval process. Though the amount of users willing to pay for your app is far higher on iOS. In the Android Developer Console you can get sent stack traces when your app crashses. You just have to make sure you don’t remove line numbers and class names when you obfuscate the app with ProGuard so you can debug them. On iTunes Connect you get something similar but for some reason no crash reports ever show up there.