Most upvoted comment
How did you teach yourself Android?(r/androiddev)
Hello! I graduated high school last June 2014, but I had to deffer my enrollment to university because I got sick. Since October 2014, I have been developing Android applications in my spare time. My biggest Android project so far is the following: “Aizoban: Your Manga Reader” (Google Play) (GitHub).
In this post, I’ll list everything I used to learn Android development. However, before I start, I’m going to address few things. I started Android development from reading books, reading tutorials, following a Udacity course, and reading open-sourced applications. Generally, I found that in the prior list, the relevancy or usefulness of the resource increases in its order such that books are horrible while open-sourced applications are amazing. My reasons are the following:
- A lot of Android development books should not be even touched because as soon as these books are released they become outdated. Furthermore, most publishers, a majority being O’Reilly or Apress, have authors for their Android books who either cannot convey information constructively or encourage bad practices (as most Apress authors I find are a bit old or use outdated Android practices). This is not a sweeping declaration, some authors are great to learn a specific thing, but general Android development books are mostly bad.
- Tutorials are great to see how something can be achieved with Android by using the Internet. Thus, it is a very convenient resource, yet a lot of tutorials can be either outdated, from random authors, or just wrong. Although by the end of the tutorial you may be able to do a certain thing, if you try to copy the tutorial with other tutorials to make an application, generally, it might become a mess as tutorials like books to save space just bundle all the code examples into monstrous classes or methods.
- The Udacity course (available www.udacity.com/course/ud853) is a good resource for pure Android development. Being taught be Google instructors you construct a full practical application with Google APIs. My only problem with this is that a lot of Google APIs can actually suck or are extremely verbose, and you would rather use third-party libraries. If you use this course, learn the skills, but then seek third-party libraries so that you can develop more efficiently and conveniently.
- I loved open-sourced applications because if you find the source posted by a well-recognized Android developer or team who are professionals, you understand why they are professionals and start learning the thinking required to make applications like them. By either studying their choice of architecture, design patterns, algorithms, APIs, third-party libraries, bug tracking, tests, tools, and many more, you pick-up on key patterns you can apply in your own applications.
Finally, I’ll list the Android specific resources that I used:
- The Busy Coder’s Guide to Android Development: This is the best book you can ever buy for Android development. It is accessed through a subscription such that you get always updated content for new things Android. It is written by CommonsWare who if you follow StackOverFlow’s Android tag will know that he gave over 14,000 answers.
- Android Programming: The Big Nerd Ranch Guide (Big Nerd Ranch Guides) : This book is a great book which covers a lot about the Android SDK with example projects along the way. A lot of people recommend this. The only problem is that it is not updated for Android 5.0.
- Developing Android Apps: The Udacity course by Google instructors to teach Android fundamentals. It is very interactive, you can browse the resources such as the course example project.
- Roman Nurik: He is Google Developer Advocate who holds great authority regarding UI design. Finding any posts, videos, or presentations from him are great.
- Jake Wharton: He is a developer at Square who supports a lot of innovative technologies and manages a lot of the most used third-party Android libraries. I believe even some of his own and the company’s libraries have been integrated into the Android SDK. If you browse his example projects on GitHub, they are beautiful.
- Cyril Mottier: He is a professional Android Developer Expert (recognized by Google). He has a lot of posts and presentations especially about UI which are awesome.
- Dan Lew: His blog updates fairly regularly about interesting Android topics and advice.
- Mark Allison: I do not really use his tutorials, but he is a recognized expert for Android especially with UI.
- Android Developers: This official YouTube channel features Google developers who post useful information especially DevBytes. You will find videos about new API features, design anti-patterns, UI tricks, performance, and so on.
- Android Weekly: A weekly newsletter which collects great articles and libraries such that it is a great way to find new things regarding Android development.
- CodePath Android Cliffnotes: An online and open-sourced guide to help teach Android developers.
- Android Arsenal: A catalogue of Android third-party libraries.
- Futurice’s Do’s and Don’t’s: It was pretty useful to be warned of certain things when developing for Android.
- Google’s Official Android Design: Know how certain UI elements should be used.
- Material Design: Know how to use Material Design.
- Android Niceties: A curated Tumbler of really nicely designed Android applications for inspiration.
- Google’s Official Android API Guide: Read or gloss over this website, so that you have a good understanding what APIs you have available to you. It helps to find the diamond in the haystack of doing some obscure thing with Android.
- Google’s Official Android Reference: Like all technologies, have the reference at hand. Google is notorious for API incompatibilities, so read for the nuances between API versions.
Specifically, common libraries used by people. There are a lot more, but these are ones I really like.
- RxJava: A Java port by Netflix of .NET’s Rx (Reactive Extensions). It is really popular with the Android development community. You can find Android specific tools at RxAndroid RxJava is really useful for reactive and event-driven programs, thus, and UI. It helps to trivialize concurrency by specifying schedulers, and you just compose Observable sequences which helps your code be very modular. It has a lot of other benefits. Their API documentation is one of the bests with the Marble Diagrams.
- greenDAO: An SQLite ORM which helps interact with your databases through data access objects (DAO).
- Cupboard: An SQLite library for Android which just provides useful methods for simplifying interactions with your database.
- Otto: An Android event bus which helps decouple your code especially when you want Fragments and Activities communicating with each other or the like. Normally, without an event bus you get really annoying boilerplate of listeners.
- Dagger: A dependency injection framework for Android. It is mostly used for static dependencies. It helps modular your code into “modules”, produce easy singletons, and easy mock-up dependencies for different builds when testing.
- Picasso: A really simple to use image downloading library.
- OkHttp: A modern HTTP and SDY client. It now replaces Android’s networking libraries from 4.4 and onward I believe.
- Okio: A I/O library.
- Retrofit: A great library for interacting with REST services through annotation processing.
- DiskLruCache: A useful counterpart to Android’s already available
- Realm: It is really new library for Android, but it is mobile database which can be used instead of SQLite.
- Butter Knife: A view injection library which reduces boilerplate for Android views.
- Auto Parcel: A code generation library to help reduce boilerplate when implementing
Parcelable(required to send data between Activities, Fragments, Services, and Views through Intents).
- Google I/O 2014: Every year, a Google team creates the I/O application for that year’s conference where they try to incorporate all the current best practices using mostly core Android APIs. It is a fairly big repository covering most APIs and even Android Wear.
- U2020: A sample application by Jake Wharton showcasing Dagger, Butter Knife, Retrofit, Picasso, OkHttp, RxJava, Timber, Madge, and Scalpel.