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

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

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

حریم خصوصی

اندروید 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 را تغییر می‌دهند، اکنون می‌توانند خراب شوند یا مشکلات دیگری را تجربه کنند. این تغییر برای پشتیبانی از سخت‌افزار آینده با فعال کردن افزونه برچسب‌گذاری حافظه ARM (MTE) ضروری است. برای کسب اطلاعات بیشتر، به نشانگرهای برچسب‌گذاری شده مراجعه کنید.

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

به روز رسانی نان تست

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

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

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

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

پاسخ تماس نان تست

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

Text toast API تغییر می کند

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

قابلیت اتصال

دسترسی خواندن به پایگاه داده 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 را هدف قرار می‌دهند اکنون به مجوز ممتاز Manifest.permission.WRITE_APN_SETTINGS برای خواندن یا دسترسی به پایگاه داده APN ارائه‌دهنده تلفن نیاز دارند. تلاش برای دسترسی به پایگاه داده APN بدون این مجوز یک استثنا امنیتی ایجاد می کند.

دسترسی

تعامل با موتورهای TTS را در فایل مانیفست اعلام کنید

به دلیل تغییرات در نمایان بودن بسته ، برنامه‌هایی که 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 11 (سطح API 30) یا بالاتر را هدف قرار می‌دهند، نمی‌توانند نصب شوند، اگر حاوی فایل resources.arsc فشرده‌شده .arsc باشند یا اگر این فایل در یک مرز 4 بایتی تراز نباشد. اگر یکی از این شرایط وجود داشته باشد، این فایل نمی تواند توسط سیستم نگاشت حافظه شود. جداول منابعی که نمی توان آنها را با حافظه ترسیم کرد باید در یک بافر در RAM خوانده شوند، که منجر به فشار غیرضروری حافظه بر روی سیستم و افزایش شدید استفاده از RAM در دستگاه می شود.

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

APK Signature Scheme v2 اکنون مورد نیاز است

برنامه‌هایی که Android 11 (سطح API 30) را هدف قرار می‌دهند و در حال حاضر فقط با استفاده از APK Signature Scheme v1 امضا شده‌اند، اکنون باید با استفاده از APK Signature Scheme نسخه 2 یا بالاتر امضا شوند. کاربران نمی‌توانند برنامه‌هایی را که فقط با APK Signature Scheme v1 امضا شده‌اند، در دستگاه‌هایی که Android 11 دارند نصب یا به‌روزرسانی کنند.

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

Firebase

Firebase JobDispatcher و GCMNetworkManager

اگر برنامه شما سطح API 30 یا بالاتر را هدف قرار می‌دهد، تماس‌های Firebase JobDispatcher و GcmNetworkManager API در دستگاه‌های دارای Android نسخه 6.0 (سطح API 23) یا بالاتر غیرفعال می‌شوند. برای اطلاعات مهاجرت، مهاجرت از Firebase JobDispatcher به WorkManager و مهاجرت از GCMNetworkManager به WorkManager را ببینید.

تشخیص گفتار

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

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

تغییرات پاسخ به تماس برای 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 (سطح API 30) را هدف قرار می‌دهند، هر زمان که Editor.clear فراخوانی شود، اکنون با یک کلید null به OnSharedPreferenceChangeListener.onSharedPreferenceChanged پاسخ تماس داده می‌شود.

محدودیت های رابط غیر SDK

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

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

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

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