اندروید از داشتن چندین کاربر در یک دستگاه پشتیبانی می کند. برای کسب اطلاعات بیشتر، به پشتیبانی از چند کاربر مراجعه کنید. از آنجایی که همه بستههای سیستم برای همه انواع کاربران اندروید مفید نیستند، میتوانید از یک لیست مجاز برای تعیین بستههای سیستمی که باید روی هر نوع کاربر از قبل نصب شده باشد استفاده کنید. با از قبل نصب نکردن بستههای غیرضروری سیستم، میتوانید زمان ایجاد کاربر، زمان شروع و استفاده از حافظه را بهینه کنید.
از فایلهای XML پیکربندی سیستم، مدلسازیشده بر اساس frameworks/base/data/etc/preinstalled-packages-platform.xml
استفاده کنید تا مشخص کنید که بستههای سیستمی باید در ابتدا برای کاربران جدید بر اساس نوع کاربریشان نصب شوند. همه بستههای سیستمی روی دستگاه در حالت ایدهآل باید یک ورودی در یک فایل XML (کلید شده با نام مانیفست آن) داشته باشند، بهجز همپوشانیهای استاتیک، که در عوض بهطور خودکار با توجه به ورودی بسته هدف همپوشانی مربوطهشان برخورد میشود. روشی که دستگاه باید با بستههای سیستمی که در اینجا فهرست نشدهاند مدیریت کند، توسط حالت پیکربندی کنترل میشود.
انواع کاربر
انواع کاربر پایه (هر کاربر حداقل یکی از این انواع است) عبارتند از:
نوع کاربر | توضیحات |
---|---|
SYSTEM | کاربر 0. |
FULL | هر کاربر انسانی غیر پروفایلی. |
PROFILE | یک کاربر انسانی پروفایل |
معنای دقیق هر کدام در frameworks/base/core/java/android/content/pm/UserInfo.java
تعریف شده است.
با تعیین انواع کاربر می توان کنترل دقیق تری را به دست آورد زیرا هر کاربر دقیقاً یکی از این نوع کاربران است که شامل انواع کاربر AOSP تعریف شده در frameworks/base/core/java/android/os/UserManager.java
و هر کاربر سفارشی OEM می شود. انواع تعریف شده در frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java.
برای اطلاعات بیشتر به صفحه انواع کاربر مراجعه کنید. در حال حاضر، انواع کاربران 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
برچسبهای 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>