مانند نسخههای قبلی، اندروید ۱۱ شامل تغییرات رفتاری است که ممکن است بر برنامه شما تأثیر بگذارد. تغییرات رفتاری زیر منحصراً برای برنامههایی اعمال میشود که اندروید ۱۱ یا بالاتر را هدف قرار میدهند. اگر برنامه شما targetSdkVersion روی 30 تنظیم کرده باشد، باید برنامه خود را اصلاح کنید تا در صورت لزوم، از این رفتارها به درستی پشتیبانی کند.
حتماً فهرست تغییرات رفتاری که بر همه برنامههای در حال اجرا در اندروید ۱۱ تأثیر میگذارند را نیز بررسی کنید.
حریم خصوصی
اندروید ۱۱ تغییرات و محدودیتهایی را برای افزایش حریم خصوصی کاربران معرفی میکند، از جمله موارد زیر:
- اعمال محدودیت در ذخیرهسازی : دسترسی به دایرکتوریهای ذخیرهسازی خارجی محدود به یک دایرکتوری خاص برنامه و انواع خاصی از رسانههایی است که برنامه ایجاد کرده است.
- بازنشانی خودکار مجوزها : اگر کاربران برای چند ماه با یک برنامه تعامل نداشته باشند، سیستم مجوزهای حساس برنامه را به طور خودکار بازنشانی میکند.
- دسترسی به موقعیت مکانی در پسزمینه : کاربران باید به تنظیمات سیستم هدایت شوند تا بتوانند مجوز موقعیت مکانی در پسزمینه را به برنامهها اعطا کنند.
- قابلیت مشاهده بسته : وقتی یک برنامه لیست برنامههای نصب شده روی دستگاه را جستجو میکند، لیست برگردانده شده فیلتر میشود.
برای کسب اطلاعات بیشتر، به صفحه حریم خصوصی مراجعه کنید.
امنیت
برچسبگذاری اشارهگر هیپ
جزئیات را تغییر دهید
تغییر نام : NATIVE_HEAP_POINTER_TAGGING
شناسه تغییر : 135754954
چگونه تغییر وضعیت دهیم
همزمان با آزمایش سازگاری برنامه خود با اندروید ۱۱، میتوانید با استفاده از دستورات ADB زیر، این تغییر را فعال یا غیرفعال کنید:
adb shell am compat enable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAMEadb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
برای اطلاعات بیشتر در مورد چارچوب سازگاری و تغییر تغییرات، به بخش «تست و اشکالزدایی تغییرات رفتار پلتفرم در برنامه خود» مراجعه کنید.
اشارهگرهای هیپ اکنون یک برچسب غیر صفر در بایت با ارزشترین (MSB) دارند. برنامههایی که به طور نادرست از اشارهگرها استفاده میکنند، از جمله برنامههایی که MSB را تغییر میدهند، اکنون میتوانند از کار بیفتند یا با مشکلات دیگری روبرو شوند. این تغییر برای پشتیبانی از سختافزارهای آینده با افزونه برچسبگذاری حافظه ARM (MTE) فعال ضروری است. برای کسب اطلاعات بیشتر، به اشارهگرهای برچسبگذاری شده مراجعه کنید.
برای غیرفعال کردن این ویژگی، به مستندات مانیفست allowNativeHeapPointerTagging مراجعه کنید.
بهروزرسانیهای تستها
پخش توستهای سفارشی از پسزمینه مسدود شده است
به دلایل امنیتی و برای حفظ یک تجربه کاربری خوب، سیستم، Toastهایی که حاوی Viewهای سفارشی هستند را مسدود میکند، اگر این Toastها از پسزمینه توسط برنامهای که Android 11 یا بالاتر را هدف قرار میدهد ارسال شوند. توجه داشته باشید که Toastهای متنی همچنان مجاز هستند؛ اینها Toastهایی هستند که با استفاده از Toast.makeText() ایجاد میشوند و setView() فراخوانی نمیکنند.
اگر برنامه شما سعی کند یک Toast حاوی یک نمای سفارشی را از پسزمینه ارسال کند، سیستم پیام را به کاربر نشان نمیدهد. در عوض، سیستم پیام زیر را در logcat ثبت میکند:
W/NotificationService: Blocking custom toast from package \ <package> due to package not in the foreground
فراخوانیهای Toast
اگر میخواهید هنگام ظاهر شدن یا ناپدید شدن یک Toast (متن یا سفارشی) مطلع شوید، از متد addCallback() که در اندروید ۱۱ اضافه شده است، استفاده کنید.
تغییرات API تست متن
برنامههایی که اندروید ۱۱ یا بالاتر را هدف قرار میدهند، عوارض جانبی زیر را برای text toasts مشاهده میکنند:
- متد
getView()nullبرمیگرداند. - مقادیر برگشتی متدهای زیر، مقادیر واقعی را نشان نمیدهند، بنابراین نباید در برنامه خود به آنها تکیه کنید:
- متدهای زیر نیازی به استفاده ندارند، بنابراین برنامه شما نباید از آنها استفاده کند:
اتصال
دسترسی محدود به خواندن پایگاه داده APN
جزئیات را تغییر دهید
تغییر نام : APN_READING_PERMISSION_CHANGE_ID
شناسه تغییر : 124107808
چگونه تغییر وضعیت دهیم
همزمان با آزمایش سازگاری برنامه خود با اندروید ۱۱، میتوانید با استفاده از دستورات ADB زیر، این تغییر را فعال یا غیرفعال کنید:
adb shell am compat enable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAMEadb shell am compat disable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
برای اطلاعات بیشتر در مورد چارچوب سازگاری و تغییر تغییرات، به بخش «تست و اشکالزدایی تغییرات رفتار پلتفرم در برنامه خود» مراجعه کنید.
برنامههایی که اندروید ۱۱ را هدف قرار میدهند، اکنون برای خواندن یا دسترسی به پایگاه داده APN ارائهدهنده تلفن ، به مجوز ممتاز Manifest.permission.WRITE_APN_SETTINGS نیاز دارند. تلاش برای دسترسی به پایگاه داده APN بدون این مجوز، یک استثنای امنیتی ایجاد میکند.
دسترسیپذیری
تعامل با موتورهای TTS را در فایل مانیفست اعلام کنید
به دلیل تغییرات در قابلیت مشاهده بسته ، برنامههایی که اندروید ۱۱ را هدف قرار میدهند و با موتور تبدیل متن به گفتار (TTS) تعامل دارند، باید عنصر <queries> زیر را به فایلهای مانیفست خود اضافه کنند:
<queries> <intent> <action android:name="android.intent.action.TTS_SERVICE" /> </intent> </queries>
استفاده از دکمه دسترسی را در فایل متادیتا اعلام کنید
جزئیات را تغییر دهید
تغییر نام : REQUEST_ACCESSIBILITY_BUTTON_CHANGE
شناسه تغییر : 136293963
چگونه تغییر وضعیت دهیم
همزمان با آزمایش سازگاری برنامه خود با اندروید ۱۱، میتوانید با استفاده از دستورات ADB زیر، این تغییر را فعال یا غیرفعال کنید:
adb shell am compat enable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAMEadb shell am compat disable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
برای اطلاعات بیشتر در مورد چارچوب سازگاری و تغییر تغییرات، به بخش «تست و اشکالزدایی تغییرات رفتار پلتفرم در برنامه خود» مراجعه کنید.
از اندروید ۱۱ به بعد، سرویس دسترسی شما نمیتواند در زمان اجرا اعلانی مبنی بر ارتباط با دکمه دسترسی سیستم ایجاد کند. اگر AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON را به ویژگی flags یک شیء AccessibilityServiceInfo اضافه کنید، چارچوب، رویدادهای فراخوانی دکمه دسترسی را به سرویس شما ارسال نمیکند.
برای دریافت رویدادهای فراخوانی دسترسی در سرویس دسترسی خود، از فایل فراداده سرویس دسترسی خود برای اعلام ارتباط سرویس خود با دکمه دسترسی استفاده کنید. مقدار flagRequestAccessibilityButton را در تعریف ویژگی accessibilityFlags خود قرار دهید. یک مکان مشترک برای فایل فراداده سرویس دسترسی res/raw/accessibilityservice.xml است.
دوربین
اقدامات مربوط به قصد رسانهای به دوربین پیشفرض سیستم نیاز دارند
از اندروید ۱۱ به بعد، فقط برنامههای دوربین سیستمی از پیش نصبشده میتوانند به اقدامات اینتنت زیر پاسخ دهند:
-
android.media.action.VIDEO_CAPTURE -
android.media.action.IMAGE_CAPTURE -
android.media.action.IMAGE_CAPTURE_SECURE
اگر بیش از یک برنامه دوربین سیستم از پیش نصب شده موجود باشد، سیستم پنجرهای را برای انتخاب برنامه به کاربر نمایش میدهد. اگر میخواهید برنامه شما از یک برنامه دوربین شخص ثالث خاص برای ضبط تصاویر یا فیلمها از طرف خود استفاده کند، میتوانید با تنظیم نام بسته یا کامپوننت برای اینتنت، این اهداف را صریح کنید.
بستهبندی و نصب برنامه
فایلهای منابع فشرده
جزئیات را تغییر دهید
تغییر نام : RESOURCES_ARSC_COMPRESSED
شناسه تغییر : 132742131
چگونه تغییر وضعیت دهیم
همزمان با آزمایش سازگاری برنامه خود با اندروید ۱۱، میتوانید با استفاده از دستورات ADB زیر، این تغییر را فعال یا غیرفعال کنید:
adb shell am compat enable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAMEadb shell am compat disable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
برای اطلاعات بیشتر در مورد چارچوب سازگاری و تغییر تغییرات، به بخش «تست و اشکالزدایی تغییرات رفتار پلتفرم در برنامه خود» مراجعه کنید.
برنامههایی که اندروید ۱۱ (سطح API 30) یا بالاتر را هدف قرار میدهند، در صورتی که حاوی فایل فشرده resources.arsc باشند یا این فایل در مرز ۴ بایتی تراز نشده باشد، نمیتوانند نصب شوند. در صورت وجود هر یک از این شرایط، سیستم نمیتواند این فایل را در حافظه نگاشت کند. جداول منابعی که نمیتوانند در حافظه نگاشت شوند، باید در یک بافر در RAM خوانده شوند که منجر به فشار غیرضروری بر حافظه سیستم و افزایش شدید استفاده از RAM در دستگاه میشود.
اگر قبلاً از فایل فشرده resources.arsc استفاده میکردید، به جای آن، استراتژیهای جایگزین مانند کوچک کردن منابع برنامه یا روشهای دیگر برای کوچک کردن، مبهمسازی و بهینهسازی برنامه خود را امتحان کنید.
طرح امضای APK نسخه ۲ اکنون الزامی است
برنامههایی که اندروید ۱۱ (سطح API 30) را هدف قرار میدهند و در حال حاضر فقط با استفاده از APK Signature Scheme v1 امضا شدهاند، اکنون باید با استفاده از APK Signature Scheme v2 یا بالاتر نیز امضا شوند. کاربران نمیتوانند برنامههایی را که فقط با APK Signature Scheme v1 امضا شدهاند، در دستگاههایی که اندروید ۱۱ را اجرا میکنند، نصب یا بهروزرسانی کنند.
برای تأیید اینکه برنامه شما با APK Signature Scheme نسخه ۲ یا بالاتر امضا شده است، میتوانید از اندروید استودیو یا ابزار apksigner در خط فرمان استفاده کنید.
فایربیس
فایربیس JobDispatcher و GCMNetworkManager
اگر برنامه شما سطح API 30 یا بالاتر را هدف قرار میدهد، فراخوانیهای API مربوط به Firebase JobDispatcher و GcmNetworkManager در دستگاههایی که اندروید 6.0 (سطح API 23) یا بالاتر را اجرا میکنند، غیرفعال هستند. برای اطلاعات مربوط به مهاجرت، به «مهاجرت از Firebase JobDispatcher به WorkManager» و «مهاجرت از GCMNetworkManager به WorkManager» مراجعه کنید.
تشخیص گفتار
به دلیل تغییرات در قابلیت مشاهده بسته ، برنامههایی که اندروید ۱۱ را هدف قرار میدهند و با یک سرویس تشخیص گفتار تعامل دارند، باید عنصر <queries> زیر را به فایلهای مانیفست خود اضافه کنند:
<queries> <intent> <action android:name="android.speech.RecognitionService" /> </intent> </queries>
تغییرات فراخوانی برای OnSharedPreferenceChangeListener
جزئیات را تغییر دهید
تغییر نام : CALLBACK_ON_CLEAR_CHANGE
شناسه تغییر : 119147584
چگونه تغییر وضعیت دهیم
همزمان با آزمایش سازگاری برنامه خود با اندروید ۱۱، میتوانید با استفاده از دستورات ADB زیر، این تغییر را فعال یا غیرفعال کنید:
adb shell am compat enable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAMEadb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
برای اطلاعات بیشتر در مورد چارچوب سازگاری و تغییر تغییرات، به بخش «تست و اشکالزدایی تغییرات رفتار پلتفرم در برنامه خود» مراجعه کنید.
برای برنامههایی که اندروید ۱۱ (سطح API 30) را هدف قرار میدهند، هر زمان که Editor.clear فراخوانی شود، اکنون یک فراخوانی برگشتی به OnSharedPreferenceChangeListener.onSharedPreferenceChanged با کلید null انجام میشود.
محدودیتهای رابط کاربری غیر SDK
اندروید ۱۱ شامل فهرستهای بهروز شدهای از رابطهای کاربری محدود شده غیر SDK بر اساس همکاری با توسعهدهندگان اندروید و آخرین آزمایشهای داخلی است. در صورت امکان، قبل از محدود کردن رابطهای کاربری غیر SDK، مطمئن میشویم که جایگزینهای عمومی در دسترس هستند.
اگر برنامه شما اندروید ۱۱ را هدف قرار نمیدهد، ممکن است برخی از این تغییرات بلافاصله روی شما تأثیر نگذارند. با این حال، اگرچه در حال حاضر میتوانید از برخی رابطهای غیر SDK ( بسته به سطح API هدف برنامه خود ) استفاده کنید، استفاده از هر روش یا فیلد غیر SDK همیشه خطر بالای خرابی برنامه شما را به همراه دارد.
اگر مطمئن نیستید که برنامه شما از رابطهای غیر SDK استفاده میکند، میتوانید برنامه خود را آزمایش کنید تا متوجه شوید. اگر برنامه شما به رابطهای غیر SDK متکی است، باید برنامهریزی برای مهاجرت به جایگزینهای SDK را آغاز کنید. با این وجود، ما درک میکنیم که برخی از برنامهها موارد استفاده معتبری برای استفاده از رابطهای غیر SDK دارند. اگر نمیتوانید جایگزینی برای استفاده از رابط غیر SDK برای یک ویژگی در برنامه خود پیدا کنید، باید یک API عمومی جدید درخواست کنید .
برای کسب اطلاعات بیشتر در مورد تغییرات این نسخه از اندروید، به بهروزرسانیهای محدودیتهای رابط کاربری غیر SDK در اندروید ۱۱ مراجعه کنید. برای کسب اطلاعات بیشتر در مورد رابطهای کاربری غیر SDK به طور کلی، به محدودیتهای رابطهای کاربری غیر SDK مراجعه کنید.