PermissionController

واحد Mainline مربوط به PermissionController حاوی خط‌مشی‌های رازداری و میانای کاربری مربوط به اعطای اجازه‌ها و مدیریت آن‌ها است (برای نمونه، خط‌مشی‌ها و میانای کاربری مربوط به اعطای اجازه‌ها و مدیریت آن‌ها).

درباره PermissionController

واحد PermissionController رابط کاربری، منطق، و نقش‌های مربوط به اجازه را مدیریت می‌کند تا دسترسی برنامه‌ها برای هدف خاصی را مجاز کند. این تنظیمات موارد زیر را کنترل می‌کند:

  • اعطای اجازه زمان اجرا (ازجمله اعطای اجازه به برنامه‌های سیستم)
  • مدیریت اجازه زمان اجرا (ازجمله گروه‌بندی اجازه‌ها)
  • پیگیری استفاده از اجازه زمان اجرا
  • نقش‌ها

از Android 12، کلاس‌های چارچوب و سرور سیستم برای Role به واحد منتقل می‌شوند تا Role کاملاً واحدی شود.

در Android 10، برنامه «نصب‌کننده بسته» به بخش‌هایی تقسیم شده است تا منطق اجازه‌ها به‌روزرسانی شود. به‌عنوان واحد Mainline به‌روزرسانی‌شدنی، PermissionController:

  • فقط ازطریق @SystemApi پایدار با چارچوب تعامل دارد (از @hide API استفاده نمی‌کند).
  • هدف‌های مربوط به اجازه را با اولویت > ۰ مدیریت می‌کند.
  • سازوکاری را برای فعال کردن «تولیدکنندگان تجهیزات اصلی» جهت سفارشی‌سازی زمینه‌ها آشکار می‌کند.
  • سرویس‌هایی را ارائه می‌دهد که سیستم و برنامه‌ها می‌توانند به آن‌ها متصل شوند، ازجمله مدیریت نقش، لغو اجازه، و اطلاعات پایه اجازه (برای «تنظیمات»).
  • از لغو خودکار برای برنامه‌های استفاده‌نشده پشتیبانی می‌کند (جدید در Android 11).

در Android 9، کنترل اجازه بخشی از com.android.packageinstaller است.

لغو خودکار برای برنامه‌های استفاده‌نشده

در Android 11، واحد PermissionsController می‌تواند اجازه‌های زمان اجرای برنامه‌هایی را که برای مدت طولانی استفاده نشده‌اند به‌طور خودکار لغو کند. برنامه‌هایی که کیت توسعه نرم‌افزار ۳۰ یا بالاتر را هدف‌یابی می‌کنند به‌طور پیش‌فرض دارای فعال بودن لغو خودکار هستند، درحالی‌که برنامه‌هایی که کیت توسعه نرم‌افزار ۲۹ یا پایین‌تر را هدف‌یابی می‌کنند به‌طور پیش‌فرض دارای غیرفعال بودن لغو خودکار هستند. وقتی فعال باشد، لغو خودکار بر همه اجازه‌های زمان اجرا تأثیر می‌گذارد اما همه اجازه‌های ازپیش اعطاشده، ازجمله اجازه‌های ثابت خط‌مشی و سیستم و اجازه‌های اعطاشده به‌طور پیش‌فرض یا براساس نقش را مستثنا می‌کند. برای جزئیات، به بازنشانی خودکار اجازه‌های برنامه‌های استفاده‌نشده مراجعه کنید.

قالب بسته

قالب واحد PermissionController در نسخه‌های مختلف متفاوت است.

  • در Android 11 یا بالاتر، واحد PermissionController در قالب APEX است و قابل به‌روزرسانی است. نام بسته com.google.android.permission است.

  • در Android 10، ماژول PermissionController در قالب APK است و قابل‌به‌روزرسانی نیست. نام بسته com.google.android.permissioncontroller است.

مرز واحد

در Android 12، کد واحد «اجازه» از packages/apps/PermissionController (پروژه platform/packages/apps/PackageInstaller) و frameworks/base/apex/permission (این یک زیرشاخه از پروژه frameworks/base است) منتقل می‌شود.

ساختار پروژه جدید برای packages/modules/Permission به‌صورت زیر است:

  • فایل‌ها از frameworks/base/apex/permission
  • فایل‌های PermissionController از packages/apps/PermissionController

تولیدکنندگان تجهیزات اصلی می‌توانند از فرمان‌های نمونه برای کمک به انتقال وصله‌های خود از دایرکتوری‌های پروژه اصلی به دایرکتوری پروژه جدید استفاده کنند.

انتقال وصله از frameworks/base/apex/permission

root/frameworks/base/$ git format-patch -1 --relative=apex/permission commit --stdout > patch-file.txt

root/packages/modules/Permission$ git am -p2 patch-file.txt

انتقال وصله از packages/apps/PermissionController

root/packages/apps/PermissionController$ git format-patch -1 commit --stdout > patch-file.txt

root/packages/modules/Permission$ git am -p2 --directory=PermissionController patch-file.txt

سفارشی‌سازی

سازندگان تجهیزات اصلی می‌توانند بااستفاده از رونهادهای منبع زمان اجرا (RROS)، زمینه واسط کاربر اجازه‌ها (رنگ‌ها، حاشیه‌ها، قلم‌ها، و موارد قابل‌رسم) را سفارشی‌سازی کنند.