アプリの基礎

Android アプリは、Kotlin、Java プログラミング言語、C++ 言語で記述できます。Android SDK Tools のコンパイルが コードと一緒にデータ ファイル、リソース ファイルをまとめて APK または Android App Bundle に変換できます。

Android パッケージ.apk サフィックスが付いたアーカイブ ファイルであり、次の内容が含まれます。 実行時に必要な Android アプリのコンテンツであり、このファイルが Android の ユーザーがアプリをインストールする際に使用されます。

Android App Bundle は .aab サフィックスが付いたアーカイブ ファイルであり、次の内容が含まれます。 Android アプリ プロジェクトのコンテンツ( ランタイム。AAB は公開フォーマットであるため、Android デバイスにインストールすることはできません。これは、 APK の生成と署名を後の段階に延期します。

Google を通じてアプリを配布する場合 たとえば、Google Play のサーバーは、最適化された APK を生成します。APK には、リソースと アプリのインストールをリクエストしている特定のデバイスが必要とするコード。

各 Android アプリは、独自のセキュリティ サンドボックス内で保護され、 Android のセキュリティ機能は以下のとおりです。

  • Android オペレーティング システムはマルチユーザーの Linux システムであり、 できます。
  • デフォルトでは、システムによって各アプリに一意の Linux ユーザー ID が割り当てられます。この ID は、 アプリに認識されません。システムは、システム内のすべてのファイルに対して そのアプリに割り当てられたユーザー ID のみがアプリにアクセスできるようにします。
  • 各プロセスには独自の仮想マシン(VM)があるため、アプリのコードは できます。
  • デフォルトでは、すべてのアプリは独自の Linux プロセスで実行されます。Android システムが起動します。 プロセスが終われば 実行する必要があり、プロセスをシャットダウンします。 データが システムが他のアプリのためにメモリを回復する必要がある場合。

Android システムは最小権限の原則を実装しています。つまり デフォルトでは、各アプリは自身の作業に必要なコンポーネントにのみアクセスし、 不要になりましたこれにより、アプリがインフラストラクチャの一部にアクセスできない、非常に安全な環境が構築されます。 権限がないシステム。

ただし、アプリ間で共有する方法は 他のアプリとのデータ共有や アプリを使用してシステム サービスにアクセスします。

  • 2 つのアプリで同じ Linux ユーザー ID を共有することは可能です。この場合、 互いのファイルにアクセスできるようになります。システム リソースを節約するために、 同じユーザー ID を、同じ Linux プロセスで実行して同じ VM を共有することもできます。「 アプリにも、同じ証明書で署名する必要があります。
  • アプリは、デバイスのデータ 位置情報、カメラ、Bluetooth 接続などです。ユーザーが 権限を明示的に付与する必要があります。権限の詳細については、以下をご覧ください。 Android での権限

このドキュメントの残りの部分では、次のコンセプトについて説明します。

  • アプリを定義するコア フレームワーク コンポーネント。
  • コンポーネントと必要なデバイスを宣言するマニフェスト ファイル 機能を 。
  • アプリコードから分離されたリソースで、アプリ さまざまなデバイス設定に合わせて動作を適切に最適化できます。

アプリ コンポーネント

アプリ コンポーネントは、Android アプリに不可欠な構成要素です。各 コンポーネントは、システムまたはユーザーがアプリに入り込むためのエントリ ポイントです。一部 依存しています。

アプリ コンポーネントには次の 4 種類があります。

  • アクティビティ
  • サービス
  • ブロードキャスト レシーバ
  • コンテンツ プロバイダ

種類ごとに目的が異なる コンポーネントの作成方法と破棄方法を定義する 明確なライフサイクルがあります 以下のセクションでは、4 種類のアプリ コンポーネントについて説明します。

アクティビティ
アクティビティは、ユーザーとやり取りするためのエントリ ポイントです。単一の Pod を表す 表示される場合もあります。たとえば メールアプリには、新しいメッセージ リストを表示するアクティビティを メールを作成するアクティビティ、メールを読むアクティビティがあります。ただし、 メールアプリの各アクティビティは連携して、一貫したユーザー エクスペリエンスを形成します。 互いに独立しています

別のアプリからこれらのいずれかを起動できます メールアプリで許可されている場合です。たとえば、カメラアプリから メールアプリで新しいメールを作成し、ユーザーが写真を共有できるようにします。

アクティビティは、システムとアプリ間の以下の主要なやり取りを容易にします。

  • ユーザーが現在関心を持っていること、つまり画面上に何が表示されているかを追跡し、 アクティビティをホストしているプロセスを実行し続けます。
  • 以前に使用したプロセスのうち、ユーザーが再開する可能性のある停止したアクティビティが含まれているかどうかを確認する それらのプロセスに優先順位を付けて 利用できるようにすることです
  • アプリのプロセスが強制終了されて、ユーザーがアクティビティに戻れるようにする 復元されます
  • アプリ同士でユーザーフローを実装する方法や、システムで 連携させることですその主な例が共有です。

アクティビティは、Activity クラスのサブクラスとして実装します。詳細 Activity クラスの詳細については、以下をご覧ください。 アクティビティの概要

サービス
サービスは、アプリをバックグラウンドで実行させておくための汎用エントリ ポイントです。 さまざまな理由があります。バックグラウンドで実行されるコンポーネントで、長時間実行 リモート プロセスに対する作業の実行を遅らせます。サービスはユーザー インターフェースを提供しません。

対象 たとえば、ユーザーが別のアプリを使用しているときに、バックグラウンドで音楽を再生するようなサービスが考えられます。 アクティビティに対するユーザーの操作をブロックすることなく、ネットワーク経由でデータを取得できます。その他 コンポーネント(アクティビティなど)がサービスを開始し、サービスを実行またはバインドできる やり取りできます。

アプリの管理方法をシステムに指示するサービスには、開始されたサービスと、開始されたサービスとの 2 つの種類があります。 制限します。

起動されたサービスは、処理が完了するまでサービスを実行し続けるようシステムに指示します。 たとえば、ユーザーがアプリを離れた後も、バックグラウンドでデータを同期したり音楽を再生したりできます。 バックグラウンドのデータの同期や音楽の再生は、さまざまなタイプの開始 処理は異なります。

  • 音楽の再生はユーザーが直接認識しているもので、アプリがその旨を フォアグラウンドで実行することを示し、それを通知する通知とともに、システムに対して ユーザーを表します。この場合、システムはそのサービスの 実行中のプロセスが失われることがあります。
  • 通常のバックグラウンド サービスはユーザーが直接認識するものではないため、 システムのプロセス管理の自由度が高まります。死ぬかもしれない より重要な用途のために RAM が必要な場合に、後でサービスを再起動 即座にユーザーに通知されます。

バインドされたサービスが実行されるのは、他のアプリ(またはシステム)が あります。バインドされたサービスは別のプロセスに API を提供し、システム これらのプロセスの間に依存関係があることを認識できます。プロセス A がサービスにバインドされている プロセス B に対して、プロセス B とそのサービスを稼働させ続ける必要があることをシステムは認識しています。さらに プロセス A がユーザーにとって重要なものであれば、プロセス B を 考慮する必要があります

サービスは柔軟性に優れているため、 あらゆる上位レベルのシステム コンセプトの構成要素です。ライブ壁紙、通知 リスナー、スクリーン セーバー、入力方法、ユーザー補助サービス、その他多くのコアシステム機能 すべて、アプリケーションが実装するサービスとして構築され、実行時にシステムがバインドされます。

サービスは、Service のサブクラスとして実装されます。詳細情報 Service クラスの詳細については、 サービスの概要をご覧ください。

注: Android 5.0(API レベル 21)以降をターゲットとしているアプリの場合、 JobScheduler クラスを使用してアクションのスケジュールを設定します。JobScheduler に ジョブを最適にスケジューリングして消費電力を削減することでバッテリーを節約できるというメリット Doze API を使用します。 このクラスの使用方法については、JobScheduler をご覧ください。 ご覧ください。

ブロードキャスト レシーバ
ブロードキャスト レシーバは、システムがイベントを アプリがシステム全体のブロードキャストに応答できるように、通常のユーザーフロー以外で お知らせ。ブロードキャスト レシーバも、アプリへの明確に定義されたエントリであるため、 現在実行されていないアプリにもブロードキャストを配信できます。

たとえば、アプリは アラームを設定して、今後の予定を知らせる通知を送信する。 アラームはアプリ内の BroadcastReceiver に配信されるため、アプリが 動作し続けます。

多くのブロードキャストは、画面がオフになったことを通知するブロードキャストのように、システムから発信されます。 バッテリー残量が少ない、または画像が撮影された。 また、アプリはブロードキャストを開始することもできます。たとえば、 一部のデータがデバイスにダウンロードされ、使用できるようになります。

ブロードキャストしながら ユーザー インターフェースが表示されない場合は、ステータスバーの通知を作成できます。 ブロードキャスト イベントが発生したときにユーザーにアラートを表示できます。ただし、より一般的には、ブロードキャスト レシーバは 他のコンポーネントへの入り口にすぎず、最小限の作業のみを目的としています。

たとえば、ブロードキャスト レシーバは、JobService をスケジューリングして処理ベースの処理を実行する場合があります。 JobScheduler を使用して予定に回答する。 ブロードキャスト レシーバには、アプリが相互にやり取りすることが多いため、 セキュリティへの影響を考慮します

ブロードキャスト レシーバは BroadcastReceiver のサブクラスとして実装されます。 各ブロードキャストは Intent オブジェクトとして配信されます。詳しくは BroadcastReceiver クラスをご覧ください。

コンテンツ プロバイダ
コンテンツ プロバイダは、デベロッパーが保存できる一連のアプリデータを管理します ファイル システム、SQLite データベース、ウェブ、その他の永続ストレージ お客様の アクセスできます。コンテンツ プロバイダを介して、他のアプリはコンテンツ プロバイダを介して コンテンツ プロバイダが許可している場合、データに適用されます。

たとえば、Android システムは ユーザーの連絡先情報を管理するプロバイダです。適切な 許可を使用してコンテンツ プロバイダに問い合わせます。たとえば、 ContactsContract.Data - 次に関する情報の読み取りと書き込み できます。

コンテンツ プロバイダはデータベースの抽象化だと考えたくなるものです。なぜなら、 多くの API とサポートが組み込まれていますただし、 考える必要があります。

システムにとって、コンテンツ プロバイダは、名前付きデータアイテムを公開するためのアプリへのエントリ ポイントです。 URI スキームで識別されます。したがって、アプリは含まれているデータを その URI を他のエンティティに渡し、エンティティがそれを使用して 分析できますこれにより、システムにより、アプリの管理において次のような処理が可能になります。

  • URI を割り当てる際、アプリを実行したままにしておくことは不要なため、URI はアプリの実行後も 属しています。システムに必要なのは、所有するアプリが が、対応する URI からアプリのデータを取得したときに、引き続き実行されます。
  • これらの URI は、重要なきめ細かいセキュリティ モデルも提供します。たとえば、 アプリはクリップボードに画像の URI を配置できますが、そのコンテンツはそのままにします アプリがロックされ、他のアプリが自由にアクセスできない状態になっています。2 つ目のアプリが その URI にアクセスするために、システムはそのアプリに 一時的な URI 権限付与を使用してデータにアクセスする 2 つ目のアプリでは、その URI の背後のデータにのみアクセスし、それ以外のデータにはアクセスしません。

コンテンツ プロバイダは、コンテンツ プロバイダが非公開のデータの読み取りと書き込みを行う場合にも 共有されません。

コンテンツ プロバイダは ContentProvider のサブクラスとして実装されます。 他のアプリが実行できるようにする標準の API セットを実装する必要がある あります。詳しくは、コンテンツ プロバイダのデベロッパーをご覧ください。 ご覧ください

Android システム設計のユニークな点は、どのアプリからでも別のアプリを起動できることです。 アプリのコンポーネントです。たとえば、ユーザーが そういうアプリなら、おそらく別のアプリが アプリは、自分で写真を撮影するアクティビティを開発する代わりに、これを使用できます。あなたは カメラアプリのコードを組み込むか、リンクする必要があります。 代わりに、カメラアプリで あります。完了すると、写真がアプリに返され、使用できるようになります。ユーザーには、 アプリの一部であるかのように表示されます。

システムがコンポーネントを起動すると、そのアプリのプロセスが開始されます(まだ開始されていない場合)。 コンポーネントに必要なクラスをインスタンス化しますたとえば、 写真を撮影するカメラアプリのアクティビティを開始すると、そのアクティビティ アプリのプロセスではなく、カメラアプリのプロセス内で実行されます。 そのため、他のほとんどのシステムのアプリとは異なり、Android アプリには単一のエントリがありません。 ポイント: main() 関数はありません。

システムは各アプリを個別のプロセスで、 他のアプリへのアクセスを制限できるため、アプリが クリックします。Android システムは可能です。コンポーネントを インテントを指定したメッセージをシステムに配信して、 開始できます。そのコンポーネントが自動的に有効になります。

コンポーネントを有効化する

インテントと呼ばれる非同期メッセージによって、4 つのコンポーネント タイプ(アクティビティ、サービス、 ブロードキャスト レシーバにも使用できます。 インテントは、実行時に個々のコンポーネントを互いにバインドします。どのモデルも 他のコンポーネントにアクションをリクエストするメッセンジャーとして機能し、そのコンポーネントが 定義できます。

インテントは、メッセージを定義する Intent オブジェクトを使用して作成されます。 特定のコンポーネント(明示的インテント)または特定の種類のコンポーネントを有効化する (暗黙的インテント)。

アクティビティとサービスの場合、インテントでは、実行するアクションを次のように定義します。 view または send などの処理を行い、処理対象のデータの URI を指定することもあります。 知る必要があるかもしれません。

たとえば、インテントは、リクエストされたメッセージを送信するための 画像を表示したりウェブページを開いたりできます場合によっては 場合、アクティビティも結果を受け取ります。 結果は Intent になります。また、インテントを発行して、 ユーザーは個人の連絡先を選択し、その連絡先を返却します。リターン インテントには 選択した連絡先を指す URI。

ブロードキャスト レシーバの場合、インテントは、 ブロードキャスト アナウンスがあります。たとえば、デバイスのバッテリー残量が少ないことを示すブロードキャストなどです。 バッテリー残量が少ないことを示す既知のアクション文字列のみが含まれている。

コンテンツ プロバイダは、アクティビティ、サービス、ブロードキャスト レシーバと異なり、 ContentResolver からのリクエストのターゲットになると有効になります。内容 リゾルバはコンテンツ プロバイダとのすべての直接取引を処理し、 プロバイダとのトランザクションの実行は、 ContentResolver オブジェクト。これにより、セキュリティ上の理由から、 コンテンツプロバイダと 情報をリクエストしているコンポーネントです

コンポーネントのタイプごとに有効にする方法はいくつかあります。

  • アクティビティを開始したり、新しいアクティビティを割り当てたりするには、 IntentstartActivity() に渡す または、アクティビティで結果を返すようにする場合は、 startActivityForResult()
  • Android 5.0(API レベル 21)以降では、 JobScheduler クラスを使用して、アクションのスケジュールを設定します。 それより前のバージョンの Android では、 継続中のサービスに新しい指示を出すこともできます。 IntentstartService() に渡す。 サービスにバインドするには、IntentbindService()
  • ブロードキャストを開始するには、Intent を次のようなメソッドに渡します。 sendBroadcast() または sendOrderedBroadcast()
  • コンテンツ プロバイダにクエリを実行するには、 query() ContentResolver 上。

インテントの使用方法について詳しくは、インテントと インテント フィルタのドキュメントをご覧ください。 特定のコンポーネントを有効にする方法については、次のドキュメントをご覧ください。 アクティビティの概要 サービスの概要BroadcastReceiverコンテンツ プロバイダ

マニフェスト ファイル

Android システムがアプリ コンポーネントを起動する前に、 コンポーネントが存在することを確かめるには、アプリのマニフェスト ファイルAndroidManifest.xml)を読み取ります。 アプリのすべてのコンポーネントは、このファイルで宣言します。 ディレクトリにあります。

マニフェストでは、アプリのコンポーネントの宣言に加え、さまざまな処理が行われます。 次に例を示します。

  • アプリが必要とするユーザー権限(インターネット アクセス、 ユーザーの連絡先への読み取りアクセスが許可されます。
  • 最小値を宣言する API レベル (アプリによって使用される API に応じて異なります)
  • アプリが使用または必要なハードウェア機能とソフトウェア機能(カメラなど)を宣言する Bluetooth サービス、マルチタッチ スクリーン。
  • アプリをリンクする必要がある API ライブラリを宣言している(Android フレームワーク以外) API など) Google マップ ライブラリ

コンポーネントを宣言する

マニフェストの主なタスクは、アプリのコンポーネントに関する情報をシステムに伝えることです。対象 たとえば、マニフェスト ファイルで次のようにアクティビティを宣言できます。

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application android:icon="@drawable/app_icon.png" ... >
        <activity android:name="com.example.project.ExampleActivity"
                  android:label="@string/example_label" ... >
        </activity>
        ...
    </application>
</manifest>

<application> 要素の場合、android:icon 属性は、その要素を識別するアイコンのリソースを 。

<activity> 要素で、次のようにします。 android:name 属性は、作成するオブジェクトの完全修飾クラス名を指定します。 Activity サブクラス、 android:label 属性は文字列を指定します 表示するアクティビティのラベルとして使用します。

以下の要素を使用して、すべてのアプリ コンポーネントを宣言する必要があります。

ソースに含まれているが宣言していないアクティビティ、サービス、コンテンツ プロバイダ システムに公開されず、実行されることはありません。ただし、 ブロードキャスト レシーバはマニフェストで宣言することも、コード内で動的に作成することもできます。 BroadcastReceiver 呼び出してシステムに登録します。 registerReceiver()

アプリのマニフェスト ファイルを構造化する方法について詳しくは、アプリ マニフェストの概要をご覧ください。

コンポーネント機能を宣言する

コンポーネントを有効化するで説明したように、 Intent: アクティビティ、サービス、ブロードキャスト レシーバを起動します。 操作 インテント内でコンポーネント クラス名を使用して、ターゲット コンポーネントに明示的に名前を付ける。 また、暗黙的インテントを使用して、 実行するアクションのタイプを指定します。オプションで、実行するデータも指定できます。 そのアクションを実行します。暗黙的インテントを使用すると、システムがデバイス上のコンポーネントを検出できる 実行可能な 開始できます。記述されたアクションを実行できるコンポーネントが複数ある場合、 使用するものはユーザーが選択します。

注意: インテントを使用して開始 Service さん、 露骨な表現 使用します。暗黙的インテントを使用してサービスを開始する方法は、 セキュリティ上のリスクが生じるため。どのようなサービスがインテントに応答するかは ユーザーはどのサービスが開始するのかわかりません。Android 5.0(API レベル 21)以降では、 bindService() を呼び出すと例外がスローされます。 暗黙的インテントで呼び出します。サービスのインテント フィルタは宣言しないでください。

システムはインテントに応答できるコンポーネントを、 他のアプリのマニフェスト ファイルで指定されたインテント フィルタに受信したインテント クリックします。

アプリのマニフェストでアクティビティを宣言する場合、 アクティビティの機能を宣言するインテント フィルタ(アクティビティがインテントに応答できるようにする) 管理できます。方法 <intent-filter> 要素をコンポーネントの宣言要素の子として追加する。

たとえば、新しいメールを作成するアクティビティを含むメールアプリを作成する場合、 「send」に応答するインテント フィルタを宣言する新しいメールを送信する場合、 次のように指定します。

<manifest ... >
    ...
    <application ... >
        <activity android:name="com.example.project.ComposeEmailActivity">
            <intent-filter>
                <action android:name="android.intent.action.SEND" />
                <data android:type="*/*" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    </application>
</manifest>

別のアプリが ACTION_SEND アクションでインテントを作成し、それを startActivity(), ユーザーがアクティビティを下書きして送信できるように、システムによってアクティビティが開始されることがあります。 できます。

インテント フィルタの作成について詳しくは、インテントとインテント フィルタのドキュメントをご覧ください。

アプリの要件を宣言する

Android 搭載のデバイスにはさまざまなものがありますが、そのすべてが 使用できます。アプリがデバイスにインストールされないようにする 不足しているアプリがある場合は、アプリのプロファイルを デバイスの要件とソフトウェアの要件を 使用します。

これらの申告のほとんどは、情報提供のみを目的としています。システムが読み取らない ただし、Google Play などの外部サービスはそれらを読み取ってフィルタリングを提供します。 ユーザーが自分のデバイスからアプリを検索したとき。

たとえば、アプリがカメラを必要とし、Android 8.0(API レベル 26)で導入された API を使用しているとします。 これらの要件を宣言する必要があります。 minSdkVersiontargetSdkVersion の値は次の場所に設定されます。 アプリ モジュールの build.gradle ファイルを次のように変更します。

android {
  ...
  defaultConfig {
    ...
    minSdkVersion 26
    targetSdkVersion 29
  }
}

注: minSdkVersion と これは、マニフェスト ファイル内で targetSdkVersion を直接指定するためです。 ビルドプロセス中に Gradle によって上書きされます。詳細については、次をご覧ください: API レベル要件を指定します

アプリのマニフェスト ファイルでカメラ機能を宣言します。

<manifest ... >
    <uses-feature android:name="android.hardware.camera.any"
                  android:required="true" />
    ...
</manifest>

以下の例に示す宣言では、 または Android 8.0 よりのバージョンでは、Google Play からアプリをインストールできません。 ただし、アプリがカメラを使用することを宣言できますが、 要求します。これを行うには、required を設定します。 false に設定すると、実行時に デバイスにカメラが搭載されており、必要に応じてカメラ機能を無効にしている。

さまざまなデバイスに対するアプリの互換性を管理する方法の詳細 デバイスの互換性の概要に記載されています。

アプリのリソース

Android アプリはコードだけで構成されていません。必要なリソースの量は、 画像、音声ファイル、およびビジュアル コンテンツに関連するあらゆるものなどのソースコードから 説明します。たとえば、アニメーション、メニュー、スタイル、色、 XML ファイルを使用したアクティビティの ユーザーインターフェースのレイアウトです

アプリのリソースを使用することで、 コードを変更せずにアプリのさまざまな特性を更新できます。提供 一連の代替リソースを使用すると、さまざまなリソースに合わせてアプリを最適化できます。 デバイス設定(さまざまな言語や画面サイズなど)にも適用できます。

Android プロジェクトに含めるリソースごとに、SDK ビルドツールでは一意の 整数 ID を使用します。この ID を使用して、アプリコードまたは XML 内で定義された他のリソースが含まれます。たとえば、アプリに logo.pngres/drawable/ ディレクトリに保存)と SDK Tools により、 R.drawable.logo という名前のリソース ID。この ID はアプリ固有の整数にマッピングされ、 を使用して画像を参照し、ユーザー インターフェースに挿入できます。

ソースコードとは別にリソースを提供するうえで最も重要な側面の一つは、 デバイスごとに代替リソースを できます。

たとえば、XML で UI 文字列を定義すると、 文字列を他の言語に それらの文字列を別々のファイルに保存できます。次に、Android は 適切な言語文字列 言語修飾子に基づいて UI にカスタマイズする リソース ディレクトリの名前に追加します。たとえば、フランス語の文字列なら res/values-fr/ です。 値、ユーザーの言語設定に応じて異なります。

Android では、代替リソース用に数多くの修飾子がサポートされています。「 修飾子は、リソース ディレクトリの名前に含めて そのリソースを使用するデバイス設定を定義します。

対象 たとえば、アクティビティに応じて異なるレイアウトを デバイスの画面の向きとサイズ。デバイスの画面が縦向き(縦長)の場合 ボタンが縦に並んだレイアウトが望ましいですが、 ボタンを横方向に揃えます。レイアウトを変更するには 向きに応じて 2 つのレイアウトを定義し、 各レイアウトのディレクトリ名に追加します。すると、システムは適切なルールを自動的に 画面の向きに応じて異なります。

アプリケーションに含めることができるさまざまな種類のリソースと、 デバイス構成ごとに代替リソースを作成するには、アプリリソースの概要をご覧ください。宛先 製品版品質で堅牢なアプリを設計するおすすめの方法や、 アプリ アーキテクチャ ガイドをご覧ください。

参考情報

動画とコード チュートリアルを使用して Android 開発について学習するには、 Kotlin による Android アプリの開発 Udacity コースです。

関連情報:

インテントとインテント フィルタ
Intent API を使用して以下を行う方法を学習します。 アクティビティやサービスなどのアプリ コンポーネントを有効化する、アプリ コンポーネントを作成する方法 他のアプリで使用できるよう設定できます。
アクティビティの概要
Activity クラスのインスタンスを作成する方法を学習します。 これにより、ユーザー インターフェースを備えたアプリ内固有の画面が提供されます。
アプリリソースの概要
Android アプリが、アプリのリソースを アプリコード(特定のデバイス向けの代替リソースを提供する方法を含む) できます。

関連情報:

デバイスの互換性の概要
さまざまな種類のデバイスで Android がどのように動作するかを学びます デバイスごとにアプリを最適化したり、アプリの公開を制限したりする方法 異なるデバイスに自動転送できます。
Android での権限
権限を使用して特定の API へのアプリのアクセスを Android で制限する方法を学ぶ アプリがこれらの API を使用するためにユーザーの同意を必要とするシステム。