第2章 Android
2.1 Androidとは
- Googleが主導するOS
- Android Open Source Project(AOSP)によって オープンソース で開発
スマートフォン以外でも、以下のような用途でも使われています。
- 従来型携帯電話(ガラホ)
- スタンドアロン型VRゴーグル
2.1.1 GMS認証
- Android自体はOSSであり、自由に改変・利用が可能
-
Googleの提供する主要アプリ群(
Google Mobile Services: GMS
)を搭載するには、Googleの認証を通る必要がある = いわゆる、みんな知ってるAndroid
- Google Playストア
-
Google Play開発者サービス
- プッシュ通知機能はここに依存
- Gmail
- Google Map
- Google Chrome
- など
2019年にアメリカ・中国の対立を起因として、中国スマートフォンメーカーのHuaweiがGMS認証を受けられなくなるという事態が発生しました。
これにより HuaweiはGoogle Playストアや通知機能を使用できなくなったため、GMSに変わる独自サービス(Huawei Mobile Services: HMS)を作ったり、さらには独自OS(Harmony OS)を作る方向へと舵を切っています。
Androidはオープンソースであり誰でも使えますが、"Androidスマートフォン"として売っていくためには事実上、GMS認証が欠かせないものとなっています。
参考: グーグル、ファーウェイによるOSやアプリ使用を制限 米政府方針受け (BBC)
2.2 Androidアプリが動く仕組み
2.2.1 技術スタック
AndroidアプリはJava/Kotlinで記述するので、これら言語環境の上に成り立っています。
大抵のプラットフォームは言語とプラットフォームのAPIを覚えれば後は便利ライブラリを探すだけなのですが、Androidは歴史的な事情から、覚える必要のあるライブラリが非常に多くなっています。
特にAOSP(Android Open Source Project)公式が出している補助ライブラリ群「AndroidX」がかなり大きいのが特徴です。実際の開発ではAPIの一部と化している実態もあるため、これらも合わせて覚えていく必要があります。
2.2.2 ソースコードがアプリになるまで
-
開発
- Android開発はAndroidStudioで行うことが一般的ですが、Android開発に使うツール群はAndroidStudioがなくても単独で実行することができます。AndroidStudioはエディタ機能と、それらツール群との連携を自動でしてくれます。
-
ビルド
-
Gradleというビルドツールがビルド設定に応じた処理で、ライブラリの依存関係を解決したり、ソースコードや画像などのリソースの不要コードを削除したり、ソースコードのコンパイルをした上で、AAB / APK ファイルに圧縮します。
-
AAB / APKとは?
-
APK:端末側がアプリを動かすために読み込むファイル
- Androidアプリは最終的にAPK(android Application PacKage)というファイルにまとめられる
- 実体としてはzipファイルなので、拡張子を.zipにすれば解凍可能
-
Split APK:分割されたAPKを読み込める機能
- 有料プランを有効化した人のみに有料部分のAPKを配信し、機能を有効化
- 言語や画面サイズごとのデータを別々のAPKに分割し、必要なもののみを配信
1つのAPKファイルだけでは対応できない -
AAB:Split APKに対応するため、APKにする前のデータをまとめておくファイル
- Google Play側でAABからAPKへのパッケージングを行う
- 端末側からAABを直接読み込むことはできない
Google Playの機能であり、他のストアではAPKでアップロードする必要がある
-
APK:端末側がアプリを動かすために読み込むファイル
-
AAB / APKとは?
-
Gradleというビルドツールがビルド設定に応じた処理で、ライブラリの依存関係を解決したり、ソースコードや画像などのリソースの不要コードを削除したり、ソースコードのコンパイルをした上で、AAB / APK ファイルに圧縮します。
-
配信
- Google Playで配信する場合、圧縮したファイルをGoogle Play Consoleにアップロードして配信します。
- Webサイトなどでアプリを配信することもできます。その場合、ユーザーは提供元不明のアプリのインストールを許可する必要があります。
2.2.3 コンポーネント
アプリを構成する最上位の構成要素をコンポーネントと呼び、Androidは4つのコンポーネントを軸に構成されています。
コンポーネント | 担当 | 主な処理 | |
---|---|---|---|
Activity | 画面 |
・画面描画
・画面イベントハンドリング ・画面遷移 など |
アプリの画面を担当するコンポーネント。
これがないと画面表示ができないため、大抵のアプリで必須。 |
Service | Activityが消えても継続する処理 |
・音楽再生
・大容量データのダウンロード など |
* 何処かに表示は必要なので、通知欄などActivity以外の表示が存在 |
Content Provider | データ提供 |
・DB
・ファイル保存したデータなどの提供 | アプリが持っているデータ(sqliteやファイル)などをREST APIライクなURI形式で抽象化して外部に提供 |
Broadcast Receiver | ブロードキャストメッセージの受信 |
・システムイベントに応じた処理
・SMS受信 ・USB接続 など |
システムイベントのメッセージを受け取って、それに応じた処理をする場合に用いる。
特殊な使用例を除いて使われない。 |
Androidはリリース当初から複数アプリの連携を考えた設計になっており、上記4コンポーネントはその機能を担っています。
2.2.4 アプリ間連携
例. カメラアプリを呼び出す
- SNSアプリで、ユーザーに端末のカメラで写真を撮影してほしい
-
カメラの機能を備えた別のアプリがあるので、自分で開発せずにカメラアプリを使用することができる
- 写真を撮影するカメラアプリのアクティビティを開始するだけ
- ユーザにはカメラがSNSアプリの一部であるように見える
2.2.5 Intent
アプリとアプリは、 Intent と呼ばれるメッセージによって連携を行うことができます。
- アプリは自身の持つコンポーネントをOSに 登録 する
-
他のアプリからメッセージ(
Intent
)を送り、返答したり処理を開始したりすることで連携を行う
- ex) 他のアプリの持つデータを取得する ( Activity → ContentProvider )
- ex) 他のアプリの画面へ遷移する ( Activity → Activity )
- 同一アプリ内でも、コンポーネント間はIntentでのやりとりが必須
例. カメラアプリを呼び出す
例. アプリの起動
アプリの起動すらもIntentによって成り立っています。
- ホームアプリからLaunch Intentが飛ぶ
- Activityが受け取る
- Activityを動作させるために、OSがプロセスを起動してアプリが開始される
普通のソフトウェアの起動順序と異なることに注意してください。
- 普通のアプリ: ユーザがプロセスを起動する → 結果として画面が表示される
- Androidアプリ: 画面(Activity)が要求される → 結果としてプロセスが起動する