Android developer Roadmap for 2019
2019 is an amazing time to be an Android dev. And, with so much innovation and progress that Android has recently made, it is one of the hottest technologies to be a part of. Recent advances in Kotlin, Android Things, etc makes it overwhelming for a newbie dev to consume the right information and move forward in a direction.
So, I thought of writing this guide after pretty much going through the same patch in early 2017. Hope this guide helps you be the Android dev you wanted to be in 2019.
Let’s start with the basics first.
Get started with Android development
- Learn basic Java from Head First Java
- Setup Android Studio
- Setup Kotlin in Android Studio — you can skip this if you aren’t going to learn Kotlin this year
- Read Android User interface — Learn more about XML and View components
When you do this, you do not only have a good setup dev environment to build apps on top of Android — but you are also well prepared with basics and fundamentals to understand common terminologies that Android devs and most tutorials would use.
You also now can build basic apps on Android and can develop a few features. Feel free to use a blank canvas and fill it with your imagination.
When you are done playing around with ideas, the next goal for you in 2019 is to step up the game and push yourself as a developer that builds apps for the billions. Let’s go to level 2 now!
Improving yourself as an Android developer
This list will act as more of step by step ladder for you to learn, implement and move forward.
- Understand the Activity Lifecycle to push a bug free application
- Leverage dynamic and flexible and dynamic UI designs using Fragments
- Learn how to debug your Android app — use Android Studio debugger
- Master Android activities to build screens that you want a user to navigate through
- Gain an understanding of context in Android
- Learn REST and HTTP — Most pro devs are extremely good at understanding all aspects of REST and HTTP
- Learn how to take advantage of multithreading
- Learn how to move the work off the main thread
- Importance of threading
- Learn classes that are provided to help you make the most of the threaded code in the shortest time
- Learn how Android uses threading at system level, how that impacts design choices and decisions within your app
- Learn nuances of system memory and threading code
- Learn how to apply threaded solutions to extremely large and complicated tasks - Be an expert at handling configuration changes
- Retain an object during a configuration change
- Handling config changes by yourself - Learn Database and SQL
- Cloud databases
- Offline and local databases
- Offline architectures and offline first practices - Content providers:
- Learn how to share data with other apps
- Learn how to access data from other apps
- Create a content provider that helps other apps to securely access and modify your app’s data
- Play around with Calendar provider and contacts provider - Learn about the top Android 3rd party libraries — The most helpful and used ones are:
- OkHttp
- GSON
- Retrofit
- Glide
- Butter Knife
- Crashlytics
- Guava
All of them helps you build a solid pro level understanding of Android’s ecosystem and prepares you to handle at least 10–15 different types of business use cases with Android apps.
Learn Android Performance Patterns
When you really want to craft an extremely powerful and memorable experience with Android, starting with Android performance patterns is the perfect place. If you go through this list you’ll not only learn how you can implement them but will also discover a few performance patterns that you otherwise would’ve missed. They are an incredible tool at the hands of a pro Andoid dev. So, here’s what you need to learn and take care of when it comes to Android Performance patterns:
- Async tasks aren’t helpful for processes that run for long or threaded callbacks. Learn how to use Handlerthread to handle these processes instead
- Learn how to tackle memory churn
- Learn how to fit Intent services with threading for efficiency
- Learn Android Service performance patterns to kill services as soon as their work is over
- Learn Android specific hashmap containers to build apps with a balance of performance and memory
- Learn how to use Memory monitor tool to observe how allocations impact your app’s performance
- Optimize your app for networking performance using caching
- Optimize the frequencies of your app’s network requests
- Learn how to tackle leaking views
- Learn how to handle Garbage collection
- Learn how updating the visual properties of your app impacts the performance
- Get an in-depth understanding of vertical synchronization
- Learn how to map Android UI with GPU and discover complexities that you should tackle to make sure your app runs smoothly
- Learn how to build an app that renders at 60fps without dropping frames — discover how many other apps compete with your app for the system’s resources and devise strategies to handle it
- Learn how to track GPU performance and improve upon rendering your app
- Learn strategies on how to reduce battery drain
- Benchmark your app against your competitors and the Playstore breaking apps and try to improve over the app launch time. See how far you can get
- Reduce your app size
Let’s take it up to the 3rd level
Get deep into memory optimization with Bitmaps
Learn and practice how you can use Glide to handle bitmaps in your Android app. The problems you face would be when you serve a ton of content on your app would require fetching, decoding and displaying bitmaps. If you are not doing it right, you are eventually going to break your app, making sure that a ton of users are going to feel that your app isn’t good.
Note that you now have to handle up to 48MBs of Bitmap just from the user’s camera generated images these days. This can easily eat up all the available memory.
Android Architecture Components
One of the biggest things that I learned as a software dev was to practice and innovate on top of architectures and their components. As I started moving beyond MVP, MVVM, MVx’s, etc I realized that there’s a ton of space for innovation around these architectural components as well.
For example, back in 2017, default BLE(Bluetooth low energy) configs and setup weren’t up to the mark. Understanding that an architectural component could improve here by building an intermediate service library was a huge benefit to me.
So, to learn this properly, I would suggest you pick individual architectural components of your app and learn their best practices. Some of these that come to my mind are:
- Data binding
- Lifecycles
- LiveData
- Navigation
- Paging
- Room
- ViewModel
- WorkManager
Be a pro with testing
You don’t want to become one of those devs that says “It works fine on my system”, right? So, build everything on top of your architecture design and optimization knowledge to create unit tests (JUnit4), learn how to use Espresso and focus on building Code Coverage reports that delights Engineering managers and VPEs. Focus on how these reports help the engineers, testers, managers and stakeholders move through critical app’s performance issues and prioritize them.
And automate and reuse as much as you can from your original setup. That sets a path for you to become an engineering manager.
Reactive Programming — RxJava
This goes without saying and probably is one of the most looked after component of information in your resume and practical interviews. There are a ton of places where you can practically learn how to implement RxJava and it’s best practices. But, my favorite ones are:
- Grokking RxJava Series
- Exploring RxJava 2 by Jake Wharton
- Managing State with RxJava by Jake Wharton
They serve as a pretty good starting point for you to understand RxJava and master some aspects of it. If you are looking for more topics to explore around RxJava, consider going through these as well to explore:
- Depth of Observables in RxJava
- Implementing Caching using RxJava
Learn everything around Dagger
The steps to being a Dagger pro are:
- Go through the documentation and understand the entire dependency injection process
- Build a list of limitations
- Build a project and implement Dagger 2 in it
Go Pro with security
An Android pro and a security expert? Wow! That’s something we all rarely see in a dev!
So, here are a few things that you can do in 2019 to be that person:
- Learn how you can isolate your app’s data and code from other apps
- Learn cryptographical functions and implement them
- Learn how you can remove risks associated with memory management errors
- Learn how to best use user granted permissions to control app data
- Secure data storage and encryption with: local storage, while-in-motion or on cloud
- Become proficient with Content Providers for secure access
- Make sure you obfuscate your data
- Learn how you can implement native security solutions that aren’t a part of general Android stack
- Audit popular 3rd party libraries to understand and break down them by level of vulnerabilities and build a research doc around it
- Work on making BLE more secure within your app
That’s it for now, hope this list helps you become a professional Android dev you want to be in 2019! If you have any suggestions or comments, feel free to add a comment here or get in touch with me on @a_ginovski.