Kotlinとは
Kotlin
- KotlinはJetBrainsが2011年に発表したプログラミング言語です。
- Javaとの互換性がある
- Javaよりもコードを短く記述することができる。
- Null安全や型推論などのモダンな思考を一部取り入れている。
- 公式サイト
- GitHub
開発ツールについて
Android Studio
- 以前はEclipseでの開発が主流だったが、2015年にGoogleがEclipseでの開発のサポ ートを終了した。
- そのため、2014年からAndroid Studioが開発ツールとして一般化している。
- UIは、拡張XMLファイル で構築されている。
- UIの部品の名前やID、幅、高さや表示位置をXML形式のファイルで指定する。
- GUIでドラッグアンドドロップで設定することや、直接XMLファイルで定義できる。
- 基本的にXMLとGUIは一対一の関係のため、同じXMLファイルなら同じUIを表現できる。
- [公式サイト](Android Developer 公式サイト)
- Androidニュース
Gradle
- Androidのバージョンの設定を記述することができる。
- dependenciesブロックに、必要な外部ライブラリを記述することができる。
- 公式サイト
- 公式ユーザガイド
ReactiveX
- ReactiveXは、データが同期か非同期かに関係なく、命令型プログラミング言語がデー タのシーケンスを操作できるようにするツールのセットです。
- これは、シーケンス内の各項目を操作する一連のシーケンス演算子を提供します。
- 公式サイト
- GitHub
RxJava
- RxJavaは、Javaでリアクティブプログラミングを行うためのライブラリです。
- このライブラリは軽量であり、また、他のライブラリに対する依存がないのでRxJavaの jarをパスに通すだけで使えるようになります。
- 対応しているJavaのバージョンは6からで、さらにAndroidもバージョン 2.3(Gingerbread)からサポートしています。
- 参考サイト
SDK
- パソコンなどでAndroid端末向けソフトウェアを開発するために必要なプログラムやラ イブラリなどをまとめた開発キット。
- Google社が無償で公開しており、Windows版、macOS版、Linux版がある。
AVD
- Androidの仮想デバイスのこと。
- Androidのアプリは実際の端末で動作させることになりますが、端末がなくてもエミュ レーター上でアプリを実行し動作を確認できます。
NDK
- Android で C や C++ のコードを使用できるようにするツールセットのことです。
AppIconの設定方法
apkインストール手順
AR Coreについて
トーストの概要
- トーストは、操作に関する簡単なフィードバックを小さなポップアップに表示します。
- トーストでは、メッセージの表示に必要なスペースのみを使用します。現在のアクティ ビティは表示されたままになり、引き続き操作できます。
- トーストはタイムアウト後に自動的に消えます。
- 公式サイト
Android Jetpackについて
Android Jetpack
- Android Jetpackで提供されているライブラリやツールを使用することで、高品質な Androidアプリを作成できる。
- Android Jetpackは、基盤、アーキテクチャ、動作、UIの4つのカテゴリに分類されて いる。
- 公式サイト
- 参考サイト
1. DataBinding
- 多くの場合、ビュー バインディングによってデータ バインディングと同じメリットがも たらされ、実装をよりシンプルに行うことができパフォーマンスも向上します。
- findViewById() 呼び出しを主にデータ バインディングに置き換える場合は、ビュー バインディングの使用を検討してください。
- データ バインディング ライブラリはサポート ライブラリであるため、Android 4.0(API レベル 14)以降を搭載しているデバイスで使用できます。
- 公式サイト
双方向DataBinding
- 一方向データ バインディングを使用すると、属性の値を設定し、その属性の変更に反応 するリスナーを設定できます。
- 双方向データ バインディングを使用すると、このプロセスをショートカットできます。
- バッキング データの変更に対応するには、次のコード スニペットに示すように、レイア ウト変数を Observable の実装(通常は BaseObservable)にして、@Bindable アノ テーションを使用します。
- 公式サイト
2. ViewBinding
- ビュー バインディングとは、ビューを操作するコードを簡単に記述できる機能です。
- ほとんどの場合、ビュー バインディングは findViewById の後継となります。
- ビュー バインディングと データ バインディングは、両方ともビューを直接参照できる バインディング クラスを生成します。
- ただし、ビュー バインディングはよりシンプルなユースケースを扱うことを目的として おり、データ バインディングに比べて次のようなメリットがあります。
- ビュー バインディングはアノテーション処理を必要としないため、コンパイル時間が短縮されます。
- ビュー バインディングは特別にタグ付けされた XML レイアウト ファイ ルを必要としないため、より迅速にアプリで利用できます。
- モジュールでビュー バイ ンディングを有効にすると、そのモジュールのすべてのレイアウトに自動的に適用されます。
- 公式サイト
findViewById との違い
- ビュー バインディングには、findViewById を使用するよりも大きなメリットがあります。
- ビュー バインディングは、ビューへの直接参照を作成するため、無効 なビュー ID によって NullPointerException が発生することはありません。
- また、 レイアウトの一部の構成内だけに存在するビューがあった場合、バインディング クラ ス内でそのビューへの参照を含むフィールドには @Nullable のマークが付きます。
- 各バインディング クラス内のフィールドは、XML ファイル内で参照して いるビューと合致する型を持ちます。そのため、ClassCastException のリスクがあ りません。
- このような違いがあるため、レイアウトとコードとの間に互換性がない場合は、実行時ではなくコンパイル時にビルドが失敗することになります。
3. ViewModel の概要
- ViewModel は、ライフサイクルを意識した方法で UI 関連のデータを保存し管理するためのクラスです。
- ViewModel クラスを使用すると、画面の回転などの設定の変更後にデータを引き継ぐことができます。
- 公式サイト
4.Lifecycle
- ライフサイクル対応コンポーネントは、別のコンポーネント(アクティビティやフラグ メントなど)のライフサイクル ステータスの変化に対応してアクションを実行します。
- これらのコンポーネントを使用することで、適切に整理されメンテナンスが容易な軽量 のコードを作成できます。
- 公式サイト
5.LiveData の概要
- LiveData は監視可能なデータホルダー クラスです。
- 通常の監視とは異なり、LiveData はライフサイクルに応じた監視が可能です。
- つまり、アクティビティ、フラグメント、サービスなどの他のアプリ コンポーネントの ライフサイクルが考慮されます。
- このため、LiveData はライフサイクルの状態がアクティブなアプリ コンポーネント オ ブザーバーのみを更新します。
- データを保存して、変化を観察することができるオブジェクトです。 UIオブジェクトは LiveDataにオブザーバーを登録することができ、データが変更されたときのUIを変更する ことができます。
- 公式サイト
6.Navigation Component
- Android Jetpack の Navigation コンポーネントは、単純なボタンクリックから、アプリバーやナビゲーション ドロワーなどの複雑なパターンまで、さまざまなナビゲーションを実装するのに役立ちます。
- 公式サイト
7.RecyclerView で動的リストを作成する
- RecyclerView を使用すると、大規模なデータセットを簡単かつ効率的に表示できます。
- データを指定し、各アイテムの表示方法を定義すると、必要に応じて、RecyclerView ライブラリが動的に要素を作成します。
- 公式サイト
RecyclerView の高度なカスタマイズ
- 特定のニーズに合わせて RecyclerView オブジェクトをカスタマイズできます。
- RecyclerView でダイナミック リストを作成するで説明した標準のクラスでは、ほとん どのデベロッパーが必要とする機能がすべて用意されています。
- 公式サイト
API リファレンス
- メモリ使用量を最小限に抑えつつ、大規模なデータのセットを UI に表示します。
- 公式サイト
8.Room
- Room 永続ライブラリは SQLite 全体に抽象化レイヤを提供することで、データベースへのより安定したアクセスを可能にし、SQLite を最大限に活用できるようにします。
- このライブラリは、アプリを実行しているデバイスでアプリのデータのキャッシュを作成する際に有用です。
- このキャッシュは、アプリの信頼できる唯一の情報源として機能します。
- ユーザーはこのキャッシュを使用することで、インターネットに接続しているかどうか に関係なく、アプリ内の重要な情報の一貫性のあるコピーを表示できます。
- Roomデータ永続性ライブラリにはRoomDatabase.Callbackクラスが付属しています。
- このRoomDatabase.Callbackクラスには、 onCreateとonOpen の2つのコールバッ クメソッドがあります。
- 公式サイト
- 参考サイト
DAO
- DAO(Data Access Object)はプログラムからデータベースシステム(DBMS)などデ ータの永続化機構に対するデータの保存、読み出し、修正、削除などを行う。
- Room の主要コンポーネントであり、各 DAO は、アプリのデータベースへの抽象アク セスを可能にするメソッドを備えています。
- データを挿入するには、@ Insertアノテーションを使用します。 メソッド名として任意 の名前を選択できます。
- データを更新するには、@ Updateアノテーションを使用します。
- データを削除するには、@ Deleteアノテーションを使用します。
- @Query は、DAO クラス内で使用される主要なアノテーションです。データベースに 対して読み書き処理を実行できます。
- 各 @Query メソッドはコンパイル時に検証されるため、クエリに問題があると、ランタ イム エラーの代わりにコンパイル エラーが発生します。
- 公式サイト
9.Retrofit
- Retrofitは、Squareによって開発されたAndroidおよびJava用のタイプセーフなHTTP クライアントライブラリ(ネットワークサービス)です。
- AndroidアプリケーションおよびJAVAで使用して、HTTP要求を作成し、RESTAPIか らのHTTP応答を処理します。
- 公式サイト
- 参考サイト
10.Notifications
- 通知は、アプリが使用されていないときに、アプリ内のイベントに関する簡潔な情報を タイムリーに提供します。
- 通知は、アプリの UI の外で Android が表示するメッセージであり、リマインダー、他 の人からのメッセージ、アプリからのタイムリーな情報などをユーザーに提供します。
- ユーザーは通知をタップしてアプリを開いたり、通知から直接操作したりできます。
- 公式サイト
11.WorkManager でタスクのスケジュールを設定する
- WorkManager は、アプリが終了した場合やデバイスが再起動した場合でも実行される、延期可能な非同期タスクのスケジュールを簡単に設定するための API です。
- 公式サイト
12.Android でのDependency Injection (依存性の注入)
- 依存関係インジェクション(DI)はプログラミングで広く使用されている手法で、 Android 開発にも適しています。
- DI の原則に従うことで、優れたアプリ アーキテクチャの土台を築くことができます。
- 依存関係インジェクションを実装すると、コードを再利用できる、 リファクタリングが容易になる、 テストが容易になる 等のメリットがあります。
- 公式サイトhl=ja
- 参考サイト
13.Dagger の基本
- Android アプリにおいて、手動による依存関係インジェクションやサービス ロケータ は、プロジェクトの規模によっては問題になることがあります。
- Dagger を使用すれば、依存関係を管理することで、プロジェクトの複雑さを抑えられ ます。
- Dagger は、通常は手書きするコードを模倣してコードを自動的に生成します。
- このコードはコンパイル時に生成されるため、Guice などのリフレクション ベースのソ リューションよりも、トレース可能でパフォーマンスが高いものになります。
- 公式サイト
Google Guice
- Google Guiceは、Apacheライセンスの下でGoogleによってリリースされたJavaプ ラットフォーム用のオープンソース ソフトウェアフレームワークです。
- 参考サイト
14.Hilt を使用した依存関係の注入
- Hilt は Android 用の依存関係インジェクション ライブラリです。
- これを使うことで、プロジェクトで依存関係の注入(DI)を手動で行うためのボイラー プレートが減ります。
- Hilt には、他の Jetpack ライブラリからクラスを提供するための拡張機能が用意されて います。
- Hilt で現在サポートされている Jetpack コンポーネントは次のとおりです。
- 公式サイト
15.Paging Libraryの概要
- ページング ライブラリを使用すると、データの小さなチャンクを一度に読み込んで表示 することができます。
- 部分的なデータをオンデマンドで読み込むことで、ネットワーク帯域幅とシステム リソ ースの使用量を削減できます。
- PagingライブラリはRecyclerViewにデータをページ単位で効率的にデータをロードし て、画面に出力するのに役立ちます。
- ページングは、Androidの開発で頻繁に使用されるが、実装する面倒な効率的なリスト ビューを簡単に実装できるように支援します。
- 公式サイト
16.DataStore
- Jetpack DataStore は、プロトコル バッファを使用して Key-Value ペアや型付きオ ブジェクトを格納できるデータ ストレージ ソリューションです。
- DataStore は、Kotlin コルーチンとフローを使用して、データを非同期的に、一貫した 形で、トランザクションとして保存します。
- 公式サイト
17.テストの基礎
18.Android MVVM
MVC, MVVM違い
19.Android開発者のためのSOLID原則
- SOLIDは、オブジェクト指向ソフトウェア開発における5つの設計原則の頭字語であ り、ソフトウェア設計をより理解しやすく、柔軟で、保守しやすくすることを目的として います。
- SOLIDの原則
- S —単一責任の原則(SRPとして知られています)
- O —オープン/クローズド原則
- L —リスコフの置換原則
- I —インターフェイス分離の原則
- D —依存性逆転の原則
- 参考サイト
20.Android での Kotlin(コルーチン)
- コルーチンとは、Android で使用できる並行実行のデザイン パターンです。
- これを使用すると、非同期実行するコードを簡略化できます。
- コルーチンは、Kotlin にはバージョン 1.3 で追加されたものですが、すでに他の言語で
- 確立されている概念をベースにしています。
- 中断がサポートされているため、1 つのスレッドで多数のコルーチンを実行できます。
- これにより、コルーチンを実行しているスレッドがブロックされません。中断により、多数の同時実行処理をサポートしつつ、ブロックさせる場合よりメモリを節約できます。
- 公式サイト
- コルーチンガイド
Android での Kotlin Flow
- 「Flow」はコルーチンの一種で、返す値が 1 個のみの「suspend 関数」とは異なり複数の値を順次出力できます。
- 例えば、データベースからリアルタイムで更新情報を受け取るような場合に使用でき ます。
- 公式サイト