Android では、1 台のデバイスで複数のユーザーをサポートしており、各ユーザーにそれぞれ異なるアカウントとアプリケーション データを提供できます。たとえば、保護者がお子様に家族のタブレットを使用することを許可したり、家族が自動車を共有したり、緊急対応チームがモバイル デバイスをオンコール時に共有したりできます。
用語
Android では、Android のユーザーとアカウントを説明する際に、次の用語を使用します。
全般
Android デバイスの管理に関しては、次の一般的な用語が使用されます。
- ユーザー: 各ユーザーは、それぞれ異なる人物であることが想定されています。ユーザーごとに個別のアプリケーション データ、固有の設定、ユーザー インターフェースがあり、これらはユーザー間で明示的に切り替えられます。あるユーザーがアクティブなときに、別のユーザーがバックグラウンドで動作していることもあります。システムは、リソースを節約するために、必要に応じてユーザーをシャットダウンします。セカンダリ ユーザーは、ユーザー インターフェースから直接、またはデバイス管理アプリケーションから作成できます。
- アカウント: アカウントはユーザーに含まれますが、ユーザーによって定義されることはありません。同様に、ユーザーがアカウントによって定義されたり、特定のアカウントにリンクされたりすることはありません。ユーザーとプロファイルには固有のアカウントが含まれますが、アカウントがなくてもそのユーザーとプロファイルは機能します。アカウントのリストはユーザーによって異なります。詳細については、Account クラスの定義を参照してください。
- プロファイル: プロファイルのアプリデータはそれぞれ異なりますが、システム全体に関する一部の設定(Wi-Fi や Bluetooth など)は共有されます。プロファイルは、ユーザーのサブセットであり、ユーザーに関連付けられます。ユーザーは複数のプロファイルを持つことができます。プロファイルは、デバイス管理アプリケーションで作成されます。プロファイルには、そのプロファイルを作成したユーザーによって親ユーザーへの関連付けが定義され、その関連付けは変更できません。また、そのプロファイルを作成したユーザーの存続期間を超えて存続することはできません。
- アプリ: アプリケーションのデータは、関連付けられた各ユーザー内に存在します。アプリデータは、同じユーザー内の他のアプリからサンドボックス化されています。同じユーザー内の複数のアプリは、IPC 経由で相互にやり取りできます。詳細については、エンタープライズ向け Android をご覧ください。
ユーザーのカテゴリ
Android デバイスの管理では、次のユーザー カテゴリを使用します。
- システム ユーザー: デバイスに追加された最初のユーザー。システム ユーザーは出荷時の設定以外では削除できず、他のユーザーがフォアグラウンドで動作しているときも常に動作し続けます。また、このユーザーには特別な権限と設定があり、それらはシステム ユーザーのみが設定できます。
- ヘッドレス システム ユーザー: (
ro.fw.mu.headless_system_user=true
を設定することで)デバイスがヘッドレス システム ユーザー モードで実行するよう設定されている場合に、デバイスに追加された最初のユーザー。ヘッドレス システム ユーザーは常にバックグラウンドで実行されるため、ユーザー操作を可能にするには、該当するデバイスで追加のフォアグラウンド ユーザーが必要になります。 - セカンダリ ユーザー: デバイスに追加されたシステム ユーザー以外のユーザー。セカンダリ ユーザーは、自分自身と管理者ユーザーのいずれかが削除できます。デバイス上の他のユーザーに影響を与えることはできません。セカンダリ ユーザーはバックグラウンドで動作でき、その間もネットワーク接続を継続できます。
- ゲストユーザー: 一時的なセカンダリ ユーザー。ゲストユーザーには、ゲストユーザーを削除するための明示的なオプションがあり、有用性がなくなったゲストユーザーをすばやく削除できます。ゲストユーザーは同時に 1 つのみ設定できます。
- 管理者ユーザー: 他のユーザーを作成、削除し、いくつかの一般的なマルチユーザー設定を管理する権限を持つユーザー。デフォルトでは、システム ユーザーのみが管理者ユーザーです。
プロファイルのカテゴリ
Android は以下のプロファイル カテゴリを使用します。
- 管理対象プロファイル: アプリによって作成され、仕事用のデータとアプリが含まれます。管理対象プロファイルは、プロファイル オーナー(企業プロファイルを作成したアプリ)によってのみ管理されます。ランチャー、通知、最近のタスクは、親ユーザーと企業プロファイルによって共有されます。
- 制限付きプロファイル: 親ユーザーに基づくアカウントを使用します。親ユーザーは、制限付きプロファイルで使用可能なアプリを管理できます。タブレット デバイスとテレビデバイスでのみ使用できます。
- クローン プロファイル: デバイス上で 1 つのアプリの 2 つのインスタンスを実行できるようにするため、Android は個別のクローン プロファイル ユーザー タイプの作成をサポートしています。今後、AOSP はエンドツーエンドのサポートを提供しません。OEM は Android ユーザーに完全な機能を提供するため、カスタマイズを追加する必要があります。
ユーザータイプ
Android 11 では、上記のユーザーとプロファイルの分類が、明確に定義されたユーザータイプとして規定されています。ユーザータイプは、Android のマルチユーザー機能で許可されるすべてのタイプのユーザーとプロファイルを表します。
事前定義済みの AOSP ユーザータイプは frameworks/base/core/java/android/os/UserManager.java
で定義されており、現在のところ以下が含まれています。
android.os.usertype.full.SYSTEM
android.os.usertype.full.SECONDARY
android.os.usertype.full.GUEST
android.os.usertype.full.DEMO
android.os.usertype.full.RESTRICTED
android.os.usertype.profile.MANAGED
android.os.usertype.system.HEADLESS
android.os.usertype.profile.CLONE
OEM は、frameworks/base/core/res/res/xml/config_user_types.xml
ファイルをオーバーレイすることにより、上記のユーザータイプを構成できます。これにより、デフォルトの制限、アイコン、バッジ、最大許容ユーザー数など、各ユーザータイプのデフォルトの構成を簡単に変更できます。
OEM は、構成可能な AOSP ユーザータイプに加えて、frameworks/base/core/res/res/xml/config_user_types.xml
ファイルで新しいプロファイル タイプを定義できます。これにより、OEM は必要に応じて独自の非管理対象プロファイル タイプを導入できます。ただし、変更をサポートするために必要なプラットフォーム変更を行う責任は OEM にあります。たとえば、管理対象プロファイルをチェックするコードを変更し、必要に応じて新しいプロファイル タイプを処理できるようにします。
マルチユーザーを有効にする
マルチユーザー機能はデフォルトでは無効になっています。この機能を有効にするには、frameworks/base/core/res/res/values/config.xml
の次の値を置き換えるリソース オーバーレイをデバイス メーカーが定義する必要があります。
<!-- Maximum number of supported users --> <integer name="config_multiuserMaximumUsers">1</integer> <!-- Whether Multiuser UI should be shown --> <bool name="config_enableMultiUserUI">false</bool>
このオーバーレイを適用して、デバイスでゲストユーザーとセカンダリ ユーザーを有効にするには、Android ビルドシステムの DEVICE_PACKAGE_OVERLAYS
機能を使用して、次のように値を置き換えます。
config_multiuserMaximumUsers
の値を1
よりも大きい値に置き換えるtrue
でconfig_enableMultiUserUI
デバイス メーカーは、最大ユーザー数を決定できます。デバイス メーカーなどが設定を変更する場合は、Android 互換性定義ドキュメント(CDD)で定義されているとおりに SMS と電話が機能することを確認する必要があります。
複数のユーザーを管理する
ユーザーとプロファイルの管理は、制限付きプロファイルを除いて、DevicePolicyManager
クラスの API をプログラムで呼び出して使用制限を設定するアプリケーションによって行います。
企業はユーザーとプロファイルを使用して、デバイスの使用期間と使用できるアプリとデータの範囲を管理できます。上記のユーザータイプおよびプロファイル タイプと DevicePolicyManager API および UserManager API を組み合わせることで、それぞれのユースケースに合った独自のソリューションを構築できます。
マルチユーザー システムの動作
複数のユーザーが追加されているデバイスで、別のユーザーがフォアグラウンドで動作を開始すると、実行中の一部の機能が停止します。アプリのデータはユーザーごとに分かれているため、アプリの状態はユーザーによって異なります。たとえば、現在フォーカスされていないユーザーのアカウントに送信されたメールは、そのユーザーとアカウントがデバイスでアクティブになるまで利用できません。
注: セカンダリ ユーザーの通話機能と SMS 機能を有効または無効にするには、[設定] > [ユーザー] に移動してユーザーを選択し、[通話と SMS を許可する] の設定をオンまたはオフにします。
セカンダリ ユーザーがバックグラウンドで動作している場合、いくつかの制限があります。たとえば、バックグラウンドのセカンダリ ユーザーがユーザー インターフェースを表示したり、Bluetooth サービスをアクティブにしたりすることはできません。また、フォアグラウンドのユーザーの操作に追加のメモリが必要な場合、バックグラウンドのセカンダリ ユーザーはシステム プロセスによって停止されます。
Android デバイスで複数のユーザーを使用する場合は、次の点に注意してください。
- 通知は、1 人のユーザーのすべてのアカウントに対して同時に表示されます。
- 他のユーザーの通知は、そのユーザーがアクティブになるまで表示されません。
- 各ユーザーは、アプリをインストールして配置するためのワークスペースを持ちます。
- ユーザーは他のユーザーのアプリデータにアクセスできません。
- ユーザーは、すべてのユーザー向けにインストールされているアプリに影響を与えることができます。
- 管理者ユーザーは、セカンダリ ユーザーのアプリまたはセカンダリ ユーザーによって確立されたワークスペース全体を削除できます。
- デフォルトでは、ゲストユーザー セッションの情報は、ゲストモードを終了しても保持されません。ゲストユーザー セッションの情報を保持したい場合は、
config_guestUserAllowEphemeralStateChange
をfalse
に設定するリソース オーバーレイ ファイルを作成する必要があります。オーバーレイ ファイルの作成についての詳細は、リソース オーバーレイを使ったビルドのカスタマイズを参照してください。
Android Automotive でのマルチユーザー
Android Automotive では、Android のマルチユーザー機能を使用して、デバイスの共有を実現しています。
Automotive ユーザータイプ
上記のユーザータイプに加えて、Automotive ビルドでは次の特徴的なユーザータイプが存在します。
- ヘッドレス システム ユーザー: このシステム ユーザーは、すべてのシステム サービスをホストします。
Automotive でマルチユーザーをサポートするには、システム ユーザーはヘッドレスでもある必要があります。
ヘッドレス システム ユーザーは 1 人だけ設定できます。ヘッドレス システム ユーザーには以下の特徴があります。
- 常にバックグラウンドで動作している必要があります。
- デバイスのプロビジョニングの場合を除き、ユーザーが直接削除またはアクセスすることはできません。たとえば、ユーザーがこのユーザータイプに切り替えて、アプリのダウンロードやアカウントの追加などを行うことはできません。
- 出荷時設定へのリセットでのみ削除できます。
- 通常のユーザーです。前述のセカンダリ ユーザーと同じですが、セカンダリ ユーザーには以下の異なる特徴があります。
- バックグラウンドで実行されません(切り替えられた後)。
- ユーザー インターフェースから直接作成できます。
- 個別のアプリデータを持ちますが、一部のシステム全体の設定は共有します。たとえば、Wi-Fi や Bluetooth などの設定は共有します。
注意点
Automotive でヘッドレス システム ユーザーと通常の(セカンダリ)ユーザーに適用される例外は次のとおりです。
- ヘッドレス システム ユーザーは仕事用プロファイルをサポートしていません。
- デフォルトでは、通常の(セカンダリ)ユーザーは通話やテキスト メッセージへのフルアクセス権があります。
- デフォルトでは、通常の(セカンダリ)ユーザーはバックグラウンドで実行されません。
ヘッドレス システム ユーザーを有効にする
Android 10 以降、マルチユーザー機能を自動車のユースケースに使用できます。重要な違いは次のとおりです。
- システム ユーザーはヘッドレス システム ユーザーとなり、バックグラウンドでのみ動作します。
- ユーザーがシステム ユーザーとやり取りすることはできません。
ヘッドレス システム ユーザーを有効にするには、デバイス メーカーが上記の説明のようにマルチユーザーを有効にする必要があります。
ヘッドレス ユーザーが有効になっている場合:- デバイスを Automotive として宣言するには、
android.hardware.type.automotive
という機能を追加します。 ro.fw.headless_system_user
をtrue
に設定します。config_multiuserMaximumUsers
の値を2
以上に設定します。
詳しくは、Automotive のマルチユーザー サポートをご覧ください。
Android Automotive の複数ディスプレイでのマルチユーザー
Android 14 の新しい試験運用機能により、完全なセカンダリ ユーザー(現在のフォアグラウンド ユーザーではないユーザー)がアクティビティを起動し、割り当てられているディスプレイ上の UI にアクセスできるようになります。この機能により、Android Automotive OS の複数の同時実行ユーザーが、単一の Android インスタンスで複数の同乗者に専用の UI エクスペリエンスを提供する車内エクスペリエンスをサポートできるようになります。
開発用にこの機能を有効にするには、デバイス メーカーは、frameworks/base/core/res/res/values/config.xml
の以下の値を置き換えるリソース オーバーレイを定義する必要があります。
<!-- Whether the device allows users to start in background visible on displays. Should be false for all devices in production. Can be enabled only for development use in automotive vehicles with passenger displays. --> <bool name="config_multiuserVisibleBackgroundUsers">false></bool>
以下の追加設定を有効にすることで、乗客のみ(ドライバーなし)のエクスペリエンスを試すことができます。
<!-- Whether the device allows users to start in background visible on the default display. Should be false for all devices in production. Can be enabled only for development use in passenger-only automotive build (i.e., when Android runs in a separate system in the back seat to manage the passenger displays). When set to true, config_multiuserVisibleBackgroundUsers must also be true. --> <bool name="config_multiuserVisibleBackgroundUsersOnDefaultDisplay">false</bool>
Android 14 では、複数の同乗者をゲストユーザーとして車内エクスペリエンスを有効にできます。複数のゲストユーザーを開発用として有効にするには、デバイス メーカーは、以下の例のように、frameworks/base/core/res/res/xml/config_user_types.xml
に最大許容ゲストユーザー数を設定するリソース オーバーレイを定義する必要があります。
<user-types> <full-type name="android.os.usertype.full.GUEST" max-allowed='4'> <default-restrictions no_factory_reset="true" no_remove_user="true" no_modify_accounts="true" no_install_apps="true" no_install_unknown_sources="true" no_uninstall_apps="true"/> </full-type> </user-types>