Android Kotlin Fundamentals をやった
はじめに
Googleが出しているandroid開発に関するチュートリアルについての備忘録です(※以前書いた記事を移行してきたものになります)。 https://codelabs.developers.google.com/codelabs/kotlin-android-training-welcome
ネイティブアプリ開発は他の言語を学ぶのと違って、最初は必要な知識量が多くて戸惑うと思います(Activity、Fragment、DataBinding 、ViewModel、LiveData、RecyclerViewなど)。 ただ、このチュートリアルさえ読んでおけば、結構ちゃんとしたアプリが書けるようになるんじゃないかと思います。無料で公開してくれていますし、かなりおすすめです。
これを学んでから作ったアプリもあるので、サンプルとして参考にしていただければと思います。ハッカソン用に作ったアプリです(当時ネイティブアプリ開発経験は0でしたが、ここまで書けるようになりました)。
https://github.com/tonouchi510/navitime-challenge
チュートリアル紹介
- Androidのライフサイクル、データバインディング、Room、Repository、RecyclerViewなどカバー
- MVVMとかAndroidで推奨されているアーキテクチャ周りまで全部学べる
- 英語しかないので英語の勉強にもなる
それではチュートリアルの各章について概要をメモしていきます。
チュートリアル内容メモ
Lesson 1: Build your first app
- Androidアプリ開発のプロジェクト構成、設定ファイル、静的ファイルの扱いを学べる
- ハマりポイント:ビルドする時に前回ビルドのキャッシュが残ってたり、ファイルロックがかかってたりなど特有のポイントがある
- 前回のビルドのプロセスがキャッシュファイルのロックを取っていてAndroid Studioのビルドができないとき - woshidan's blog
Lesson 2: Layouts
- 特にdata bindingの部分が重要。基本的にdata bindingは有効にして開発していくべき
- 従来のfindViewByIdで毎回階層をたどるのではなく、各ビューへの参照を含むオブジェクトを作成する
- アプリ起動時のみオブジェクト生成のための捜査が走る
Lesson 3: Navigation
- Activity(ページ)単位だけでなくFragment(コンポーネント)単位でビューを開発できるようになったという話
- ここはあまり読んでない
Lesson 4: Activity and fragment lifecycles
- Androidの(Activity&Fragment)のライフサイクルおよびライフサイクルメソッドについて学べる
- アプリの各時点でログを出力してライフサイクルメソッドの呼び出しタイミングを確認する
- パフォーマンスとかが問題になった時にここを復習してちゃんとライフサイクルメソッド駆使すると良さそう
Lesson 5: Architecture components
- この辺から初学者は結構しんどくなる
- ViewModelとかMVVMについて学べる
- アプリのデータ変化を監視し、ビューに通知するためのLiveDataクラスも導入する
- DataBindingと組み合わせると結構きれいに書ける(ていうかViewについてはほぼコーディングいらない)
Lesson 6: Room database and coroutines
Lesson 7: RecyclerView
- 最適化されたリスト表示のためのライブラリ
- 画面に表れる必要な部分だけデータのレンダリングが走る
- 実装しようと思うと結構複雑だった
Lesson 8: Connecting to the internet
- 外部のAPIを使うためのチュートリアル
- ここで紹介されているretrofitというライブラリを使うのが良さそう
- Android emulatorのDNSの設定やアンチウイルスソフトが原因でネットワークアクセスエラーになる場合もある
- チュートリアル関係ないが、firebaseと接続するアプリ作った時にエラーが起こった
- エラーがわかりにくいので注意
Lesson 9: Repository
- いわゆるrepository層の導入
- 複数データソースとのインタラクションの抽象化(ViewModelに合わせてデータ構築)
- Roomを使ったオフラインキャッシュからの取得とネットワークアクセスによるリフレッシュ
Android アプリ開発の推奨アーキテクチャ
[ディレクトリ構成]
. ├── database # Roomデータベースの作成、データベースのエンティティ・DAOの定義とか。 ├── domain # ドメイン層。アプリが使う形のデータを定義・表現する。 ├── network # 外部サービスとの連携・APIアクセス周り。Retrofit2のオブジェクトを作成する。 ├── repository # DBやネットワークなど複数のデータソースとのやり取りを抽象化する。 ├── ui # activityとかfragmentを置く。Data BindingでViewModelからのデータを表示したりユーザからの入力を伝える。 └── viewmodel # 表示するデータの生成・変換やユーザのデータ入力の処理を行う。UI層との依存関係を持たないようにすべき
このチュートリアルだけで結構きれいに書けるようになるんじゃないかと思います。 加えてアプリ開発にクリーンアーキテクチャを入れてたりするケースも聞きますが、個人的にはネイティブにいらない(このチュートリアルの話)で十分ではないかと思います。