アプリ基礎
AndroidDevelopersのアプリ基礎を読んだことがなかったのでまとめた。
抜粋しているため、詳しくはこちら。
AndroidSDKツール
コードをデータやリソース ファイルと一緒に APK(Android パッケージ)にコンパイルします。.apk という接尾語の付いたアーカイブ ファイルです。
Androidのセキュリティ機能
Androidアプリはそれぞれセキュリティサンドボックス内で動作し、以下のセキュリティ機能により保護されている
- 各アプリがそれぞれ異なるユーザーになる
- デフォルトでが一意のLinuxユーザーIDが割り当てられる。アプリに割り当てられたユーザーIDのみがアプリ内のすべてのファイルにアクセスできる
etc...
Android システムには 「最小権限の原則」 が適用されています。つまり、デフォルトでは各アプリにコンポーネントの動作に必要な分だけのアクセス権が与えられます。これにより、パーミッションの与えられていないシステムの部分にアプリはアクセスできないという非常に安全性の高い環境が作り出されます。ただし、アプリが他のアプリとデータを共有したり、システムのサービスのアクセスすることもできます(同一のLinuxIdを共有、権限のリクエスト)。
アプリのコンポーネント
アプリのコンポーネントは Android アプリに不可欠な構成要素です。各コンポーネントは、システムやユーザーがアプリに入るエントリ ポイントになります。一部のコンポーネントは他のコンポーネントに依存しています。
アプリのコンポーネントには 4 つのタイプがあります。気になるものを抜粋して説明します。
- アクティビティ
- サービス
- ブロードキャスト レシーバ
- コンテンツ プロバイダ
ブロードキャストレシーバー
ブロードキャスト レシーバは、通常のユーザーフローを外れて、システムがアプリにイベントを配信できるようにするコンポーネントです。これにより、アプリはシステム全体のブロードキャスト アナウンスに応答できます。ブロードキャスト レシーバは明確に定義されたアプリへのエントリであるため、システムは実行中でないアプリに対してもブロードキャストを配信できます。したがってアプリが、たとえば、近づいているイベントについてユーザーに知らせる通知を投稿するためのアラームをスケジューリングすることができます。
マニフェストファイル
アプリはすべてのコンポーネントをこのファイルで宣言し、アプリ プロジェクト ディレクトリのルートにこのファイルを置く必要があります。マニフェストはアプリのコンポーネントを宣言する以外に、次のようにさまざまなことを行います。
- インターネット アクセスや、ユーザーの連絡先への読み取りアクセスなど、アプリに必要なユーザー パーミッションを識別する。
- アプリが使用する API に基づいて、アプリが必要とする最小 API レベルを宣言する。
- カメラ、Bluetooth サービス、マルチタッチ スクリーンなど、アプリで使用されるか必要とされるハードウェア機能やソフトウェア機能を宣言する。
- Google マップ ライブラリなど、アプリにリンクする必要のある API ライブラリ(Android フレームワーク API は除く)を宣言する。
以下の要素を使用して、アプリのすべてのコンポーネントを宣言する必要があります。
- <Activity>要素(アクティビティの場合)
- <service>要素 (サービスの場合)
- <receiver>要素 (ブロードキャストレシーバーの場合)
- <provide>要素 (コンテンツプロバイダの場合)
ソースに含まれていても、マニフェストで定義されていないアクティビティ、サービス、コンテンツ プロバイダは、システムからは見えないため、実行されることはありません。ただし、ブロードキャスト レシーバはマニフェストで宣言することもできますし、BroadcastReceiver オブジェクトとしてコードで動的に作成し、registerReceiver() を呼び出すことでシステムに登録することもできます。
アプリの要件を宣言する
アプリに必要な機能を搭載していない端末にアプリをインストールしてしまわないよう、アプリがサポートする端末のタイプについてプロファイルで明確に定義し、マニフェスト ファイルで端末の要件やソフトウェア要件を宣言しておくことが重要です。
たとえば、あなたのアプリがカメラを必要とし、Android 2.1 で導入された API(API レベル 7)を使用している場合、次の例のようにマニフェスト ファイルでそれを要件として宣言しなければなりません。
<manifest ... >
<uses-feature android:name="android.hardware.camera.any"
android:required="true" />
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="19" />
...
</manifest>
この例では、カメラのない端末や、Android バージョンが 2.1 未満の端末は、Google Play からあなたのアプリをインストールすることができません。ただし、アプリでカメラを使用するが、それが必須ではないということを宣言することもできます。この場合、アプリで required 属性を false に設定し、端末にカメラがあるかどうかをランタイム時に確認して、必要に応じてカメラ機能を無効にする必要があります。