تغییرات رفتار: همه برنامه‌ها

پلاتفرم Android 11 شامل تغییرات رفتاری است که ممکن است برنامه شما را تحت‌تأثیر قرار دهد. تغییرات رفتاری زیر برای همه برنامه‌ها هنگام اجرا در Android 11، صرف‌نظر از targetSdkVersion، اعمال می‌شود. باید برنامه‌تان را آزمایش کنید و سپس درصورت لزوم آن را اصلاح کنید تا به‌درستی از این موارد پشتیبانی کند.

حتماً فهرست تغییرات رفتاری را که فقط بر برنامه‌هایی که Android 11 را هدف قرار می‌دهند تأثیر می‌گذارد مرور کنید.

حریم خصوصی

Android 11 تغییرات و محدودیت‌هایی را برای بهبود حریم خصوصی کاربر معرفی می‌کند، ازجمله:

  • اجازه‌های یک‌باره: به کاربران گزینه اعطای دسترسی موقت بیشتر به اجازه‌های مکان، میکروفون، و دوربین را می‌دهد.
  • نمایان بودن کادر گفتگوی اجازه: رد کردن مکرر اجازه به‌معنای «دیگر نپرسیدن» است.
  • ممیزی دسترسی به داده‌ها: اطلاعات آماری درباره جاهایی که برنامه‌تان به داده‌های خصوصی دسترسی دارد، هم در کد خود برنامه و هم در کد کتابخانه‌های وابسته، به‌دست آورید.
  • اجازه‌های پنجره هشدار سیستم: به کلاس‌های خاصی از برنامه‌ها به‌طور خودکار اجازه SYSTEM_ALERT_WINDOW پس‌از درخواست اعطا می‌شود. همچنین، هدف‌هایی که شامل کنش هدف ACTION_MANAGE_OVERLAY_PERMISSION هستند همیشه کاربران را به صفحه‌ای در تنظیمات سیستم هدایت می‌کنند.
  • شناسه‌های دائمی سیم‌کارت: در Android نسخه ۱۱ و بالاتر، دسترسی به ICCID غیرقابل‌بازنشانی ازطریق روش getIccId() محدود شده است. این روش یک رشته خالی غیرتهی برمی‌گرداند. برای شناسایی منحصربه‌فرد سیم‌کارت نصب‌شده در دستگاه، به‌جای آن از روش getSubscriptionId() استفاده کنید. «شناسه اشتراک» مقدار شاخصی (شروع از ۱) برای شناسایی منحصربه‌فرد سیم‌کارت‌های نصب‌شده، ازجمله فیزیکی و الکترونیکی، ارائه می‌دهد. مقدار این شناسه برای سیم‌کارت مشخصی ثابت است، مگراینکه دستگاه بازنشانی کارخانه‌ای شود.

برای کسب اطلاعات بیشتر، به صفحه حریم خصوصی مراجعه کنید.

اعلان تماس‌های پرخطر

Android 11 پلاتفرم را با درنظر گرفتن سامانه اعلان تماس‌های پرخطر به‌روز می‌کند. اکنون کاربران می‌توانند برنامه‌های «اعلان تماس‌های پرخطر» را در Android 11 بدون نیاز به روشن کردن تنظیم مکان دستگاه اجرا کنند. این استثنا فقط برای «سامانه اعلان تماس‌های پرخطر» است، زیرا این سامانه به‌گونه‌ای طراحی شده است که برنامه‌هایی که از آن استفاده می‌کنند نمی‌توانند مکان دستگاه را ازطریق اسکن دستگاه‌های بلوتوث استنباط کنند.

برای محافظت از حریم خصوصی کاربر، همه برنامه‌های دیگر همچنان از اسکن دستگاه‌های بلوتوث منع می‌شوند، مگراینکه تنظیم مکان دستگاه روشن باشد و کاربر به آن‌ها اجازه مکان داده باشد. می‌توانید در پست به‌روزرسانی درباره «اعلان‌های مواجهه» ما اطلاعات بیشتری کسب کنید.

امنیت

سوکت‌های SSL به‌طور پیش‌فرض از موتور Conscrypt SSL استفاده می‌کنند

پیاده‌سازی پیش‌فرض SSLSocket در Android براساس Conscrypt است. از Android نسخه ۱۱، آن پیاده‌سازی به‌طور داخلی روی SSLEngine Conscrypt ساخته شده است.

تخصیص‌دهنده مقاوم‌شده Scudo

Android 11 از Scudo Hardened Allocator به‌طور داخلی برای تخصیص‌های پشته سرویس استفاده می‌کند. Scudo قادر به شناسایی و کاهش برخی‌از انواع نقض‌های ایمنی حافظه است. اگر خرابی‌های مربوط به Scudo را در گزارش‌های خرابی بومی می‌بینید (برای مثال، Scudo ERROR:)، به سند عیب‌یابی Scudo مراجعه کنید.

آمار مصرف برنامه

برای محافظت بهتر از کاربران، Android 11 آمار استفاده از برنامه هر کاربر را در فضای ذخیره‌سازی رمزگذاری‌شده با اطلاعات اعتباری ذخیره می‌کند. بنابراین، نه سیستم و نه هیچ برنامه‌ای نمی‌تواند به آن داده‌ها دسترسی داشته باشد، مگراینکه isUserUnlocked() true را برگرداند، که پس‌از رخ دادن یکی از موارد زیر اتفاق می‌افتد:

  • کاربر برای اولین‌بار پس‌از راه‌اندازی سیستم، قفل دستگاهش را باز می‌کند.
  • کاربر به حساب خود در دستگاه می‌رود.

اگر برنامه‌تان ازقبل به نمونه‌ای از UsageStatsManager متصل است، بررسی کنید که پس‌از باز کردن قفل دستگاه توسط کاربر، روش‌ها را در این شیء فراخوانی کنید. درغیراین‌صورت، میانای برنامه‌سازی کاربردی اکنون مقادیر تهی یا خالی برمی‌گرداند.

پشتیبانی شبیه‌ساز از 5G

Android 11 میاناهای برنامه‌سازی کاربردی 5G را اضافه می‌کند تا برنامه‌هایتان بتوانند ویژگی‌های پیشرفته اضافه کنند. برای آزمایش ویژگی‌ها هنگام افزودن آن‌ها، می‌توانید از قابلیت‌های جدید شبیه‌ساز کیت توسعه نرم‌افزار Android استفاده کنید. عملکرد جدید در نسخه ۳۰.۰.۲۲ «شبیه‌ساز» اضافه شده است. با انتخاب تنظیمات شبکه 5G، TelephonyDisplayInfo روی OVERRIDE_NETWORK_TYPE_NR_NSA تنظیم می‌شود، پهنای باند تخمینی اصلاح می‌شود، و می‌توانید محدودیت مصرف را تنظیم کنید تا مطمئن شوید برنامه‌تان به‌درستی به تغییرات وضعیت NET_CAPABILITY_TEMPORARILY_NOT_METERED پاسخ می‌دهد.

عملکرد و اشکال‌زدایی

اشکال‌زدایی محدودیت‌های فراخوانی JobScheduler API

Android 11 پشتیبانی اشکال‌زدایی را برای برنامه‌ها ارائه می‌دهد تا فراخوانی‌های احتمالی میانای برنامه‌سازی کاربردی JobScheduler را که از محدودیت‌های نرخ خاصی فراتر رفته‌اند شناسایی کنند. توسعه‌دهندگان می‌توانند از این امکان برای شناسایی مشکلات عملکردی احتمالی استفاده کنند. برای برنامه‌هایی که مشخصه مانیفست debuggable آن‌ها روی «درست» تنظیم شده است، JobScheduler فراخوانی‌های API فراتر از حد سرعت RESULT_FAILURE را برمی‌گرداند. محدودیت‌ها به‌گونه‌ای تنظیم شده‌اند که موارد استفاده قانونی تحت تأثیر قرار نگیرند.

پاک‌کننده توصیف‌گر فایل (fdsan)

Android 10‏ fdsan (پاک‌کننده توصیف‌گر فایل) را معرفی کرد. fdsan سوءاستفاده از مالکیت توصیف‌گر فایل را شناسایی می‌کند، مانند استفاده پس‌از بستن و بستن مضاعف. حالت پیش‌فرض برای fdsan در Android 11 درحال تغییر است. fdsan اکنون پس‌از شناسایی خطا لغو می‌شود؛ رفتار قبلی ثبت هشدار و ادامه دادن بود. اگر به‌دلیل fdsan در برنامه‌تان با خرابی مواجه می‌شوید، به fdsan documentation مراجعه کنید.

محدودیت‌های میانای غیرکیت توسعه نرم‌افزار

‫Android 11 شامل فهرست‌های به‌روزشده‌ای از میاناهای غیر SDK محدودشده است که براساس همکاری با توسعه‌دهندگان Android و جدیدترین آزمایش‌های داخلی تهیه شده‌اند. هرزمان ممکن باشد، پیش‌از محدود کردن میاناهای غیرکیت توسعه نرم‌افزار، مطمئن می‌شویم که جایگزین‌های عمومی دردسترس باشند.

اگر برنامه شما Android 11 را هدف قرار نمی‌دهد، برخی‌از این تغییرات ممکن است فوراً بر شما تأثیر نگذارد. بااین‌حال، اگرچه درحال‌حاضر می‌توانید از برخی میاناهای غیرکیت توسعه نرم‌افزار استفاده کنید (بسته به سطح میانای برنامه‌سازی کاربردی هدف برنامه‌تان)، استفاده از هر روش یا فیلد غیرکیت توسعه نرم‌افزار همیشه خطر بالایی برای ازکار افتادن برنامه‌تان دارد.

اگر مطمئن نیستید که برنامه‌تان از میاناهای غیرکیت توسعه نرم‌افزار استفاده می‌کند یا نه، می‌توانید برنامه‌تان را آزمایش کنید تا متوجه شوید. اگر برنامه‌تان به میاناهای غیر SDK متکی است، باید برنامه‌ریزی برای انتقال به جایگزین‌های SDK را شروع کنید. بااین‌حال، می‌دانیم که برخی‌از برنامه‌ها موارد استفاده معتبری برای استفاده از میاناهای غیرکیت توسعه نرم‌افزار دارند. اگر نمی‌توانید جایگزینی برای استفاده از میانای غیرکیت توسعه نرم‌افزار برای ویژگی‌ای در برنامه‌تان پیدا کنید، باید درخواست میانای برنامه‌سازی کاربردی عمومی جدیدی بدهید.

برای کسب اطلاعات بیشتر درباره تغییرات این نسخه از Android، به به‌روزرسانی‌های محدودیت‌های میانای غیرکیت توسعه نرم‌افزار در Android 11 مراجعه کنید. برای کسب اطلاعات بیشتر درباره میاناهای غیرکیت توسعه نرم‌افزار به‌طور کلی، به محدودیت‌های میاناهای غیرکیت توسعه نرم‌افزار مراجعه کنید.

کتابخانه مشترک Maps v1 برداشته شد

نسخه ۱ کتابخانه مشترک Maps به‌طور کامل در Android 11 برداشته شده است. این کتابخانه قبلاً منسوخ شده بود و عملکرد آن برای برنامه‌ها در Android 10 متوقف شده بود. برنامه‌هایی که قبلاً برای دستگاه‌های دارای Android 9 (سطح API‏ ۲۸) یا پایین‌تر به این کتابخانه مشترک متکی بودند، باید به‌جای آن از کیت توسعه نرم‌افزار Maps ویژه Android استفاده کنند.

تعامل با برنامه‌های دیگر

هم‌رسانی کردن شناسه منبع یکسان محتوا

اگر برنامه‌تان شناسه منبع یکسان محتوا را با برنامه دیگری هم‌رسانی می‌کند، هدف باید با تنظیم حداقل یکی از پرچم‌های هدف زیر، اجازه‌های دسترسی به شناسه منبع یکسان را اعطا کند: FLAG_GRANT_READ_URI_PERMISSION و FLAG_GRANT_WRITE_URI_PERMISSION. به این ترتیب، اگر برنامه دیگر Android 11 را هدف قرار دهد، همچنان می‌تواند به شناسه منبع یکسان محتوا دسترسی داشته باشد. برنامه شما باید پرچم‌های هدف را دربرداشته باشد، حتی وقتی شناسه منبع یکسان محتوا با ارائه‌دهنده محتوایی مرتبط باشد که برنامه شما مالک آن نیست.

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

درحال بار کردن کتابخانه

درحال بار کردن کتابخانه مشترک ICU با مسیر مطلق

برنامه‌هایی که API 28 و پایین‌تر را هدف قرار می‌دهند نمی‌توانند از dlopen(3) برای بار کردن libicuuc با مسیر مطلق «system/lib/libicuuc.so/» استفاده کنند. برای این برنامه‌ها، dlopen("/system/lib/libicuuc.so", ...) دسته تهی برمی‌گرداند.

درعوض، برای بار کردن کتابخانه، لطفاً از نام کتابخانه به‌عنوان نام فایل استفاده کنید، برای مثال dlopen("libicuuc.so", ...).