2025 年 3 月 27 日より、AOSP のビルドとコントリビューションには aosp-main
ではなく android-latest-release
を使用することをおすすめします。詳細については、AOSP の変更をご覧ください。
カスタム ユーザータイプの実装
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
Android 11 では、明確に定義されたユーザータイプという概念が導入されました。これらは、Android マルチユーザー機能で許可されるあらゆるタイプのユーザーを表します。この機能を使用して、OEM は事前定義された AOSP ユーザータイプをカスタマイズし、新しいプロファイル タイプを定義できます。詳しくは、ユーザータイプに関するセクションをご覧ください。
このページでは、ユーザータイプのカスタマイズに必要な実装ガイドラインについて詳しく説明します。
カスタマイズ
OEM が AOSP ユーザータイプをカスタマイズして新しいプロファイル タイプを定義するには、目的とするカスタマイズで config_user_types.xml
をオーバーレイする必要があります。config_user_types.xml
ファイルには、リファレンス実装と、設定可能な属性の包括的なリストが含まれています。
config_user_types.xml
ファイルで指定されるすべての属性(default-restrictions
など)は、AOSP のデフォルトを上書きします。指定されないすべての属性は AOSP のデフォルトに従います。ほとんどの属性(プロファイル タイプのバッジ属性など)の変更は、そのユーザータイプの既存のユーザーに影響します。ただし、default-restrictions
はユーザー作成時にのみ適用されるため、OTA で config_user_types.xml
ファイルが変更された場合、この属性を変更しても既存のユーザーには影響しません。同様に、最大ユーザー数の指定は新規ユーザーの作成時にのみ適用され、既存のユーザーが削除されることはありません。
ユーザータイプごとのカスタマイズに関する現在の制限は次のとおりです。
- プロファイル全体をカスタマイズおよび定義できます。この場合、Android でカスタム プロファイルをサポートするために必要なプラットフォームの変更は、OEM が行います。AOSP は、事前定義された AOSP ユーザータイプのみをサポートします。
- フルユーザーは定義できません。カスタマイズできるのは
default-restrictions
属性のみです。
- このメカニズムを使用してシステム ユーザーをカスタマイズすることはできません。この場合は、
com.android.internal.R.array.config_defaultFirstUserRestrictions
を使用して default-restrictions
を設定できます。詳しくは、config.xml
をご覧ください。
既存のユーザータイプを変更する
次のコードサンプルのとおり、既存のユーザータイプをカスタマイズするには、属性をオーバーライドします。
<user-types version="0">
<full-type name="android.os.usertype.full.SECONDARY" >
<default-restrictions no_sms="true" />
</full-type>
<profile-type
name='android.os.usertype.profile.MANAGED'
max-allowed-per-parent='2'
icon-badge='@android:drawable/ic_corp_icon_badge_case'
badge-plain='@android:drawable/ic_corp_badge_case'
badge-no-background='@android:drawable/ic_corp_badge_no_background' >
<badge-labels>
<item res='@android:string/managed_profile_label_badge' />
<item res='@android:string/managed_profile_label_badge_2' />
</badge-labels>
<badge-colors>
<item res='@android:color/profile_badge_1' />
<item res='@android:color/profile_badge_2' />
</badge-colors>
<default-restrictions no_sms="true" no_outgoing_calls="true" />
</profile-type>
</user-types>
このコードサンプルでは、サポートされているプロパティを変更することにより、以下の AOSP ユーザータイプをカスタマイズしています。
これらのプロパティの意味とデフォルト値については、UserTypeFactory.java
と UserTypeDetails.java
をご覧ください。
カスタム プロファイル タイプを定義する
次のコードサンプルは、新しいカスタム プロファイル タイプを定義する方法を示しています。
<user-types version="1">
<profile-type
name="com.example.profilename"
max-allowed-per-parent="2" />
<change-user-type
from="android.os.usertype.profile.MANAGED"
to="com.example.profilename"
whenVersionLeq="1" />
</user-types>
このコードサンプルでは、com.example.profilename
プロファイル タイプは次のように定義されています。
max-allowed-per-parents
が 2
に設定され、親ユーザーごとに 2 つのプロファイルが許可されています。
change-user-type
: OTA でデバイスを user-type
バージョン <= 1
からアップグレードする際に、タイプ android.os.usertype.profile.MANAGED
のすべての既存の管理対象プロファイルを新しい com.example.profilename
タイプに変換します。
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2025-03-26 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2025-03-26 UTC。"],[],[],null,["Android 11 has introduced the concept of well-defined\nuser types, representing all the different types of users allowed by the\nAndroid Multi-user feature. With this feature, OEMs can customize predefined\nAOSP user types and define new profile types. See the section on\n[user types](/docs/devices/admin/multi-user#user_types) for more information.\n\nThis page details the implementation guidelines needed to customize user types.\n\nCustomization\n\nIn order to customize AOSP user types and to define new profile types, the OEM\nmust overlay\n[`config_user_types.xml`](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/core/res/res/xml/config_user_types.xml?q=config_user_types.xml)\nwith the preferred customizations. The `config_user_types.xml` file\ncontains a reference implementation and a comprehensive list of configurable\nattributes.\n\nAny attribute, such as `default-restrictions`, that is specified in the\n`config_user_types.xml` file, overwrites the AOSP default. Any attribute that is\nnot specified, obeys the AOSP default. Changing most attributes, such as a\nprofile type's badge attributes, affects pre-existing users of that user type.\nHowever, because `default-restrictions` are only applied at the time a user is\ncreated, modifying this particular attribute, in the event the\n`config_user_types.xml` file is changed by OTA, has no effect on pre-existing\nusers. Similarly, specifying the maximum number of users only applies when\ncreating new users; existing users aren't removed.\n\nCurrent customization restrictions for each user type are as follows:\n\n- Profiles can be fully customized and defined. In this case, the OEM is responsible for making platform modifications as required for their custom profile to be supported in Android, since AOSP only supports the predefined AOSP user-types.\n- Full users cannot be defined and only their `default-restrictions` attribute can be customized.\n- The system user cannot be customized using this mechanism. In this case, `default-restrictions` can be set using `com.android.internal.R.array.config_defaultFirstUserRestrictions`. See [`config.xml`](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/core/res/res/values/config.xml?q=config_defaultFirstUserRestrictions) for more information.\n\nModify existing user types\n\nExisting user types can be customized by overriding their attributes as shown\nin the following code sample: \n\n \u003cuser-types version=\"0\"\u003e\n \u003cfull-type name=\"android.os.usertype.full.SECONDARY\" \u003e\n \u003cdefault-restrictions no_sms=\"true\" /\u003e\n \u003c/full-type\u003e\n\n \u003cprofile-type\n name='android.os.usertype.profile.MANAGED'\n max-allowed-per-parent='2'\n icon-badge='@android:drawable/ic_corp_icon_badge_case'\n badge-plain='@android:drawable/ic_corp_badge_case'\n badge-no-background='@android:drawable/ic_corp_badge_no_background' \u003e\n \u003cbadge-labels\u003e\n \u003citem res='@android:string/managed_profile_label_badge' /\u003e\n \u003citem res='@android:string/managed_profile_label_badge_2' /\u003e\n \u003c/badge-labels\u003e\n \u003cbadge-colors\u003e\n \u003citem res='@android:color/profile_badge_1' /\u003e\n \u003citem res='@android:color/profile_badge_2' /\u003e\n \u003c/badge-colors\u003e\n \u003cdefault-restrictions no_sms=\"true\" no_outgoing_calls=\"true\" /\u003e\n \u003c/profile-type\u003e\n \u003c/user-types\u003e\n\nIn this code sample, the following AOSP user types are customized by modifying\nthe supported properties:\n\n- Full user `android.os.usertype.full.SECONDARY`:\n\n - The default restriction of `no_sms` is set to true by specifying `default-restrictions no_sms=\"true\"`.\n- Profile user `android.os.usertype.profile.MANAGED`:\n\n - Two profiles are allowed for each parent user by setting `max-allowed-per-parent='2'`.\n - Badge attributes are set to chosen values using `icon-badge`, `badge-plain`, `badge-no-background`, `badge-labels`, `badge-colors`.\n - The default restrictions of `no_sms` and `no_outgoing_calls` are set to true by specifying `default-restrictions no_sms=\"true\" no_outgoing_calls=\"true\"`.\n\nRefer to [`UserTypeFactory.java`](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java;drc=2b4306a8ecd64f6e03498104f314600f9cc7507c;l=77) and [`UserTypeDetails.java`](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/services/core/java/com/android/server/pm/UserTypeDetails.java;drc=78a66d6c36451d8c91b2473e3b4ac8bafbd79b41;l=59)\nfor the meaning and default values of these properties.\n\nDefine custom profile types\n\nThe following code sample shows how new, custom profile types are defined: \n\n \u003cuser-types version=&qu\u003eot;1&\u003cquot;\n profile-type\n name=\"com.example.profilename\"\n max-allo\u003ewed-pe\u003cr-parent=\"2\" /\n\n change-user-type\n from=\"android.os.usertype.profile.MANAGED\"\n to=\"com.exam\u003ep\u003cle.profilen\u003eame\"\n whenVersionLeq=\"1\" /\n /user-types\n\nIn this code sample, the `com.example.profilename` profile type is\ndefined as follows:\n\n- `max-allowed-per-parents` is set to `2` for two profiles per parent user.\n\n- `change-user-type`: converts *all* existing managed profiles of the type\n `android.os.usertype.profile.MANAGED` to the new `com.example.profilename`\n type when upgrading the device from a `user-type` version of `\u003c= 1`\n through OTA."]]