My Android survival kit
Take a look at some of the tools and resources I used when I started my journey in Android.
Hi there! After reading so many posts from the Medium Android community, I must admit I am pretty excited to finally publish my first solo post.
September of 2016 marked the beginning of my Android development journey. As soon as I stepped into it, I had one of those “There is so much to learn.Where do I start?!” moments. 😰 Back then, I struggled to find proper resources to help me understand and improve my skills.
With this post, I hope to ease your pain by sharing resources that I have been using throughout this journey and advice that I feel will point you towards the right direction to get comfortable with Android development.
Besides the official Android documentation, Medium and the savior StackOverflow, I often resort to the following resources:
Udacity is an e-learning platform that provides Android courses (free and paid) made in collaboration with Google, which is great! I cannot speak for the paid ones — nanodegrees. However, the free courses are a very good way to start grasping Android basic concepts. The interlocutors explain in a very visual way, making subjects really easy to understand. Also, they cover a really wide range of topics.
Provides a wide range of Android tutorials, all of them full of code samples that guide you step-by-step.
Fragmented is a bi-weekly podcast that debates tools, patterns and practices with influential people in the community.
Architecture samples of the most common Android architectures — MVP, MVVM, Clean Architecture.
A collection of samples that uses the Architecture Components introduced in IO 2017 — Room, ViewModels, LiveData, Paging.
The lazy and awesome way to keep up with the Android current trends. Android Weekly is a newsletter that bundles all sorts of information that ranges from tutorials, articles, libraries and podcasts.
The most popular Android third-party library search platform.
Youtube channel that showcases live events, demos, tutorials and anything related to Android development.
Right from the start, I was very lucky to have a lot of advice from more experienced developers. Thanks to this, I was able to avoid some mistakes and adopt good practices from the beginning. Here it goes some of the advice I was given, and some that I learned the hard way:
- Pick a well known architecture (MVP, Clean Architecture, MVVM). In due time, it will improve your productivity, code maintainability and reduce redundancy.
- I recommend package by feature instead of layer. Turns project navigation easier, promotes modularity and maintainability;
- Ditch Linear and Relative layouts for Constraint layout;
- Butterknife removes the boilerplate code needed to bind a view;
- Retrofit is a very powerful and elegant network library. Right off the bat, you can define everything you need (interceptors, serializers) to properly consume a REST API;
- Picasso and Glide are the most well known and used libraries for image downloading and caching;
- Let’s make Room for the newest persistence library released by Google. Room is an abstraction layer built on top of SQLite. It follows a similar approach to Retrofit, using annotation processors to generate a lot of code for you (database, tables, queries, relationships).
- Use a dependency injection tool. Dagger is the most commonly known. It keeps your code more modular, therefore easier to test. Also, it is a great way to decouple boilerplate code from your logic modules;
- Use mocked data when testing. This will save you from a lot of cumbersome situations in instrumentation testing.
- Cherish your main thread! Google documentation states that for your application to run smoothly should consistently be at 60 fps. To keep your application responsive, it is essential to avoid using the main thread to perform any operation that may end up keeping it blocked (Network calls, database operations). Android Profiler is a mechanism provided by Android studio that enables real-time access and a unified view of the CPU, Memory & Network usage for your app. StrictMode is another tool that alerts when disk and network operations are being executed in the main thread.
- Develop on a low-end device. This is the best way to ensure you have a consistent and smooth experience among devices of different ranges. High end devices could be obfuscating potential issues of your app.
- Use a Continuous Integration tool (Circle CI, Travis, Jarvis) to run your tests (Instrumentation and Unit) and perform a syntax analysis.
- Vysor allows you to mirror your device in your computer and showcase your app to an audience;
- Dive into the source code. It is often a great way to complement or better understand documentation;
- Do not use dynamic dependencies (e.g: “com.google.dagger:dagger:2.+”). It will increase building time;
- There are a bunch of tweaks you can do to reduce gradle building times;