Porting iOS to Android

People approach me saying “Here’s our app on iTunes. How much would it cost for an for an Android version?” 

The answer is “It depends”. For example, one thing to think about is whether you wish to retain the iOS look and feel or have an Android-esque UI. This matters a lot because keeping the iOS look and feel will require significant extra work and the app will feel odd to end users.

Another factor is which devices you wish to support. Which versions of Android exactly? [Google’s Platform Versions web page shows the versions of devices that have accessed the Android Market over a 14 day period.] Do you want to support Android tablets as well? Should the tablet version’s screens differ in any way?

This article addresses some issues such that you can approach mobile developers with a better understanding of what’s needed. You need to decide on who is going to re-design the app and if this isn’t going to be the developer, ideally do this in conjunction with the developer.

The Android Market

Firstly, why develop for Android? These numbers for last year show worldwide Android share at over 80%:


This has resulted in investors insisting on Android versions of iOS apps and owners/founders discovering that they are missing out on a large slice of the market. However, it’s a different market. Most apps are free rather than paid. Very few Android paid apps are viable. You need to think instead of freemium strategies and in-app purchasing which might affect the design of your app.

The Android Market itself is open to all. There’s no review mechanism which means your app can do things that might not have been possible under Apple’s terms and conditions. Again, this might affect how you choose to design you Android app. App updates are almost instantaneous which means fewer frustrated end users when there’s a problem with your app. Apps can also be distributed outside the Android Market as simply as putting them on your web site or distributing via email. However, if you do this you might like to include additional update detection and download into your app.

Design for Android

I receive far too many job specs that have wireframes that look like iPhone screens. The problem is that many design tools just have iOS templates by default and people think they can use them to design Android apps. These designs conflict with the look and feel of the device and actually take significantly extra effort to implement. For example, making an Android button or a list look like it does on iOS takes extra effort. The main problem areas are round buttons rather than square, tabs at the bottom rather than top, lists with right pointing arrows, incorrect icons for common functions and back navigation via a top back button.

The first step is not to use iOS design tools. When I am responsible for the design I tend to just use drawing tools. I use Photoshop but you can use your favourite drawing tool. However, I have worked with clients who have used Visio (now owned by Microsoft), Balamiq next (Android controls here), OmniGraffle (on Mac and Android template here) and even scans of hand drawings using a metal stencil.

If you want to get a quick overview on Android UI idioms I recommend looking at the android patterns web site. Google also have a great page where they describe how to design for Pure Android as opposed to copying iOS.

Consider Device Variety

As of Android 3.0, Google changed the way apps can be architected internally to allow for both Smartphone and Tablet layouts. At the same time, they introduced a software Action Bar at the top of the screen instead of using a software or hardware menu key at the bottom of the screen. As of Android 4.0, all new apps both Smartphone and Tablet started to use an Action bar. As of Android 5.0, new apps started to use Material design.

Google provide a compatibility library that allows the latest UI elements to run on much older Android devices back as far as Android 1.6. This allows one app to support all versions of Android while maintaining a consistent look and feel.

When re-designing your app you should think about how data and graphics will be displayed on much larger and smaller screens (than iOS). You also need to think about vertical and horizontal aspect ratios.

Code Porting

It’s not possible to take Objective-C and re-compile it for Android. Android apps use mainly Java although c can also be used (called) from Java. If your iOS app uses vanilla c (i.e. normal plain c code) then it’s possible to re-use that code on Android. This is useful for porting complex libraries or providing increased performance (e.g. image processing). However, Android has significantly less libraries available for the c code to use and often dependent c libraries also have to ported.


A common mistake I see in UI designs is to embed sharing too deeply into the app. Specifications sometimes include UIs that gather information to be sent to facebook, Twitter or wherever. There’s no need for this on Android. Instead, consider using ACTION_SEND Intents which basically hand off links or text to other (installed) apps such as Twitter and Facebook. The OS handles the interface. It’s so flexible that all you do is offer up, for example, some text and the OS will present all the apps that can handle the text. This means users will be able to automatically share to other apps such as email or Evernote (if they have it installed). The bonus for developers is that there’s no need to write code against the various server-side sharing APIs.


The antithesis of sharing is being able to consume data sent via ACTION_SEND Intents. If your app can handle a common format, for example, music, images or text then it might make sense to provide an interface so that other apps can send you information.


Java is slower that compiled Objective-C. You should think about what parts of your app are time sensitive. This might lead to changes in capability or design, for example use of native c code, or alternative special techniques to prevent Java garbage collection.

Data Sizes

Java has a relatively small heap size (working memory size to the layman) compared to iOS. This means, for example, it’s not possible to open images full size. This might impact on your app and you might have to do things differently or move the code to c where there’s no such restriction.

Extra Capabilities

You might have discovered some things weren’t possible on iOS that might now be possible on Android. For example, Android can see all Bluetooth LE (iBeacon) devices in the vicinity while iOS apps can only see those it has pre-declared, by UUID, it wishes to see. Another example is that Android allows direct access to NFC. Extra features in Android might cause you to re-think your design.


Android Java apps are very easy to decompile to get back to the original source code. You should insist your developer obfuscates the code so that reverse generated code is less readable. It’s important that you don’t put any sensitive things directly in you code (e.g. username, passwords) as they will easily be discovered. This might affect the design of your Android app.