تغییرات رفتاری: برنامه‌هایی که Android 11 را هدف قرار می‌دهند

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

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

حریم خصوصی

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

  • اجرای فضای ذخیره‌سازی محدود: دسترسی به دایرکتوری‌های فضای ذخیره‌سازی خارجی به دایرکتوری مختص برنامه و انواع خاصی از رسانه‌هایی که برنامه ایجاد کرده است محدود می‌شود.
  • بازنشانی خودکار اجازه‌ها: اگر کاربران چند ماه با برنامه‌ای تعامل نداشته باشند، سیستم اجازه‌های حساس برنامه را به‌طور خودکار بازنشانی می‌کند.
  • دسترسی به مکان در پس‌زمینه: کاربران باید به تنظیمات سیستم هدایت شوند تا بتوانند اجازه مکان در پس‌زمینه را به برنامه‌ها اعطا کنند.
  • نمایان بودن بسته: وقتی برنامه‌ای فهرست برنامه‌های نصب‌شده در دستگاه را درخواست می‌کند، فهرست برگردانده‌شده فیلتر می‌شود.

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

امنیت

برچسب‌گذاری اشاره‌گر پشته

تغییر جزئیات

تغییر نام: NATIVE_HEAP_POINTER_TAGGING

شناسه تغییر: 135754954

نحوه جابه‌جایی

هنگام آزمایش سازگاری برنامه‌تان با Android 11، می‌توانید این تغییر را بااستفاده از فرمان‌های ADB زیر روشن یا خاموش کنید:

adb shell am compat enable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
adb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME

برای اطلاعات بیشتر درباره چارچوب همسازی و تغییرات ضامن، به آزمایش و اشکال‌زدایی تغییرات رفتار پلاتفرم در برنامه مراجعه کنید.

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

برای غیرفعال کردن این ویژگی، به سند مانیفست allowNativeHeapPointerTagging مراجعه کنید.

به‌روزرسانی‌های پیام‌های زودگذر

پیام‌های موقت سفارشی از پس‌زمینه مسدود شده‌اند

به‌دلایل امنیتی و برای حفظ تجربه کاربری خوب، سیستم پیام‌های موقتی را که حاوی نماهای سفارشی هستند مسدود می‌کند، اگر این پیام‌های موقت از پس‌زمینه توسط برنامه‌ای ارسال شده باشند که Android نسخه ۱۱ یا بالاتر را هدف قرار می‌دهد. توجه داشته باشید که اعلان‌های نوشتاری همچنان مجاز هستند؛ این‌ها اعلان‌هایی هستند که بااستفاده از Toast.makeText() ایجاد شده‌اند و setView() را فراخوانی نمی‌کنند.

اگر برنامه‌تان به‌هرحال تلاش کند از پس‌زمینه یک پیام موقت حاوی نمای سفارشی پست کند، سیستم پیام را به کاربر نشان نمی‌دهد. درعوض، سیستم پیام زیر را در logcat ثبت می‌کند:

W/NotificationService: Blocking custom toast from package \
  <package> due to package not in the foreground

پاسخ تماس‌های Toast

اگر می‌خواهید وقتی اعلان موقت (نوشتاری یا سفارشی) ظاهر یا ناپدید می‌شود مطلع شوید، از روش addCallback() استفاده کنید که در Android 11 اضافه شده است.

تغییرات میانای برنامه‌سازی کاربردی اعلان موقت نوشتاری

برنامه‌هایی که Android نسخه ۱۱ یا بالاتر را هدف قرار می‌دهند، عوارض جانبی زیر را برای پیام‌های موقت نوشتاری می‌بینند:

اتصال‌پذیری

دسترسی خواندن محدود به پایگاه داده APN

تغییر جزئیات

تغییر نام: APN_READING_PERMISSION_CHANGE_ID

شناسه تغییر: 124107808

نحوه جابه‌جایی

هنگام آزمایش سازگاری برنامه‌تان با Android 11، می‌توانید این تغییر را بااستفاده از فرمان‌های ADB زیر روشن یا خاموش کنید:

adb shell am compat enable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
adb shell am compat disable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME

برای اطلاعات بیشتر درباره چارچوب همسازی و تغییرات ضامن، به آزمایش و اشکال‌زدایی تغییرات رفتار پلاتفرم در برنامه مراجعه کنید.

برنامه‌هایی که Android 11 را هدف قرار می‌دهند اکنون برای خواندن یا دسترسی به پایگاه داده APN ارائه‌دهنده Telephony به اجازه ممتاز Manifest.permission.WRITE_APN_SETTINGS نیاز دارند. تلاش برای دسترسی به پایگاه داده APN بدون این اجازه، استثنای امنیتی ایجاد می‌کند.

دسترس‌پذیری

اعلام تعامل با موتورهای «تبدیل نوشتار به گفتار» در فایل مانیفست

به‌دلیل تغییرات در رؤیت‌پذیری بسته، برنامه‌هایی که Android 11 را هدف قرار می‌دهند و با موتور نوشتار به گفتار (TTS) تعامل دارند باید عنصر <queries> زیر را به فایل‌های مانیفست خود اضافه کنند:

<queries>
  <intent>
    <action
       android:name="android.intent.action.TTS_SERVICE" />
  </intent>
</queries>

اعلام استفاده از دکمه دسترس‌پذیری در فایل فراداده

تغییر جزئیات

تغییر نام: REQUEST_ACCESSIBILITY_BUTTON_CHANGE

شناسه تغییر: 136293963

نحوه جابه‌جایی

هنگام آزمایش سازگاری برنامه‌تان با Android 11، می‌توانید این تغییر را بااستفاده از فرمان‌های ADB زیر روشن یا خاموش کنید:

adb shell am compat enable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
adb shell am compat disable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME

برای اطلاعات بیشتر درباره چارچوب همسازی و تغییرات ضامن، به آزمایش و اشکال‌زدایی تغییرات رفتار پلاتفرم در برنامه مراجعه کنید.

از Android 11، سرویس دسترس‌پذیری شما نمی‌تواند اعلامیه زمان اجرا مبنی بر ارتباط با دکمه دسترس‌پذیری سیستم ارائه دهد. اگر AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON را به ویژگی flags شیء AccessibilityServiceInfo اضافه کنید، چارچوب رویدادهای فراخوانی دکمه دسترس‌پذیری را به سرویس شما ارسال نمی‌کند.

برای دریافت رویدادهای فراخوانی دسترس‌پذیری در سرویس دسترس‌پذیری، از فایل فراداده سرویس دسترس‌پذیری خود استفاده کنید تا ارتباط سرویس خود را با دکمه دسترس‌پذیری اعلام کنید. مقدار flagRequestAccessibilityButton را در تعریف مشخصه accessibilityFlags بگنجانید. مکان رایج برای فایل فراداده سرویس دسترس‌پذیری res/raw/accessibilityservice.xml است.

دوربین

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

از Android 11، فقط برنامه‌های دوربین سیستم ازپیش نصب‌شده می‌توانند به کنش‌های هدف زیر پاسخ دهند:

اگر بیش‌از یک برنامه دوربین سیستمی ازپیش نصب‌شده دردسترس باشد، سیستم کادر گفتگویی را برای کاربر نمایش می‌دهد تا برنامه‌ای را انتخاب کند. اگر می‌خواهید برنامه‌تان از برنامه دوربین شخص ثالث خاصی برای ضبط تصاویر یا ویدیوها ازطرف خود استفاده کند، می‌توانید با تنظیم نام بسته یا مؤلفه برای هدف، این اهداف را صریح کنید.

بسته‌بندی و نصب برنامه

فایل‌های منبع فشرده‌شده

تغییر جزئیات

تغییر نام: RESOURCES_ARSC_COMPRESSED

شناسه تغییر: 132742131

نحوه جابه‌جایی

هنگام آزمایش سازگاری برنامه‌تان با Android 11، می‌توانید این تغییر را بااستفاده از فرمان‌های ADB زیر روشن یا خاموش کنید:

adb shell am compat enable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
adb shell am compat disable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME

برای اطلاعات بیشتر درباره چارچوب همسازی و تغییرات ضامن، به آزمایش و اشکال‌زدایی تغییرات رفتار پلاتفرم در برنامه مراجعه کنید.

برنامه‌هایی که Android نسخه ۱۱ (سطح میانای برنامه‌سازی کاربردی ۳۰) یا بالاتر را هدف قرار می‌دهند، اگر حاوی فایل resources.arsc فشرده‌شده باشند یا اگر این فایل در مرز ۴ بایتی تراز نشده باشد، نمی‌توانند نصب شوند. اگر هرکدام از این شرایط وجود داشته باشد، سیستم نمی‌تواند این فایل را نگاشت حافظه کند. جدول‌های منابعی که نمی‌توانند نگاشت حافظه شوند باید در میان‌گیری در حافظه دسترسی تصادفی خوانده شوند، که منجر به فشار غیرضروری حافظه بر سیستم و افزایش بسیار زیاد استفاده از حافظه دسترسی تصادفی در دستگاه می‌شود.

اگر قبلاً از فایل resources.arsc فشرده‌شده استفاده می‌کردید، به‌جای آن از استراتژی‌های جایگزین استفاده کنید، مثلاً کوچک کردن منابع برنامه یا روش‌های دیگر برای کوچک کردن، مبهم‌سازی، و بهینه‌سازی برنامه.

اکنون «طرح امضای APK نسخه ۲» الزامی است

برنامه‌هایی که Android 11 (سطح میانای برنامه‌سازی کاربردی ۳۰) را هدف قرار می‌دهند و درحال‌حاضر فقط بااستفاده از «طرح امضای APK نسخه ۱» امضا شده‌اند، اکنون باید بااستفاده از طرح امضای APK نسخه ۲ یا بالاتر نیز امضا شوند. کاربران نمی‌توانند برنامه‌هایی را که فقط با APK Signature Scheme v1 امضا شده‌اند در دستگاه‌های دارای Android 11 نصب یا به‌روز کنند.

برای تأیید اینکه برنامه‌تان با «طرح امضای APK» نسخه ۲ یا بالاتر امضا شده است، می‌توانید از Android Studio، یا ابزار apksigner در خط فرمان استفاده کنید.

Firebase

Firebase JobDispatcher و GCMNetworkManager

اگر برنامه شما سطح میانای برنامه‌سازی کاربردی ۳۰ یا بالاتر را هدف قرار دهد، فراخوانی‌های میانای برنامه‌سازی کاربردی Firebase JobDispatcher و GcmNetworkManager در دستگاه‌های دارای Android نسخه ۶.۰ (سطح میانای برنامه‌سازی کاربردی ۲۳) یا بالاتر غیرفعال می‌شود. برای اطلاعات انتقال، به انتقال از Firebase JobDispatcher به WorkManager و انتقال از GCMNetworkManager به WorkManager مراجعه کنید.

تشخیص گفتار

به‌دلیل تغییرات در رؤیت‌پذیری بسته، برنامه‌هایی که Android 11 را هدف قرار می‌دهند و با سرویس تشخیص گفتار تعامل دارند باید عنصر <queries> زیر را به فایل‌های مانیفست خود اضافه کنند:

<queries>
  <intent>
    <action
       android:name="android.speech.RecognitionService" />
  </intent>
</queries>

تغییرات Callback برای OnSharedPreferenceChangeListener

تغییر جزئیات

تغییر نام: CALLBACK_ON_CLEAR_CHANGE

شناسه تغییر: 119147584

نحوه جابه‌جایی

هنگام آزمایش سازگاری برنامه‌تان با Android 11، می‌توانید این تغییر را بااستفاده از فرمان‌های ADB زیر روشن یا خاموش کنید:

adb shell am compat enable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
adb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME

برای اطلاعات بیشتر درباره چارچوب همسازی و تغییرات ضامن، به آزمایش و اشکال‌زدایی تغییرات رفتار پلاتفرم در برنامه مراجعه کنید.

برای برنامه‌هایی که Android 11 (سطح میانای برنامه‌سازی کاربردی ۳۰) را هدف قرار می‌دهند، هرگاه Editor.clear فراخوانده شود، اکنون یک فراخوانی برگشتی به OnSharedPreferenceChangeListener.onSharedPreferenceChanged با کلید null انجام می‌شود.

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

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

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

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

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