🚀 ニフティ’s Notion

Androidアプリ開発入門#2

第2章 Android

2.1 Androidとは
image block
Android は Google LLC の商標です。

スマートフォン以外でも、以下のような用途でも使われています。

  • 従来型携帯電話(ガラホ)
  • スタンドアロン型VRゴーグル

2.1.1 GMS認証
  • Android自体はOSSであり、自由に改変・利用が可能
  • Googleの提供する主要アプリ群( Google Mobile Services: GMS )を搭載するには、Googleの認証を通る必要がある = いわゆる、みんな知ってるAndroid
    • Google Playストア
    • Google Play開発者サービス
      • プッシュ通知機能はここに依存
    • Gmail
    • Google Map
    • Google Chrome
    • など

Icon
GMS認証を受けられないと

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は歴史的な事情から、覚える必要のあるライブラリが非常に多くなっています。

image block

特にAOSP(Android Open Source Project)公式が出している補助ライブラリ群「AndroidX」がかなり大きいのが特徴です。実際の開発ではAPIの一部と化している実態もあるため、これらも合わせて覚えていく必要があります。

2.2.2 ソースコードがアプリになるまで
image block
  1. 開発
    1. Android開発はAndroidStudioで行うことが一般的ですが、Android開発に使うツール群はAndroidStudioがなくても単独で実行することができます。AndroidStudioはエディタ機能と、それらツール群との連携を自動でしてくれます。
  2. ビルド
    1. Gradleというビルドツールがビルド設定に応じた処理で、ライブラリの依存関係を解決したり、ソースコードや画像などのリソースの不要コードを削除したり、ソースコードのコンパイルをした上で、AAB / APK ファイルに圧縮します。
      • AAB / APKとは?
        • APK:端末側がアプリを動かすために読み込むファイル
          • Androidアプリは最終的にAPK(android Application PacKage)というファイルにまとめられる
          • 実体としてはzipファイルなので、拡張子を.zipにすれば解凍可能
        • Split APK:分割されたAPKを読み込める機能
          • 有料プランを有効化した人のみに有料部分のAPKを配信し、機能を有効化
          • 言語や画面サイズごとのデータを別々のAPKに分割し、必要なもののみを配信
          Icon
          1つのAPKファイルだけでは対応できない
        • AAB:Split APKに対応するため、APKにする前のデータをまとめておくファイル
          • Google Play側でAABからAPKへのパッケージングを行う
          • 端末側からAABを直接読み込むことはできない
          Icon
          Google Playの機能であり、他のストアではAPKでアップロードする必要がある
  3. 配信
    1. Google Playで配信する場合、圧縮したファイルをGoogle Play Consoleにアップロードして配信します。
    2. Webサイトなどでアプリを配信することもできます。その場合、ユーザーは提供元不明のアプリのインストールを許可する必要があります。

2.2.3 コンポーネント

アプリを構成する最上位の構成要素をコンポーネントと呼び、Androidは4つのコンポーネントを軸に構成されています。

コンポーネント 担当 主な処理
Activity 画面 ・画面描画
・画面イベントハンドリング
・画面遷移
など
アプリの画面を担当するコンポーネント。
これがないと画面表示ができないため、大抵のアプリで必須。
Service Activityが消えても継続する処理 ・音楽再生
・大容量データのダウンロード
など
長時間継続する処理に使う 主に画面(Activity)が消えても存続させたい処理に使われる
* 何処かに表示は必要なので、通知欄などActivity以外の表示が存在
Content Provider データ提供 ・DB
・ファイル保存したデータなどの提供
アプリが持っているデータ(sqliteやファイル)などをREST APIライクなURI形式で抽象化して外部に提供
Broadcast Receiver ブロードキャストメッセージの受信 ・システムイベントに応じた処理
 ・SMS受信
 ・USB接続 など
システムイベントのメッセージを受け取って、それに応じた処理をする場合に用いる。
特殊な使用例を除いて使われない。

Androidはリリース当初から複数アプリの連携を考えた設計になっており、上記4コンポーネントはその機能を担っています。

2.2.4 アプリ間連携

例. カメラアプリを呼び出す

image block
  1. SNSアプリで、ユーザーに端末のカメラで写真を撮影してほしい
  2. カメラの機能を備えた別のアプリがあるので、自分で開発せずにカメラアプリを使用することができる
    1. 写真を撮影するカメラアプリのアクティビティを開始するだけ
    2. ユーザにはカメラがSNSアプリの一部であるように見える

2.2.5 Intent

アプリとアプリは、 Intent と呼ばれるメッセージによって連携を行うことができます。

image block
  • アプリは自身の持つコンポーネントをOSに 登録 する
  • 他のアプリからメッセージ( Intent )を送り、返答したり処理を開始したりすることで連携を行う
    • ex) 他のアプリの持つデータを取得する ( Activity → ContentProvider )
    • ex) 他のアプリの画面へ遷移する ( Activity → Activity )
  • 同一アプリ内でも、コンポーネント間はIntentでのやりとりが必須

例. カメラアプリを呼び出す

image block

例. アプリの起動

アプリの起動すらもIntentによって成り立っています。

image block
  1. ホームアプリからLaunch Intentが飛ぶ
  2. Activityが受け取る
  3. Activityを動作させるために、OSがプロセスを起動してアプリが開始される

普通のソフトウェアの起動順序と異なることに注意してください。

  • 普通のアプリ: ユーザがプロセスを起動する → 結果として画面が表示される
  • Androidアプリ: 画面(Activity)が要求される → 結果としてプロセスが起動する