Everything you need to know to start developing for Android Part 1: the basics

What is Android?
Google’s mobile operating system.

Initial Setup

Development Environments

Android Studio -

the blessed future of Android tooling. Gradle support baked in directly. Great live previews of views. Based on IntelliJ IDEA 13 CE

Eclipse -

Android is moving towards the Gradle build system and better tooling which is why it is listed first, but you could muck around with Eclipse (though Gradle support for it is nowhere near as far along as Android studio), and you can get Eclipse this way:

Learning Android

Android Design -

Know and use Android design patterns. Don’t be a schmuck.

Android Training -

Generally Android applications are created with Java and heavily rely on the Android framework which can take some time to learn. Google’s Android Training sessions are meant to catch seasoned Java developers up to speed and familiarize them with Android to get developers up to speed. Don’t miss any course listed under Basic Training, and really most of the Advanced Courses should be pretty well understood.

Vogella’s Android Development Tutorial -

Lars Vogel is pretty well known in the Eclipse community and his series of Android tutorials have helped me from time to time

Professional Android 4 -

The author of this, Reto Meier, is an Android DevRel for Google and this is a fairly comprehensive book on the Android APIs and essential developer knowledge.
If you’re interested in developing for Google TV there is Google TV specific development information available. Keep in mind TV is very different:

while you might think you can just port your tablet layout to GoogleTV, remember that TVs don't have touchscreens, have up to 10% overscan on the edges, are navigated with the D-pad and not usually the mouse, and the option button is practically taboo.

Distributing Applications

Google Play -

this is Android's major store. Allows staged rollouts and alpha/beta testing directly through the Google Play app on your end users device.

Amazon AppStore for Android -

distribute here to make sure your apps can be installed on Kindle Fires and the like.

F-Droid -

FOSS app store

Or just email/send the apk directly to your users, no provisioning necessary.

Android development/design blogs

Styling Android -

Posts fairly frequently on different Android related topics, such as using vector drawables to help scale between different UIs and using Android components like the LruCache to create memory caches.

Cyrl Mottier’s Android Development Blog -

I mostly linked this because of the series of posts on ‘The making of Prixing’, this implementation of the sliding app menu (popularized by apps like Dolphin HD & Facebook) is pretty great.

CommonsWare Blog -

Wrote a book The Busy Coder's Guide to Android Development, posts an answer within 3s to any Android related question on StackOverflow.

My Life With Android -

writes a few articles a month on various Android topics.

Codependent -

Chet Haase's blog. Chet is an Android framework engineer who is mostly responsible for making the animation libraries on Android no longer suck.

Chris Bane's blog -

Chris is an engineer on the Android developer relations team. He created the popular Android-PullToRefresh library.

Useful(?) Tools, libraries, apps, and links

Note: use Gradle, please to find the correct invocation to bring most of the libraries into your project using Gradle

Web Requests

Ion -

Library for handling web requests, including image downloads. Does fancy things like: supports animated GIFs (hard G) and deep image zoom.

OkHttp -

Square's HTTP+SPDY client, probably use it with...

Retrofit -

Square's type-safe REST client

Picasso -

Square's image handling library. Very nice, easy to use API.

Analytics

ACRA -

a library enabling Android Application to automatically post their crash reports to a GoogleDoc form. Much more detailed information than Google Play gives you upon crashes.

Crashlytics -

very nice crash reporting tool. Great iOS support too.

Google Analytics -

kind of nice having app tracking sitting right next to web tracking tools

Flurry -

Pretty popular. My shop has moved away from this tool but it's still widely used I think.

Design Tools -

creating assets for every major bucket is a pain, these can help

Android Asset Studio -

generate icons and images at proper sizes given a source image, even has a 9 patch generator.

Android Support Library -

this is basically part of the SDK, but I mention it here because nearly every app will want to use something from the support library.
Gone are the days of ActionBarSherlock, if you're one of the unfortunate souls still supporting 2.x pull in the appcompat ActionBar from here.
Need a NavigationDrawer? The support library provides an idiomatic NavigationDrawer with instructions.

Otto -

A publish subscribe mechanism for Android. If you use this and IntelliJ I highly recommend the Otto IntelliJ plugin which will show you which parts of your application are publishing and subscribing to particular events.

Dagger -

Dependency injection with Guice/RoboJuice on Android is tremendously slow. Square made Dagger to be much faster (a lot of things are done at compile time, made possible by the explicitness of the object graph). Check out Jesse Wilson's InfoQ presentation on Dagger.

Android SDK Reference Search -

a Chrome extension to add ‘ad’ command to the Chrome omnibox which allows for searching Android Documentation, with autocomplete functionality.

Timber -

Jake Wharton's excellent logging library.

DevDrawer -

excellent app for organizing your projects on your Android device. Create a widget that lists all of your applications (based on filtering package names), quickly delete apps or clear their data, have them available on your homescreen between installs without having to drag them from the app drawer.

To start learning to code My recommendation would be to first learn plain Java and then move on to Android development. Android uses rather advanced Java concepts that require a solid understanding of core Java.

I'd suggest that you start with the MOOC Object Oriented Programming with Java from the University of Helsinki. It will give you a solid Java foundation from which learning Android development will be way easier.

You can also check out New Android Fundamentals

If you'd like to start making games I'd recommend Unity and learning c# Not just because it works on both platforms, android and ios, but because getting familiar with a game engine is really worthwhile if you're interested in making games.

There are multiple ways to make cross-platform mobile apps. Depending on what you actually want to accomplish you can either make a mobile friendly website (without app) for use in a webbrowser or make an app.

In the case of a website I would recommend to look into bootstrap, etc. which natively support different screen sizes. This would basically be a normal website and you would automatically develop the same app for basically all existing operating systems (beware of different browser behaviors, though).

Maybe you are looking for something like phonegap. or React-native.

Play around with all of this for a bit follow, upvote and I'll be back with part 2!

H2
H3
H4
3 columns
2 columns
1 column
1 Comment