├── README.md
└── image
├── og_image.png
└── screenshot_2.png
/README.md:
--------------------------------------------------------------------------------
1 |
Android Developer Roadmap 2022
2 |
3 | 
4 |
5 |
6 | Android Developer Roadmap 2022 is learning paths to understanding Android development.
7 |
8 | ## How to Learn Android?
9 |
10 | In Android, programming is done in two languages JAVA or Kotlin and Jetpack Compose(Declarative UI) or XML(Extension Markup Language). The XML file deals with the design, presentation, layouts, blueprint, etc (as a front-end) while the JAVA or KOTLIN deals with working of buttons, variables, storing, etc (as a back-end). And the biggest confusion for an Android beginner is which language to choose between Java and Kotlin? So let me try to overcome the confusion first.
11 | ### Java or Kotlin?
12 |
13 | Java is the official language for Android App Development and consequently, it is the most used language as well. Kotlin has also been introduced as a “official” Java language in 2017. Kotlin is much simpler for beginners to try as compared to Java and it can also be used as an “entry point” for Android App Development. So my recommendation for a beginner is to go with Java first, then jump to Kotlin.
14 |
15 | # Table of contents
16 | * [Sprint 1](https://github.com/canopas/Canopas-Android-Roadmap#sprint-1)
17 | * [Sprint 2](https://github.com/canopas/Canopas-Android-Roadmap#sprint-2)
18 | * [Sprint 3](https://github.com/canopas/Canopas-Android-Roadmap#sprint-3)
19 | * [Sprint 4](https://github.com/canopas/Canopas-Android-Roadmap#sprint-4)
20 | * [Sprint 5](https://github.com/canopas/Canopas-Android-Roadmap#sprint-5)
21 | * [Sprint 6](https://github.com/canopas/Canopas-Android-Roadmap#sprint-6)
22 |
23 | #### Let's start with basic learning
24 |
25 | ## Sprint 1
26 |
27 | ### Java basics
28 |
29 | * Introduction to [Java Programming](https://www.udacity.com/course/java-programming-basics--ud282)
30 | * [Object Oriented Programming (OOPs)](https://www.geeksforgeeks.org/object-oriented-programming-oops-concept-in-java/) Concept in Java
31 | * Java difference between [primitive type and class types](https://stackoverflow.com/questions/5199359/why-do-people-still-use-primitive-types-in-java)
32 |
33 | ### Android basics
34 |
35 | * [7 Key Android Concepts](https://www.macadamian.com/learn/7-key-android-concepts/)
36 | * Android [best practices](https://github.com/futurice/android-best-practices)
37 | * Introduction to [Activities](https://developer.android.com/guide/components/activities/intro-activities)
38 | * Understand The [Activity Lifecycle](https://developer.android.com/guide/components/activities/activity-lifecycle)
39 | * Understand The [Fragments](https://developer.android.com/guide/fragments)
40 |
41 | #### Practicle 1.1
42 | * Button click counter application
43 | - Write an application which counts the number of button clicks and shows the click count on the app screen.
44 |
45 | ### Version control system
46 |
47 | #### Practicle 1.2
48 | * Create repository of practicle 1.1 on Gitlab
49 |
50 | #### References
51 | * Introduction to version control: [What Is Version Control?](http://guides.beanstalkapp.com/version-control/intro-to-version-control.html)
52 | * How to use git
53 | - [Version control with git](https://www.udacity.com/course/version-control-with-git--ud123)
54 | - [Git: The Beginner's Guide to Understanding Core Version Control Concepts](https://www.freecodecamp.org/news/git-the-laymans-guide-to-understanding-the-core-concepts/)
55 | - [When to commit in version control](https://softwareengineering.stackexchange.com/questions/74764/how-often-should-i-do-you-make-commits)
56 |
57 |
58 | ### Delightful user experience
59 |
60 | #### Practicle 1.3
61 | Create the [scorekeeper](https://developer.android.com/codelabs/android-training-drawables-styles-and-themes#1) application.
62 | #### Refrences
63 | * [User Interface](https://www.udacity.com/course/android-basics-user-interface--ud834)
64 | * Basic knowledge of
65 | - [Material designs](https://material.io/design/introduction)
66 | - [Drawables](https://developer.android.com/reference/android/graphics/drawable/Drawable)
67 | - [Styles and theme](https://developer.android.com/guide/topics/ui/look-and-feel/themes)
68 |
69 |
70 |
71 | ### Code Style
72 |
73 | A quick look on [Java](https://source.android.com/setup/contribute/code-style) and [Android](https://blog.mindorks.com/android-code-style-and-guidelines-d5f80453d5c7) code style
74 |
75 | ### Json
76 | * Introduction of [Json](https://www.softwaretestinghelp.com/json-tutorial/)
77 | * [What is JSON and why would I use it?](https://stackoverflow.com/questions/383692/what-is-json-and-what-is-it-used-for)
78 | * [Json vs XML](https://beginnersbook.com/2015/04/json-tutorial/)
79 |
80 | ### Android Permission
81 | #### Practicle 1.4
82 | * Write an application to request read and write storage permission on button click and Show result on the screen.
83 | #### References
84 | * [Permissions overview](https://developer.android.com/guide/topics/permissions/overview)
85 | * [Storage updates in Android 11](https://developer.android.com/about/versions/11/privacy/storage)
86 |
87 | ### User interaction
88 | #### Practicle 1.5
89 | * Write an application that has two edit texts for user name and user phone number, button and recycler view, shows user inputs in recycler view on button click.
90 | #### References
91 | * Android From Scratch: [Understanding Views And View Groups](https://code.tutsplus.com/tutorials/android-from-scratch-understanding-views-and-view-groups--cms-26043)
92 | * Build a Responsive UI with [ConstraintLayout](https://developer.android.com/training/constraint-layout)
93 | * Recyclerview
94 | - Recyclerview [component](https://medium.com/android-news/understanding-recyclerview-components-part-2-1fd43001a98f)
95 | - Recyclerview [Pro Tip](https://proandroiddev.com/recyclerview-pro-tips-part-1-8a291594bafc)
96 |
97 | ## Sprint 2
98 |
99 | ### Kotin for android development
100 | > Kotlin is a great fit for developing Android applications, bringing all of the advantages of a modern language to the Android platform.
101 |
102 | * [Java vs kotlin](https://www.moveoapps.com/blog/java-vs-kotlin/)
103 | * [Kotlin basic](https://kotlinlang.org/docs/basic-syntax.html)
104 | * [Setup kotlin](https://kotlinlang.org/docs/android-overview.html) in android studio
105 | * [Android App Development Masterclass using Kotlin](https://www.udemy.com/course/android-oreo-kotlin-app-masterclass/)
106 |
107 | ### Working in background
108 |
109 | #### Practicle 2.1
110 | * Write an application that lets the user trigger, update and cancel a notification using three buttons.
111 | #### Practicle 2.2
112 | * Create an app that uses a broadcast receiver to receive incoming SMS messages. The app should display a notification when a message with a specific keyword is received.
113 | #### Practicle 2.3
114 | * Create a music player application. Use android Service to play music in background.
115 | #### References
116 | * Guide to [background processing](https://developer.android.com/guide/background)
117 | * [Broadcasts](https://developer.android.com/guide/components/broadcasts)
118 | * [Services](https://developer.android.com/guide/components/services)
119 |
120 | ### Saving user data
121 | #### Practicle 2.4
122 | * Imaplment Contact diary applicatio. User should be able to add, edit, delete, and search for contacts. Users can set reminders for the birthdays of their contacts and receive notifications.
123 | #### References
124 | * Introduction of database:[Udemy section 10](https://www.udemy.com/course/android-oreo-kotlin-app-masterclass/) : lecture 177 - 178
125 | * [Data and file storage](https://developer.android.com/training/data-storage) overview
126 | * [Shared preferences](https://developer.android.com/training/data-storage/shared-preferences)
127 |
128 | ##### Save data in local database
129 | * Introduction of database:[Udemy section 10](https://www.udemy.com/course/android-oreo-kotlin-app-masterclass/) : lecture 189 to 191
130 | * Save data using [SQLite](https://developer.android.com/training/data-storage/sqlite)
131 | * Storing data with [Room](https://developer.android.com/training/data-storage/room)
132 |
133 | # Advance Learning
134 |
135 | ## Sprint 3
136 | > Now it’s time to dive into the real development with 50% work and 50% training daily
137 |
138 | ### Jetpack compose
139 | #### Practical 3.1
140 | * Create a UI like [this](https://github.com/cp-radhika-s/Android-Roadmap/blob/main/image/screenshot_2.png)
141 | * Create a Quiz Appication. It should displays a series of multiple-choice questions. Users can select an answer and receive instant feedback on whether they were correct or not.
142 | #### References
143 | * [Setup](https://developer.android.com/jetpack/compose/setup)
144 | * [Jetpack compose basics](https://developer.android.com/jetpack/compose/tutorial?gclid=Cj0KCQjwktKFBhCkARIsAJeDT0ild-qffsVE98m2uwRTmjnj5LRAH2yAm9GCFKzPvYZfw-RbHKFsZUsaArEgEALw_wcB&gclsrc=aw.ds)
145 |
146 | ### Android Networking
147 | #### Practicle 3.2
148 | * Retrieve and display a simple users list from web API to Android recyclerview using the retrofit library. Display Name, email, and city. Also add functionality to Delete the item.
149 | - **GET Api Url**: http://jsonplaceholder.typicode.com/users
150 | #### References
151 | * [OkHttp](https://square.github.io/okhttp/)
152 | * Typesafe HTTP client for android: [Retrofit](https://square.github.io/retrofit/)
153 |
154 | ## Sprint 4
155 |
156 | ### App Architecture
157 | * [Guide to app architecture](https://developer.android.com/jetpack/guide)
158 | * [App architecture recommendation](https://developer.android.com/topic/architecture/recommendations)
159 | * Android [Application Architecture](https://medium.com/oceanize-geeks/android-application-architecture-189b4721c7c5)
160 | - Android [MVP Architecture](https://androidwave.com/android-mvp-architecture-for-beginners-demo-app/)
161 | - Android Architecture Patterns: [Model-View-ViewModel](https://medium.com/upday-devs/android-architecture-patterns-part-3-model-view-viewmodel-e7eeee76b73b)
162 | - Android [MVVM Design Pattern](https://www.journaldev.com/20292/android-mvvm-design-pattern)
163 |
164 | ### ViewModel and LiveData
165 | #### Practicle 4.1
166 | * Use liveData and viewModel in practical 3.2
167 | #### References
168 | * [ViewModel](https://developer.android.com/topic/libraries/architecture/viewmodel)
169 | * [LiveData](https://developer.android.com/topic/libraries/architecture/livedata)
170 | * [Udemy section 11](https://www.udemy.com/course/android-oreo-kotlin-app-masterclass/)
171 |
172 | ## Sprint 5
173 |
174 | ### RxJava and RxAndroid
175 | #### Practical 5.1
176 | * Create an android application to show a list of movies in recycler view using rxjava and retrofit using MVP architecture.
177 | - **GET API Url** : https://top-250-movies-api.herokuapp.com/api/v1/movies
178 | * Self exercise: Write an open-source project to cover operators of rxjava such as map, flat map, combine, zip etc...
179 |
180 | #### References
181 | * [Rxjava](https://github.com/ReactiveX/RxJava) and [RxAndroid](https://github.com/ReactiveX/RxAndroid)
182 | - Part 1: [The Basics](https://blog.danlew.net/2014/09/15/grokking-rxjava-part-1/)
183 | - Part 2: [Operator, Operator](https://blog.danlew.net/2014/09/22/grokking-rxjava-part-2/)
184 | - Part 3: [Reactive with Benefits](https://blog.danlew.net/2014/09/30/grokking-rxjava-part-3/)
185 | - Part 4: [Reactive Android](https://blog.danlew.net/2014/10/08/grokking-rxjava-part-4/)
186 | * **Example:** [Rxjava with retrofit](https://www.freecodecamp.org/news/how-to-set-up-networking-in-your-android-app-with-retrofit-rxjava-mvp-108e7153521a/)
187 |
188 | ### Hilt
189 | #### Practical 5.2
190 | * Retrieve and display a simple users list from web API to Android recycler view using retrofit. Display name, email and city in recyclerView. Store users in database. **GET Api Url** : http://jsonplaceholder.typicode.com/users
191 | * On user item click display all albums of selected user on next screen. **GET Api Url** : https://jsonplaceholder.typicode.com/albums?userId=1
192 | * On the Album item click show all photos of the selected album on the next screen.**GET Api Url** : http://jsonplaceholder.typicode.com/photos?albumId=2
193 |
194 |
195 | #### References
196 | * [Dependency injection](https://developer.android.com/training/dependency-injection)
197 | * [Dependency injection with Hilt](https://developer.android.com/training/dependency-injection/hilt-android)
198 | * [Hilt](https://dagger.dev/hilt/)
199 |
200 | ## Sprint 6
201 |
202 | ### Kotlin coroutines
203 | * [Coroutines Overview](https://kotlinlang.org/docs/coroutines-overview.html)
204 | * [Thread vs. Coroutines](https://www.youtube.com/watch?v=C38lG2wraoo&list=PLlxmoA0rQ-LwgK1JsnMsakYNACYGa1cjR)
205 | * [Kotlin coroutines on Android](https://developer.android.com/kotlin/coroutines)
206 | * Background processing using coroutines- [Udemy section 12: lecture 276](https://www.udemy.com/course/android-oreo-kotlin-app-masterclass/)
207 |
208 | ### Kotlin Flow
209 | #### Practicle 6.1
210 | * Make a calculator application. Save calculation history in the database. Users can view history and clear history.
211 | #### Practicle 6.2
212 | * Implament product application. Retrive product list from api, also show full detail on item click
213 | * **API** https://fakestoreapi.com/products
214 | #### References
215 | * [Kotlin flow](https://developer.android.com/kotlin/flow) on android
216 | * [Learn advance coroutine with kotlin flow and LiveData](https://developer.android.com/codelabs/advanced-kotlin-coroutines#0)
217 | #### Practicle 6.3
218 | * Write Unit test of praticle 6.2
219 | #### References
220 | * [Fundamentals of testing Android apps](https://developer.android.com/training/testing/fundamentals)
221 | * [Build local unit tests](https://developer.android.com/training/testing/local-tests)
222 | * [Introduction to unit testing ViewModel with Kotlin Coroutine & Flow](https://blog.canopas.com/introduction-to-unit-testing-viewmodels-with-kotlin-coroutine-367630e95831)
223 |
224 | #### StateFlow and SharedFlow
225 | * [StateFlow and SharedFlow](https://developer.android.com/kotlin/flow/stateflow-and-sharedflow)
226 | * [Reactive Streams on Kotlin: SharedFlow and StateFlow](https://www.raywenderlich.com/22030171-reactive-streams-on-kotlin-sharedflow-and-stateflow)
227 |
228 |
229 | ## Extra
230 | #### Useful libraries
231 | * [Glide](https://github.com/bumptech/glide) for loading and caching images
232 | * [Timber](https://github.com/JakeWharton/timber) : Very useful library for logging
233 | * [EventBus](https://github.com/greenrobot/EventBus) - Android optimized event bus that simplifies communication between Activities, Fragments, Threads, Services, etc. Less code, better quality.
234 | * [Coil](https://coil-kt.github.io/coil/) An image loading library for Android backed by Kotlin Coroutines.
235 |
236 |
237 |
238 |
239 |
--------------------------------------------------------------------------------
/image/og_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/canopas/Android-developer-roadmap/af31ef0dfc196c3c7c9d4f7bb51aee7231a05b9a/image/og_image.png
--------------------------------------------------------------------------------
/image/screenshot_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/canopas/Android-developer-roadmap/af31ef0dfc196c3c7c9d4f7bb51aee7231a05b9a/image/screenshot_2.png
--------------------------------------------------------------------------------