├── README.md └── image ├── og_image.png └── screenshot_2.png /README.md: -------------------------------------------------------------------------------- 1 |

Android Developer Roadmap 2022

2 | 3 | ![alt text](https://github.com/cp-radhika-s/Android-Roadmap/blob/main/image/og_image.png) 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 --------------------------------------------------------------------------------