Android Jetpack

投稿日:  更新日:

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ライフサイクルに連動したコンポーネント構築
LiveDataUIと状態の自動的な連動
Navigation画面の遷移処理を制御
Paging大きなデータを段階的にチャンクで読み込んで表示
※チャンク:データの固まり
Roomデータベース処理を制御
ViewModelライフサイクルを跨いだUIの状態を管理
WorkManager非同期タスクのスケジュール管理
CameraXカメラ制御の新しいフレームワーク
DataStoreアプリと非同期にKey-Value型のデータを保存
SharedPreferencesの代替機能
SecurityCryptoファイルやSharedPreferencesの暗号化
Startupアプリ起動時の初期化の簡素化
Android GamesAndroidで動作するゲーム用フレームワーク
 【カテゴリー:Foundation(基盤になる機能)】 
コンポーネント概要
AppCompatアプリの下位互換性の維持
Android KTX生産性を向上させるKotlinの拡張コード
Multidex
TestUnitテスト/UIテストのフレームワーク
 【カテゴリー:UI(ユーザーとの対話処理)】 
コンポーネント概要
Animation&TransitionsUIのアニメーションと移動
Auto, TV, Wear
EmojiCompat絵文字フォントの利用、下位互換性の維持
Fragmentフラグメントの効率的な利用
Layout
Palette
WindowManagerマルチスクリーンの画面処理
(折りたたみ式スクリーンの新デバイスへ対応)
Jetpack Compose
(for TV)
(for Wear OS)
画面構築&制御の新たなUIフレームワーク
(Android TV向け)
(Wear OS向け)
ConstraintLayoutUI要素のレイアウトを柔軟に作成
MotionLayout複雑なモーションやViewアニメーションの作成
Material3次期MaterialDesign対応のCompose向けUI
Glace画面を複数のフォームファクタに対応
(スマホ、タブレット、折り畳み式、など)
HiltDI(Direct Injection:依存関係の注入)の簡素化
Autofillキーボード入力時の候補の表示
下位互換性の維持
WebkitWebコンテンツの表示
 【カテゴリー:Behavior(内外との振る舞い)】 
コンポーネント概要
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ガイダンス

ガイダンスは、ベストプラクティスのコード例が紹介されているので、とても役立ちます。

Android Jetpackが推奨する使い方を外した場合は、裏で動作する複雑(危険)な処理を理解していないと、正しく安全な動作を導き出すことが難しくなります。ですので、使いこなすために、ある程度の開発経験が必要になります。

スポンサーリンク

関連記事:

Androidアーキテクチャコンポーネント(AAC)は「堅牢でテストとメンテナンスが簡単なアプリの設計を支援する」とドキュメントで説明されています。 有効そうだけど、実態がよくわからないので、いろいろ調べて理解した内容をまとめました。 ...
Androidアーキテクチャコンポーネント(AAC)は「堅牢でテストとメンテナンスが簡単なアプリの設計を支援する」とドキュメントで説明されています。 その中で紹介されているコンポーネントの1つが「Lifecycle」です。 Lifecycleについて、まとめました。 ...
Androidアーキテクチャコンポーネント(AAC)は「堅牢でテストとメンテナンスが簡単なアプリの設計を支援する」とドキュメントで説明されています。 その中で紹介されているコンポーネントの1つが「LiveData」です。 LiveDataについて、まとめました。 ...
Androidアーキテクチャコンポーネント(AAC)は「堅牢でテストとメンテナンスが簡単なアプリの設計を支援する」とドキュメントで説明されています。 その中で紹介されているコンポーネントの1つが「ViewModel」です。 ViewModelについて、まとめました。 ...
スポンサーリンク