Android Jetpack・AndroidXとは何なんですか?って話【Androidアプリ開発】

Androidアプリ開発入門

Android Jetpackとは?

Android Jetpackって何なの?っていう所からJetpackとAndroidXのAPI位置付けとバージョンの見方やJetpackの機能について解説しています。

Android Jetpackとはアプリ開発するための最新の設計方式で作られている機能の集合体(コンポーネント)の総称です。各機能や処理の考え方が最新の方式で、今ある方式よりも簡単に書けるように設計されています。2018年に提供が開始され下記の特徴が有ります。

  • 下位互換を実現
  • Kotlinが活用されているので生産性があがる
  • クラッシュやメモリリークを抑えた堅牢な設計が可能
  • AndroidプラットフォームAPIとは独立して開発されるので頻繁に更新される
  • バックグラウンドタスク、ナビゲーション、ライフサイクル管理などのアクティビティを管理してくれる

APIの位置付け

Android JetpackはAndroid プラットフォームAPIとは分離されていてAndroidXのAPIで構成されています。つまりAndroidXはJetpackでもあります。

Jetpack AndroidXとAndroidプラットフォームAPIの関連図

Jetpackコンポーネントはそれそれが独立していて個別に使ったり、他のコンポーネントと連動させて使います。中にはKotlinで作られたコンポーネントが存在しますが、Javaとの相互運用する仕組みがあるのでJavaでも使えます。

またAndroid APIと同じ機能を持つものがあります。両方使えますが(正確には使えたり廃止されてたりします)これから始めるならJetpackを意識した開発をすると良いと思います。Web上では古い記事とかも沢山あるのでimport文のとこで[androidx.~]って書いてあったら新しいんだなと思って下さい。それから、Jetpackはリリース段階があり正式版以外は公開出来ないので注意が必要です。ローカル内で使う分には大丈夫です。

Jetpackのリリース段階と依存関係

Jetpackは正式リリース前に3段階のリリースバージョンを経ています。バージョン表記の所を見ればそれが何版かがわかるようになっています。また各リリースバージョンは他のJetpack機能(API)を使う時に依存関係を意識する必要があります。

①アルファ版バージョン表記例:1.3.0-alpha01
機能的に安定しているが、機能が完成していないことがある。APIが追加、削除、変更される事がある。
②ベータ版バージョン表記例:2.0.0-beta4
機能的に安定しているが、バグが存在する可能性がある。試験運用版コンパイラの機能は利用できません。
依存関係:ベータ版かRC版か安定版
③リリース候補(RC)版バージョン表記例:1.3.0-rc01
リリース直前のバージョン。重要な修正がされる事がある。
依存関係:RC版か安定版
④正式版(安定版・リリース版・製品版)バージョン表記例:1.1.3
基本的にはこれを使います。
Jetpackリリース段階図

すでに正式版となってる物の上位バージョンのアルファ版~RC版が存在します。公開用のアプリなら正式版の方を使います。例えば下図の例だと、ConstraintLayoutには1.1.3の正式版があり、他に2.0.0ベータ版が存在してる場合、1.1.3の正式版を使います。正式版がまだ出ていないCameraとCarは公開用アプリでは使えません。

Jetpackリリース情報

現在、Jetpackの新機能でJetpack Composeというのが開発中ですがこちらのバージョンは[0.1.0-dev13]となっています。[0.1.0]なんでバージョン1にもなっていないですね。位置付け的にはアルファ版にもなっていない状態なんだと思います。多分・・・こういうのもありますよ、ということで数字の横に何か英字があったら正式版ではないんだなと思って下さい。

Jetpackの主要機能

Jetpackは今あるSupport Library、Architecture Componentsの機能を統合していて主に4つのカテゴリー分類されます。

  1. Foundation(基盤)
  2. Architecture(基本設計)
  3. Behavior(動作)
  4. UI(ユーザーインタフェース)

Foundation(基盤)

下位互換、Kotlinサポート、セキュリティ強化など基盤のコンポーネントがあります。

Android KTXKotlinの拡張機能セット。Android APIの共通ライブラリ・Collection・FragmentやJetpackの機能がKotlin用に提供されています。
App Compactアクションバーの下位互換を実現します。(旧サポートライブラリ。まだ使えますが・・・)
Android Auto車内搭載アプリ開発用。
ベンチマークベンチマークテストを行う。
multidexアプリのメソッドの数が65536を超えるとビルドエラーが発生しますがそれを回避します。
セキュリティ保存データの読取り・書込みや鍵の作成などの仕組みのセキュリティ面が強化されてます。
テストアプリを単体テスト・UIテストする機能。
Android TVAndroid TVアプリ開発用。
Wear OSWear OS開発用。

Architecture(基本設計)

新しいライフサイクルの仕組みによって、画面管理やデータのやりとりなどが堅牢でメンテナンスが楽になるように設計されています。

Data Bindingバインディングは何かと何かを結びつけるという意味。データの内容をXMLで記述し、コード側ではXMLの属性を呼び出す様に記述する。データとコードを分離してプログラミングする仕組み。この仕組みによってコード側の記述が少くなります。
Lifecycle画面(アクティビティとフラグメント)を管理する新しい仕組み。従来のライフサイクルの呼び出しの回数が多くなる、競合が発生、コード量が多くなるなどの問題を解決してくれます。メンテナンスを楽にして軽量のコードを作成する事ができます。
LiveDataデータが更新されたときにビューに通知するデータオブジェクトを作成する機能。
新しいライフサイクルによって、アクティビティ・フラグメント・サービスなどが管理されアクティブな状態のデータのみを更新します。
Navigationアプリ内の画面遷移とナビゲーションを管理する機能。
Paging部分的なデータを必要に応じて読み込む。この機能によってネットワーク帯域幅とシステムリソースの使用量を削減できます。
Room SQLiteデータベースのアクセスを安定させてSQLiteを最大限に活用できる機能。
ViewModelアプリ回転時にUI関連のデータを破棄しない仕組みで保存します。従来の方法ではアプリ回転時に画面情報が破棄されてしまい再作成する処理が必要でした。また実行に時間がかかる非同期呼び出しを頻繁に行っていました。これらの問題を解決しています。
WorkManagerアプリの終了やデバイスが再起動した場合でも実行することが可能な非同期タスクのスケジュールを簡単に設定できます。
HiltDependency Injection(DI)の新しい仕組み。現在はまだ開発中です。

Behavior(動作)

CameraX下位互換を備えたカメラ機能開発用。
ダウンロードマネージャーダウンロードのスケジュール設定と管理を行います。
メディアと再生下位互換を備えたオーディオや動画再生のアプリ開発用。
通知下位互換を備えた通知機能。WearOSとAndroid Autoにも対応しています。
権限下位互換を備えたアプリの権限の確認とリクエストを行います。
設定ユーザーの設定画面を簡単に作成する機能。
共有他のアプリと共有するデータのやりとりをする機能。
スライスアプリデータをWebや動画・画像など他のコンテンツで表示できる機能

UI(ユーザーインタフェース)

アニメーションと遷移ビューに動きを持たせてアニメーション化する機能。
絵文字下位互換を備えた絵文字機能。
Fragment画面を制御する仕組みの一つ。
レイアウトビューを画面に配置する機能。
Paletteカラーパレットの機能。
Jetpack ComposeUIライブラリ。XMLレイアウトの代わりになる構成可能な関数を使用してUIコンポーネントを定義します。現在は開発中の段階です。
Material Componentsスタイル、ブランディング、相互作用、モーションを統合したマテリアルデザインを実装する。