In my current role at Qudini, I started as an iOS developer. My main task was to create and improve our mobile products for iOS devices based on what was already done on Android. However I wanted to be more efficient in my job and I thought it could be by impacting more users through Android development. Once our iOS apps were at the same level as the Android one, I push the idea that it would be better I start doing Android too. Here is my feedback after 6 months developing on Android.

I’ll start with Gradle, the Android open source build system. I had some knowledge about it but it took me days to figure out how Gradle works and try to avoid not messing with it. It became a common thing to double check any Gradle update and dependencies, otherwise it’s easy to break Android Studio project or features if you let Android Studio automatically update dependencies for you.

apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'idea'

group "org.sample"
version "1.0"

mainClassName = "org.sample.myapp.Main"

dependencies {
    compile "org.sample:number-utils:1.0"
    compile "org.sample:string-utils:1.0"
}

repositories {
    jcenter()
}

Something I missed interface builder and storyboards from iOS. It was a bit a regression for me to create multiple layout for a same component to manage resolution and map UI elements programmatically. It can be pushed to the UI itself in Android, I was surprised to not find an easy way to create a view and set its position straight into the code as we can in iOS.

When I had to create a list, I was lost when using Adapter, and RecyclerView into an Activity. I would have thought that Android had a similar way as iOS and its UITableViewControllerDataSource or UITableViewControllerDelegate. I felt that UIViewController on iOS are more powerful when I compared its lifecycle to an Activity, its Dialogs and Fragments.

Not everything gave me a hard time: my background and experiences on mobile apps helped me to structure my code quickly. I only need to get the right pattern and Android element to make it standard and maintainable. I also discovered great resources like ButterKnife or Retrofit which are a third part libraries that make the gap when you feel Android SDK is limited.

Here Butter Knife library allows you to bind layouts and resources, make it faster to deal with layout. (code from ButterKnife website)

class ExampleActivity extends Activity {
  @BindView(R.id.title) TextView title;
  @BindView(R.id.subtitle) TextView subtitle;
  @BindView(R.id.footer) TextView footer;

  @Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.simple_activity);
    ButterKnife.bind(this);
    // TODO Use fields...
  }
}

The other key was pair programming. I got lucky to work closely to another Android developer that took time to help me by answering to my basic questions. We got used to it and helped each other for the past 6 months more often than we did before.

When I started Android development, my idea was to be more efficient and to balance the amount of work between mobile developers. My day was about 60% iOS and 40% Android. Now it’s mainly Android even if I still prefer iOS environment. Every time I got the opportunity, I jump back to it to learn more about latest Swift version.

It didn’t took me too long to be useful to my team, it was also a good exercise to reorganize my ideas around development. Getting a complete overview of mobile development helped me understanding mobile needs regardless the targeted platform. It also allowed me to work closer to backend developers to create a generic solution to iOS and Android.

I’ll finish by sharing some resources I found useful in my journey.