Android App Development Masterclass using Kotlin

Learn Kotlin Android App Development And Become an Android Developer. Incl. Kotlin Tutorial and Android Tutorial Videos

  • Tim Buchalka
  • 4.28
  • (5694 reviews)
  • 62 hrs
  • 382 lectures
  • Udemy
Android App Development Masterclass using Kotlin

What you will learn?

  • Learn the core Android app development and Kotlin skills to build real Android apps.
  • Learn how to target current and older versions of Android when writing your apps.
  • Understand how to create Android apps using Kotlin.
  • Be able to apply for Android app development roles.

Your trainer

Tim Buchalka

Tim's been a professional software developer for over 35 years. During his career, he has worked for major companies such as Fujitsu, Mitsubishi, and Saab. His video courses are used to train developers in major companies such as Mercedes-Benz, Paypal, VW, Pitney Bowes, IBM, and T-Mobile just to name a few (via the Udemy for Business program). What makes Tim unique is his professional programming career - many instructors have never programmed professionally, let alone had a distinguished professional development career like Tim. Tim has trained over 812,000 students how to program, way more than a typical IT Professor at a college does in a lifetime. In fact, Tim's courses are often purchased by students struggling to get through college programming courses.

382 lessons

Easy to follow lectures and videos covering subject details.

62 hours

This course includes hours of video material. Watch on-demand, anytime, anywhere.

Certificate of Completion

You will earn a Certificate of Completion at the end of this course.

Course curriculum

  • Introduction01:53
  • The Udemy Interface06:08
  • Introduction to Android19:21
  • FAQ01:41
  • Windows - Install Android Studio11:18
  • Mac - Install Android Studio06:35
  • Linux - Install Android Studio11:35
  • Configure Android SDK on all Three Platforms12:04
  • Android Studio Settings03:01
  • Enable VT-X in BIOS13:54
  • Your Programming Careers Questions Answered01:53
  • Access to Programming Career Q&A00:28
  • Introduction00:40
  • Android Studio Templates08:01
  • FAQ: Templates in Android Studio 3.6 and later00:37
  • More on Android Templates08:25
  • Hello World12:42
  • Tour of Android Studio16:30
  • Setting Up a Virtual Device15:11
  • FAQ: Emulators on Windows 10 with AMD processor00:31
  • Running on an emulator09:50
  • Running on a physical Android device12:26
  • FAQ for Android Studio 3.301:37
  • Kotlin Tutorial Setup10:32
  • Kotlin Tutorial 109:09
  • Variables and Types11:26
  • More on Variables and Types11:49
  • String Concatenation and Interpolation12:35
  • val and var and more on Declarations10:19
  • Conditions17:58
  • Classes19:34
  • Objects and Instances14:53
  • Challenge06:24
  • Lists10:25
  • More on Lists12:00
  • toString Challenge04:24
  • for Loops14:07
  • for Encapsulation and Private Properties13:19
  • Overloading Functions08:13
  • Inheritance12:50
  • More on Inheritance10:10
  • Inheritance Continued09:11
  • Further Inheritance09:51
  • while Loops14:17
  • for Loop Revisited10:03
  • do while Loop05:14
  • Loop Challenge12:37
  • Introduction02:27
  • Setup Play Project11:39
  • The Constraint Layout17:06
  • Constraints and Resizing15:17
  • Positioning Widgets07:52
  • Inner Lines within a Widget09:33
  • Layouts on Different Devices11:00
  • More on the Constraints12:48
  • Layout Designer rendering error01:52
  • FAQ: Baseline Constraints change00:10
  • Baseline Constraints09:55
  • Constraining Widgets05:37
  • Add Scrolling Capabilities13:32
  • The Button Counter App14:50
  • Finish Layout12:18
  • Coding Button Counter App13:49
  • findViewById and r Class12:46
  • Events and setonclicklistener08:03
  • Testing and Challenge Time14:10
  • Extending the Button App10:36
  • Testing and Challenge06:53
  • Fixing Kotlin Gradle Issues03:58
  • The Activity Lifecycle15:18
  • The Logcat Pane09:04
  • Logging the Activity Lifecycle09:34
  • Activity Lifecycle in Action14:32
  • Saving and Restoring Instance State15:09
  • Demo Calculator App04:51
  • Calculator Interface Setup15:36
  • Continue with Interface16:29
  • Fine Tuning the Layout15:28
  • Create Landscape Layout09:01
  • Comparing FIles with Diff17:12
  • Comparing Directories08:29
  • Coding the Calculator23:15
  • Add onClickListeners07:04
  • Write Perform Operation Function16:45
  • Bug Fix and Code Improvements14:13
  • Bug Fix Challlenge and Save State19:52
  • Widget References in Kotlin07:28
  • Guidelines13:53
  • Fixing Landscape Layout12:40
  • Add Neg Button to Layout07:16
  • Code Changes for Neg Button08:30
  • Add Neg Button to Portrait19:04
  • Introduction10:47
  • AsyncTask14:39
  • Logging and Logcat09:00
  • Important note for API 28 (and higher) and the Top 10 Downloader00:22
  • Download the RSS Feed14:38
  • Reading the Data20:05
  • Android Permissions20:03
  • Writing Idiomatic Kotlin15:00
  • More Idiomatic Kotlin07:05
  • Parsing the Data19:06
  • Create Xml Parse Function15:08
  • Testing the App10:11
  • ListView and ArrayAdapter13:18
  • Code Changes for Array Adapter17:02
  • onDestroy and Asynctask07:31
  • Create Custom Adapter11:43
  • Custom Adapter Code17:19
  • Improving the Adapter12:41
  • ViewHolder Pattern12:09
  • Adding a Menu - Layout08:59
  • Adding A Menu - Code16:05
  • Menu Groups - Layout09:31
  • Menu Groups - Code15:56
  • Challenge Solution15:31
  • Setup17:54
  • YouTube Activity13:26
  • Adding Widgets Dynamically09:59
  • Google API Key11:41
  • Add Key to Code07:57
  • The YouTube Player13:33
  • onInitializationSuccess Method13:11
  • Adding Listeners10:43
  • Improving the Player06:24
  • Extending App Layouts05:28
  • Extending Youtube App Code12:29
  • Implementing Intents and Challenge17:53
  • Challenge Solution05:10
  • More Error Handling15:10
  • Introduction04:06
  • Flick App and Feeds15:36
  • Json and Mini challenge13:38
  • Log Tag and Companion Objects15:39
  • Kotlin top-level constants01:02
  • Download JSON - doInBackground12:13
  • Downloading the JSON13:28
  • CallBacks16:14
  • Project Diagram and Photo Class08:21
  • GetFlickJsonData class20:06
  • GetFlickrJsonData class continued18:35
  • Uri Builder12:02
  • Flickr Browser User Inferface12:07
  • RecyclerView Layouts15:09
  • Finishing Browse Layout05:43
  • Search and PhotoDetail Activities08:44
  • Nested Layouts15:58
  • Recyclerview Adapter17:28
  • onBindViewHolder and Picasso14:12
  • Associate Adapter to Recyclerview06:54
  • RecyclerItemClickListener18:47
  • GestureDetector15:42
  • Displaying the full photo16:00
  • Serializable16:59
  • Modify Photo Details Activity05:56
  • Update for later version of Kotlin00:26
  • Parcelable09:05
  • Material Design13:55
  • More on Material Design09:49
  • AppCompat - Backwards Compatibility06:33
  • Style Sheets12:06
  • Custom Style Sheets12:57
  • Namespaces12:02
  • Other Material Design Changes10:47
  • Missing Style Editor video00:12
  • Differences in API Levels08:58
  • String Resources10:23
  • String Resources Placeholders10:32
  • Adding the Search Feature04:57
  • SearchView13:16
  • More on SearchView12:08
  • SearchView Events09:32
  • Deprecation of framework PreferenceManager class00:23
  • SharedPreferences10:20
  • Telling Fibs08:29
  • Introduction01:17
  • Introduction to Databases05:06
  • Database Terminology10:42
  • Command Line and Path Setup for Windows09:41
  • Command Line and Path Setup for Mac08:06
  • Command Line and Path Setup for Ubuntu Linux06:17
  • Introduction to Sqlite11:15
  • More SQL with Sqlite10:45
  • Sqlite Querying Data16:06
  • Order By and Joins13:18
  • More Complex Joins11:51
  • Wild Cards and Views15:17
  • Housekeeping and Challenge14:23
  • Basic SQL in Android10:22
  • Create Table Add Data and Test11:43
  • Cursor and Navigation17:49
  • Correction01:42
  • Android File System16:27
  • Content Providers02:55
  • Setting up the Emulators11:39
  • Contact Provider App Layout07:42
  • The ContactsContract10:13
  • ContentResolver and Abstraction08:41
  • Retrieving Data with a ContentResolver09:33
  • Permissions13:32
  • Checking Permissions at Runtime15:00
  • Testing the App09:16
  • Avoiding Crashes Snackbars and a Challenge08:11
  • More on Snackbars10:59
  • Intents, setData and Uris14:40
  • Problems Storing State06:24
  • Remove Saving of State04:26
  • Test Scripts Challenge and Cleanup07:08
  • Introduction02:17
  • Androids ViewModel Class04:09
  • FAQ: Changes to the Lifecycle Components library01:08
  • Using a ViewModel13:36
  • Finish ViewModel Changes21:48
  • Exposing LiveData08:37
  • Swapping the ViewModel07:46
  • ViewModel with Top 10 Downloader10:27
  • Implement ViewModel16:01
  • Final Changes10:22
  • App Testing04:26
  • The TaskTimer Application18:30
  • Database Setup11:50
  • Creating a Fragment00:50
  • Tasks Contract Class07:06
  • AppDatabase Class09:20
  • Create SQL for Tasks Table08:39
  • Singleton AppDatabase Class11:00
  • onUpgrade and Testing12:14
  • The ContentProvider17:49
  • FAQ: context in a ContentProvider01:08
  • uriMatcher20:55
  • Updating Build Files03:18
  • The Content URI12:11
  • Register the ContentProvider11:54
  • Using appendWhereEscapeString12:18
  • Mime Types in the Content Provider09:07
  • Content Provider Insert09:11
  • Update and Delete12:23
  • Testing Insert and Update12:45
  • Testing Bulk Update and Delete14:49
  • Main Menu UI15:30
  • Task UI Layout14:42
  • Task List Items Constraints05:54
  • Add / Edit Layout16:59
  • The Kotlin Data Class12:21
  • The Add / Edit Fragment18:53
  • Swapping Fragments12:45
  • Multi-pane Fragments13:19
  • Multi-pane Displays15:49
  • Enabling Two-pane Mode10:35
  • The Fragment Lifecycle Part 112:51
  • The Fragment Lifecycle Part 207:37
  • Logging the Fragment Lifecycle14:55
  • Android SDK Gradle and Kotlin Updates11:35
  • Up and Back Navigation for Fragments07:49
  • Object can have More than One Type03:47
  • Removing the Up Button06:31
  • Back Navigation06:43
  • Completing the AddEdit UI10:16
  • Saving the Task Details10:32
  • Test Saving07:35
  • Updating Android Studio, Kotlin, and Gradle04:36
  • Fixing New Kotlin Warnings04:50
  • Layout Container06:59
  • RecyclerView CursorAdapter16:19
  • Introducing David Reidy01:43
  • Tricky String Resources12:15
  • The ViewModel Class07:31
  • Subscribe to The ViewModel03:28
  • Notifications and Observers09:26
  • Responding to Taps04:35
  • onClick Listeners, Interfaces and Callbacks02:50
  • Responding to Clicks from the Adapter04:32
  • Solution to The Interface Challenge05:58
  • Deleting a Task from The Database09:57
  • Accessing a Database on a Background Thread07:42
  • Background Processing Using a Coroutine04:37
  • Clean Up AddEditFragment09:06
  • Saving in The ViewModel05:21
  • Sharing ViewModel Instances05:37
  • AndroidX14:14
  • Introduction to Dialogs04:22
  • AppDialog Class Part 115:52
  • AppDialog Class Part 208:48
  • Adding a Dialog to The App05:52
  • Dialog CallBacks11:44
  • Asserts and BuildConfig08:14
  • Strange Dialog Behavior05:54
  • Confirming Exit Without Saving07:54
  • Implementing the Interface04:19
  • Kotlin Extension Functions08:45
  • Image Asset Studio13:38
  • Create an About Dialog the Layout Part 110:56
  • Create an About Dialog the Layout Part 211:31
  • Displaying the About Dialog12:10
  • Versioning and build.gradle08:06
  • Dismissing the Dialogue08:58
  • Supporting Older Versions08:34
  • Compatibility Challenge Solution Part 115:03
  • Compatibility Challenge Solution Part 212:25
  • Introduction03:05
  • Settings Dialog Layout10:53
  • Settings Dialog04:03
  • DefaultSharedPreferences07:30
  • SeekBar Values08:08
  • Quantity String Resources09:30
  • Setting Dialog Title03:40
  • Retain Instance State06:17
  • Introduction04:13
  • A Correction and the Device File Explorer07:12
  • Database Updates11:45
  • Saving the Timing Data06:20
  • The saveTiming Function04:15
  • Testing Timings03:37
  • Providing Feedback04:54
  • Correction to the Providing Feedback lecture00:25
  • Data Loss03:58
  • Storing the Current Timing Records04:05
  • Solution - Retrieving the Current Time Record04:46
  • Solution Continued02:01
  • Finish Solution and Test06:48
  • When the Battery Dies06:31
  • Creating Test Data12:52
  • Generating the Test Data03:36
  • Debug and Release Builds10:07
  • Using a SQLite view11:53
  • Adding the view to the Database08:03
  • Adding the view to the ContentProvider03:29
  • Testing the Database Upgrade07:15
  • ConstraintLayout Chains09:02
  • Chain Types12:28
  • Finishing the reports layouts - challenge10:18
  • The Landscape Layouts09:16
  • The Report Adapter10:42
  • The Durations Report Activity12:10
  • Testing Different Locales06:55
  • Creating the reports ViewModel06:29
  • Using the DurationsViewModel02:32
  • Sorting the Report Data06:40
  • Vector Drawables and Asset Studio13:09
  • The Report Menu05:27
  • Report Menu Code - day/week toggle07:38
  • The DatePickerDialog15:21
  • Filtering by Date05:56
  • Filtering in the DurationsViewModel10:12
  • Testing the Report Filters07:30
  • Unbuggy DatePickerDialog09:39
  • Deleting old Timings data09:23
  • Testing Mass Deletion04:02
  • Observing the cursor in the ViewModel04:27
  • A Minor Bug05:01
  • Observing a Configuration Change09:07
  • Testing the Bug Fix08:04
  • Using the First Day Of Week Setting06:13
  • Taking Advantage of Later Features04:27
  • Testing the new DatePickerFragment04:09
  • Observing SharedPreference changes07:19
  • Solution to Ignore Short Timings Challenge09:36
  • Introduction01:49
  • Plugin and Library Versions06:19
  • Code Review07:46
  • Code Review - The AppProvider Class09:25
  • Code Review - CursorRecyclerViewAdapter, DurationsReport, and the ViewModels08:22
  • Code Review - MainActivity and the Contract classes05:48
  • Kotlin and ViewModels10:03
  • Another Breaking Change05:26
  • Improvements to coroutines in a ViewModel05:53
  • Dispatchers03:47
  • Coroutines Don’t Block07:54
  • Bug Fixes and Ideas for Improvements06:02
  • Prevent Deletion of Edited Task10:26
  • Implementing Delete by Swiping - Part 107:51
  • Implementing Delete by Swiping - Part 206:08
  • Implementing Delete by Swiping - Part 308:12
  • Challenge - Bug Fix05:33
  • Challenge - Deleting a task that's being timed05:24
  • Parameterised Queries09:00
  • Adding the Parameters Table08:22
  • Using the Parameterised View in our ViewModels11:10
  • Refreshing the Report02:41
  • Collation03:43
  • Source Code08:55
  • Bonus Lecture and Information04:48
Online Courses

Learning Kotlin doesn't have to be hard. Here is our curated list of recommended online courses that will guide you step-by-step in the learning process.

Learn more
Books

Are you an avid book reader? Do you prefer paperback, or maybe Kindle version? Take a look at our curated list of Kotlin related books and take yourskills to the next level.

Learn more
YouTube videos

The number of high-quality and free Kotlin video tutorials is growing fast. Check this curated list of recommended videos - there is no excuse to stop learning.

Learn more