Android では、1 台のデバイスで複数のユーザーをサポートします。詳細については、複数ユーザーのサポートをご覧ください。すべてのシステム パッケージがすべてのタイプの Android ユーザーにとって有用とは限らないため、許可リストを使用して、プリインストールする必要があるシステム パッケージをユーザーのタイプごとに指定できます。不要なシステム パッケージをプリインストールしないことで、ユーザーの作成時間、開始時間、メモリ使用量を最適化できます。
frameworks/base/data/etc/preinstalled-packages-platform.xml
でモデル化されたシステム構成 XML ファイルを使用し、新規ユーザーに最初にインストールする必要があるシステム パッケージをユーザータイプに基づいて宣言します。デバイス上のすべてのシステム パッケージには、対応するオーバーレイ ターゲット パッケージのエントリに基づいて自動的に処理される静的オーバーレイを除き、XML ファイルのエントリ(マニフェスト名がキー)が含まれているのが理想的です。
ここに記載されていないシステム パッケージをデバイスで処理する方法は、構成モードによって管理されます。
ユーザータイプ
基本のユーザータイプ(すべてのユーザーがこれらのうち少なくとも 1 つのタイプになります):
ユーザータイプ | 説明 |
---|---|
SYSTEM |
ユーザー 0。 |
FULL |
プロファイルでない人間のユーザー。 |
PROFILE |
プロファイルの人間のユーザー。 |
それぞれの正確な意味は frameworks/base/core/java/android/content/pm/UserInfo.java
で定義されています。
すべてのユーザーは、これらのユーザータイプ(frameworks/base/core/java/android/os/UserManager.java
で定義されている AOSP ユーザータイプと、frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java.
で定義されている OEM カスタム ユーザータイプを含む)のいずれか 1 つに該当します。個別のユーザータイプを指定することで、きめ細かい管理が可能になります。詳しくは、ユーザータイプのページをご覧ください。現在のところ、AOSP ユーザータイプは次のとおりです。
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
例
次の例は、最も一般的なユースケースに対応しています。
- システム パッケージをユーザー 0 のみにプリインストールする場合:
<install-in-user-type package="com.android.example"> <install-in user-type="SYSTEM" /> </install-in-user-type>
- システム パッケージをすべての人間のユーザー(ウェブブラウザなど)にプリインストールする場合。つまり、すべての人間のユーザーに対応するタイプ
FULL
またはPROFILE
のユーザーにインストールする場合:<install-in-user-type package="com.android.example"> <install-in user-type="FULL" /> <install-in user-type="PROFILE" /> </install-in-user-type>
- システム パッケージを、プロファイル ユーザーを除くすべての人間のユーザーにプリインストールする場合。たとえば、こちらは壁紙アプリに適用できます。
<install-in-user-type package="com.android.example"> <install-in user-type="FULL" /> </install-in-user-type>
- 一部のシステム パッケージは、タイプに関係なくすべてのユーザーを対象としている必要があります。この場合は、以下を使用します。
<install-in-user-type package="com.android.example"> <install-in user-type="SYSTEM"> <install-in user-type="FULL" /> <install-in user-type="PROFILE" /> </install-in-user-type>
- また、個々のユーザータイプを指定することで、さらに詳細なオプションも使用できます。たとえば、次のサンプルコードは、ユーザータイプが管理対象プロファイルまたはゲストか、
SYSTEM
基本タイプのすべてのユーザーに、このパッケージをインストールします。<install-in-user-type package="com.android.example"> <install-in user-type="android.os.usertype.profile.MANAGED" /> <install-in user-type="android.os.usertype.full.GUEST" /> <install-in user-type="SYSTEM"> </install-in-user-type>
do-not-install-in タグ
また、do-not-install-in
タグを使用すると、特定のユーザータイプにパッケージをプリインストールしないようにすることもできます。すべてのファイルにおいて do-not-install-in
タグは install-in
タグよりも優先されます。次に例を示します。
<install-in-user-type package="com.android.example"> <install-in user-type="FULL" /> <do-not-install-in user-type="android.os.usertype.full.GUEST"/> </install-in-user-type>ユーザーがタイプ
android.os.usertype.full.GUEST
(FULL のサブタイプ)の場合、do-not-install-in
タグは install-in
より優先されるため、このパッケージはインストールされません。
config.xml による動作の制御
構成リソース値 config_userTypePackageWhitelistMode
は、この機能を制御し、どのユーザータイプにもエントリがないシステム パッケージをデバイスがどのように解釈するかを決定します。詳しくは frameworks/base/core/res/res/values/config.xml#config_userTypePackageWhitelistMode
をご覧ください。
frameworks/base/core/res/res/values/config.xml
で、config_userTypePackageWhitelistMode
という名前の整数を次の値の組み合わせに設定します。これらのフラグは組み合わせることができます。最も重要なフラグは次のとおりです。
値 | 説明 |
---|---|
0 (0b0000) |
無効にします。すべてのシステム パッケージをインストールします。 |
1 (0b0001) |
適用します。許可リストに含まれている場合にのみシステム パッケージをインストールします。 |
4 (0b0100) |
許可リストファイルに記載されていないパッケージを、暗黙的に許可リストに含まれているものとします。 |
8 (0b1000) |
許可リストファイルに記載されていないパッケージを、SYSTEM ユーザーの場合のみ、暗黙的に許可リストに含まれているものとします。 |
次の構成で、機能が有効になります(install-in
タグと do-not-install-in
タグは遵守されます)。ただし、記載されていないシステム パッケージは、すべてのユーザーについて install-in
のように扱われます。
<integer name="config_userTypePackageWhitelistMode">5</integer>