年末年始の休暇を利用して、Android Developersのトレーニングコース "Android Basics in Kotlin" を完走した。
私自身のAndroidアプリ開発経験は趣味・アルバイト1年半(2012〜2013年)、業務4年(2020年〜現在)だが、正直のところ近年の劇的に変化するAndroid開発方法の動向についていけていなかった。 2020年にAndroid業界に復帰したときにKotlin、Coroutine、ConstraintLayout、RecyclerViewくらいはしっかりマスターしたけど、その他のAndorid Architecture Componentsまわりは未学習だった。 だって新規プロジェクトを担当しない限り使う機会が無いじゃん? とはいえこのままではいけないと思い、最近の開発方法含め、基礎を体系的に勉強し直してみようと思ってこのコースを受講してみた。 このコースは入門レベルとは書いてあったが、伝統的な記述方法(Intent、findViewByIdとか)に加えてNavigation、ViewModel、LiveData、DataBinding、Room、WorkManagerも登場して、入門レベルの人は果たして理解しきれるのだろうか?最近のAndroidは初心者に厳しすぎィ……などと思った。
このコースはUIを旧来のViewで作成する方式が前提で作られている。 ところがAndroidとしてはJetpack Composeを激推ししたいのか、「2023年12月でこのコースはdeprecatedになる」という旨があらゆるところに書いてあった。 まあどうせしばらくは閲覧できるでしょと思っていたのだが、なんと2024年1月の第2週くらいにコースのページが丸ごと消されてしまい、Jetpack Composeのコースにリダイレクトされるようになってしまった。
"Android Basics in Kotlin" のURLは次の通り。
https://developer.android.com/courses/android-basics-kotlin/course
しかし、これにアクセスすると "Android Basics with Compose" https://developer.android.com/courses/android-basics-compose/course にリダイレクトされてしまう。
この状況では後で見返したいときに困るので、Internet Archiveに残っているアーカイブを全ページ分まとめてみた。 ついでにGitHubにある解答コード(もしくはスターターコード)もまとめた。 なおYouTubeの動画はまだ生きているため、それらはアーカイブではなく本物へのリンクを載せている。
"Android Basics in Kotlin" のページ一覧
- Unit 1: Kotlin basic [archive]
- 1-1. Introduction to Kotlin [archive]
- 1-2. Create your first Android app [archive]
- 1-2-1. Introduction to Android Studio [youtube]
- 1-2-2. Download and install Android Studio [archive]
- 1-2-3. Create and run your first Android app [archive]
- 1-2-4. Run your app on a mobile device [archive]
- 1-2-5. Learn the basics of Android tests [archive]
- 1-3. Build a basic layout [archive]
- 1-3-1. Design a Birthday Card app [youtube]
- 1-3-2. Create a Birthday Card app [archive] [solution code]
- 1-3-3. Add images to your Android app [archive] [solution code]
- 1-4. Add a button to an app [archive]
- 1-4-1. Classes and object instances in Kotlin [archive]
- 1-4-2. Create an interactive Dice Roller app [archive] [solution code]
- 1-4-3. Add conditional behavior in Kotlin [archive]
- 1-4-4. Add images to the Dice Roller app [archive] [solution code]
- 1-4-5. Write unit tests [archive]
- 1-4-6. Intro to debugging [archive]
- 1-4-7. What can you build with these basics? [youtube]
- Unit 2: Layout [archive]
- 2-1. Get user input in an app: Part 1 [archive]
- 2-2. Get user input in an app: Part 2 [archive]
- 2-2-1. Change the app theme [archive]
- 2-2-2. Change the app icon [archive]
- 2-2-3. Create a more polished user experience [archive] [solution code]
- 2-2-4. Write Instrumentation Tests [archive] [solution code (module:test_solution)]
- 2-3. Display a scrollable list [archive]
- 2-3-1. Affirmations app introduction [youtube]
- 2-3-2. Use Lists in Kotlin [archive]
- 2-3-3. Use RecyclerView to display a scrollable list [archive]
- 2-3-4. Display a list of images using cards [archive] [solution code]
- 2-3-5. Test Lists and Adapters [archive] [starter code]
- 2-3-6. Project: Dogglers app [archive]
- Unit 3: Navigation [archive]
- 3-1. Navigate between screens [archive]
- 3-1-1. Welcome to Unit 3: Navigation [youtube]
- 3-1-2. Collections in Kotlin [archive]
- 3-1-3. Activities and intents [archive] [solution code]
- 3-1-4. Stages of the activity lifecycle [archive]
- 3-2. Introduction to the Navigation component [archive]
- 3-2-1. Android Jetpack: Introducing Navigation Component [youtube]
- 3-2-2. Fragments and the Navigation component [archive] [solution code]
- 3-2-3. Test Navigation Components [archive] [solution code]
- 3-2-4. Navigation: Overview - MAD Skills [youtube]
- 3-3. Architecture components [archive]
- 3-3-1. Unscramble app introduction [youtube]
- 3-3-2. Store data in ViewModel [archive]
- 3-3-3. Use LiveData with ViewModel [archive] [solution code]
- 3-4. Advanced navigation app examples [archive]
- 3-4-1. Cupcake app introduction [youtube]
- 3-4-2. Shared ViewModel [archive] [solution code]
- 3-4-3. Navigation and the backstack [archive] [solution code]
- 3-4-4. Test ViewModels and LiveData [archive] [solution code (module:test_solution)]
- 3-5. Adaptive layouts [archive]
- 3-5-1. Create a two pane layout
- 3-5-2. Adaptive layouts [archive] [solution code]
- 3-5-3. Migrate your UI to responsive layouts [guide]
- 3-5-4. Project: Lunch Tray app [archive] [starter code]
- 3-1. Navigate between screens [archive]
- Unit 4: Connect to the internet [archive]
- 4-1. Coroutines [archive]
- 4-2. Get and display data from the internet [archive]
- 4-2-1. Introduction to HTTP/REST [youtube]
- 4-2-2. Get data from the internet [archive]
- 4-2-3. Load and display images from the internet [archive] [solution code]
- 4-2-4. Debug with breakpoints [archive] [solution code (module:test_solution)]
- 4-2-5. Project: Amphibians app [archive] [starter code]
- Unit 5: Data persistence [archive]
- 5-1. Introduction to SQL, Room, and Flow [archive]
- 5-1-1. SQL Basics [archive] [starter code]
- 5-1-2. Introduction to Room and Flow [archive] [solution code]
- 5-2. Save changes in your app [archive]
- 5-2-1. Using Room Kotlin APIs [youtube]
- 5-2-2. Persist data with Room [archive] [solution code]
- 5-2-3. Read and update data with Room [archive] [solution code]
- 5-2-4. Repository Pattern [archive] [solution code]
- 5-2-5. Preferences DataStore [archive] [solution code]
- 5-2-6. Project: Forage app [archive] [starter code]
- 5-1. Introduction to SQL, Room, and Flow [archive]
- Unit 6: WorkManager [archive]
- 6-1. Schedule tasks with WorkManager [archive]
- 6-1-1. Introduction to WorkManager basics [youtube]
- 6-1-2. Introduction to WorkManager implementation [youtube]
- 6-1-3. Background Work with WorkManager [archive] [solution code]
- 6-1-4. Project: Water Me! app [archive] [starter code]
- 6-1. Schedule tasks with WorkManager [archive]