Androidの開発スピードが速過ぎます。個人で習得を進めている私には、追い付いて行けません。
これが会社などであれば、グループ内のメンバーで分担して習得し、後に共有、などといった対応が可能でしょう。組織の強みですね!
先日も、久しぶりにAndroid Studioで新規プロジェクトを作成したら、Jetpack Composeのプロジェクトになってました。「はて?、これはどうすれば良いのだ?」と、頭の中は疑問符だらけで、プログラミングが先へ進めませんでした。
Jetpackの存在は知りながら、“使わなくてもアプリは作れる”と、学習は後回していたからです。
プロジェクトのひな型にJetpack Composeが採用されたならば、今後はJetpackの利用が開発の主軸になっていくのでしょう。
遅れ馳せならが、Jetpackの重要性を知った次第です。
ここで本腰をいれて習得しないと、さらに後方へ置いて行かれそうです。
という訳で、Jetpackの学習を始めました。
今回はJetpackそのものについてまとめます。
※環境:Android Studio Flamingo | 2022.2.1
Android Jetpack概要
Android Jetpackは「Google I/O 2018」で発表されました。
表にあげる目的のために開発された「次世代のコンポーネント、ツール、ガイダンス」の総称になります(Android Developers Blogより)。
目的 | 概要 |
---|---|
アプリ開発の加速 | ボイラープレートコードの削減 複雑なコードの簡略化 Kotlinのサポート(Android KTX) 高品位なコード(クラッシュ、メモリーリーク削減)の提供 |
下位互換性の確保 | APIの要件:minSdk≧21、targetSdk≧28 |
「アプリ開発の加速」とは、アプリのロジック(期待する機能)以外のプログラミングを効率化して、開発におけるコストを大幅に削減することです。具体的には概要に書いた項目になります。
「下位互換性の確保}とは、旧バージョンのAndroidであっても、最新の機能や画面デザインを使えるようにすることです。新旧バージョン間の差はJetpackが補完します。
現在のAndroid Jetpackは、当初の目的に捕らわれずに、新しい試みや機能が組み込まれるようになり、常に進化と拡大を続けています。Android ComposeやAndroid Gamesなどのフレームワークがその一例です。
コンポーネント
Kotlinで記述されたライブラリー群です。
以前の開発環境を知る人には「Support Library(目的:下位互換性の確保)」と「Architecture Components(目的:アプリ開発の加速)」の後継であるといえば、理解しやすいでしょう。この両者が統合されています。
しかし、後継といっても、新たな「名前空間(パッケージ名):androidx.*」が割り当てられ、構成が刷新されているので注意してください。
個々のライブラリはAndroidプラットフォームの一部ではなく、バンドルされない(APIでない)外部ライブラリとして提供されます。
ですので、プログラマは必要なライブラリを必要なタイミングで導入出来ます。この点が、大きなセールスポイントになっています。
コンポーネントは表のようなライブラリを含みます(ライブラリを検索)。
【カテゴリー:Archtecture(論理的な構造)】コンポーネント | 概要 |
---|---|
Data Binding | レイアウト属性と状態の関連付け |
Lifecycles | ライフサイクルに連動したコンポーネント構築 |
LiveData | UIと状態の自動的な連動 |
Navigation | 画面の遷移処理を制御 |
Paging | 大きなデータを段階的にチャンクで読み込んで表示 ※チャンク:データの固まり |
Room | データベース処理を制御 |
ViewModel | ライフサイクルを跨いだUIの状態を管理 |
WorkManager | 非同期タスクのスケジュール管理 |
CameraX | カメラ制御の新しいフレームワーク |
DataStore | アプリと非同期にKey-Value型のデータを保存 SharedPreferencesの代替機能 |
SecurityCrypto | ファイルやSharedPreferencesの暗号化 |
Startup | アプリ起動時の初期化の簡素化 |
Android Games | Androidで動作するゲーム用フレームワーク |
コンポーネント | 概要 |
---|---|
AppCompat | アプリの下位互換性の維持 |
Android KTX | 生産性を向上させるKotlinの拡張コード |
Multidex | |
Test | Unitテスト/UIテストのフレームワーク |
コンポーネント | 概要 |
---|---|
Animation&Transitions | UIのアニメーションと移動 |
Auto, TV, Wear | |
EmojiCompat | 絵文字フォントの利用、下位互換性の維持 |
Fragment | フラグメントの効率的な利用 |
Layout | |
Palette | |
WindowManager | マルチスクリーンの画面処理 (折りたたみ式スクリーンの新デバイスへ対応) |
Jetpack Compose (for TV) (for Wear OS) | 画面構築&制御の新たなUIフレームワーク (Android TV向け) (Wear OS向け) |
ConstraintLayout | UI要素のレイアウトを柔軟に作成 |
MotionLayout | 複雑なモーションやViewアニメーションの作成 |
Material3 | 次期MaterialDesign対応のCompose向けUI |
Glace | 画面を複数のフォームファクタに対応 (スマホ、タブレット、折り畳み式、など) |
Hilt | DI(Direct Injection:依存関係の注入)の簡素化 |
Autofill | キーボード入力時の候補の表示 下位互換性の維持 |
Webkit | Webコンテンツの表示 |
コンポーネント | 概要 |
---|---|
Media&Playback | メディアの再生、下位互換性の維持 |
Permissions | 権限の管理、下位互換性の維持 |
Notifications | 通知の処理、下位互換性の維持 |
Sharing | |
Slices | 情報をテンプレート化したUIによりアプリ外で表示 |
AppSearch | デバイス内のテキスト検索機能を提供 |
Download Manger | 大規模なダウンロードのスケジュール管理 |
※カテゴリの分類は間違っているかも知れません。ドキュメントから明示的な分類が読み取れなかったためです。
ツール
コンポーネントの中には、ツール(コンパイラーや構文チェッカーなど)と連携して、Android Jetpackの目的を実現するものがあります。
例えばComposeは、ソースコード中に埋め込まれたアノテーションを使ってコンパイラーへ指示を行い、Composable関数をUI要素のバイトコードへ変換します。
この時、使われるコンパイラーはComposeを処理できるように機能拡張されたものです。
android { : buildFeatures { compose true // Composeを有効化 } composeOptions { kotlinCompilerExtensionVersion '1.3.2' // 機能拡張されたコンパイラー } : }
ガイダンス
Android Jetpackを使うと、複雑(危険)な処理を簡素に記述することが出来ます。本来の複雑(危険)なコードは隠蔽できるので、プログラマはアプリのロジック開発へ集中できます。
ただし、この美点を享受できるのは、Jetpackが推奨する使い方に沿った場合です。
Android Jetpackはこの使い方に関するガイダンス(指導書)が非常に充実しています。
ガイダンスは、ベストプラクティスのコード例が紹介されているので、とても役立ちます。
Android Jetpackが推奨する使い方を外した場合は、裏で動作する複雑(危険)な処理を理解していないと、正しく安全な動作を導き出すことが難しくなります。ですので、使いこなすために、ある程度の開発経験が必要になります。
関連記事: