ตั้งแต่วันที่ 27 มีนาคม 2025 เป็นต้นไป เราขอแนะนำให้ใช้ android-latest-release
แทน aosp-main
เพื่อสร้างและมีส่วนร่วมใน AOSP โปรดดูข้อมูลเพิ่มเติมที่หัวข้อการเปลี่ยนแปลงใน AOSP
ใช้ประเภทผู้ใช้ที่กําหนดเอง
จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน
บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ
Android 11 ได้เปิดตัวแนวคิดประเภทผู้ใช้ที่ระบุไว้อย่างชัดเจน ซึ่งแสดงถึงผู้ใช้ประเภทต่างๆ ทั้งหมดที่ฟีเจอร์ผู้ใช้หลายคนของ Android อนุญาต ฟีเจอร์นี้ช่วยให้ OEM ปรับแต่งประเภทผู้ใช้ AOSP ที่กําหนดไว้ล่วงหน้าและกำหนดประเภทโปรไฟล์ใหม่ได้ ดูข้อมูลเพิ่มเติมได้ที่ส่วนประเภทผู้ใช้
หน้านี้แสดงรายละเอียดหลักเกณฑ์การใช้งานที่จําเป็นในการปรับแต่งประเภทผู้ใช้
การปรับแต่ง
หากต้องการปรับแต่งประเภทผู้ใช้ AOSP และกำหนดประเภทโปรไฟล์ใหม่ OEM ต้องวางซ้อน config_user_types.xml
กับการปรับเปลี่ยนที่ต้องการ ไฟล์ config_user_types.xml
ประกอบด้วยการใช้งานอ้างอิงและรายการแอตทริบิวต์ที่กำหนดค่าได้อย่างครอบคลุม
แอตทริบิวต์ใดก็ตาม เช่น default-restrictions
ที่ระบุไว้ในไฟล์ config_user_types.xml
จะเขียนทับค่าเริ่มต้นของ AOSP แอตทริบิวต์ที่ไม่ได้ระบุจะเป็นไปตามค่าเริ่มต้นของ AOSP การเปลี่ยนแปลงแอตทริบิวต์ส่วนใหญ่ เช่น แอตทริบิวต์ป้ายของประเภทโปรไฟล์ จะส่งผลต่อผู้ใช้ประเภทนั้นๆ ที่มีอยู่เดิม
อย่างไรก็ตาม เนื่องจาก default-restrictions
จะมีผลเฉพาะตอนที่สร้างผู้ใช้เท่านั้น การแก้ไขแอตทริบิวต์นี้ในกรณีที่ OTA เปลี่ยนแปลงไฟล์ config_user_types.xml
จะไม่มีผลกับผู้ใช้ที่มีอยู่ก่อนหน้านี้ ในทํานองเดียวกัน การระบุจํานวนผู้ใช้สูงสุดจะมีผลเฉพาะเมื่อสร้างผู้ใช้ใหม่เท่านั้น ระบบจะไม่นําผู้ใช้ที่มีอยู่ออก
ข้อจำกัดการปรับแต่งปัจจุบันสำหรับผู้ใช้แต่ละประเภทมีดังนี้
- โปรไฟล์สามารถกําหนดและปรับแต่งได้อย่างเต็มที่ ในกรณีนี้ OEM จะมีหน้าที่รับผิดชอบในการแก้ไขแพลตฟอร์มตามที่จําเป็นเพื่อให้ Android รองรับโปรไฟล์ที่กําหนดเอง เนื่องจาก AOSP รองรับเฉพาะประเภทผู้ใช้ AOSP ที่กําหนดไว้ล่วงหน้าเท่านั้น
- ไม่สามารถกําหนดผู้ใช้แบบเต็มได้ และปรับแต่งได้เฉพาะแอตทริบิวต์
default-restrictions
เท่านั้น
- ผู้ใช้ระบบไม่สามารถปรับแต่งโดยใช้กลไกนี้ได้ ในกรณีนี้ คุณสามารถตั้งค่า
default-restrictions
โดยใช้ com.android.internal.R.array.config_defaultFirstUserRestrictions
ดูข้อมูลเพิ่มเติมได้ที่
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=&qu>ot;1&<quot;
profile-type
name="com.example.profilename"
max-allo>wed-pe<r-parent="2" /
change-user-type
from="android.os.usertype.profile.MANAGED"
to="com.exam>p<le.profilen>a
me"
whenVersionLeq="1" /
/user-types
ในตัวอย่างโค้ดนี้ ประเภทโปรไฟล์ com.example.profilename
ได้รับการกําหนดดังนี้
max-allowed-per-parents
มีการตั้งค่าเป็น 2
สำหรับโปรไฟล์ 2 รายการต่อผู้ใช้หลัก 1 ราย
change-user-type
: แปลงโปรไฟล์ที่มีการจัดการทั้งหมดที่มีอยู่ของประเภท android.os.usertype.profile.MANAGED
เป็นประเภท com.example.profilename
ใหม่เมื่ออัปเกรดอุปกรณ์จาก <= 1
เวอร์ชัน user-type
ผ่าน OTA
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2025-08-30 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-08-30 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."]]