مانند نسخه های قبلی، اندروید 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 یا بالاتر را هدف قرار میدهند، عوارض جانبی زیر را برای نان تستهای متنی مشاهده میکنند:
- متد
getView()
null
را برمیگرداند. - مقادیر برگشتی روشهای زیر مقادیر واقعی را منعکس نمیکنند، بنابراین نباید در برنامه خود به آنها اعتماد کنید:
- روش های زیر بدون عملیات هستند، بنابراین برنامه شما نباید از آنها استفاده کند:
قابلیت اتصال
دسترسی خواندن به پایگاه داده 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، فقط برنامههای از پیش نصب شده دوربین سیستم میتوانند به اقدامات هدف زیر پاسخ دهند:
-
android.media.action.VIDEO_CAPTURE
-
android.media.action.IMAGE_CAPTURE
-
android.media.action.IMAGE_CAPTURE_SECURE
اگر بیش از یک برنامه از پیش نصب شده دوربین سیستم در دسترس باشد، سیستم یک گفتگو را برای کاربر ارائه می دهد تا یک برنامه را انتخاب کند. اگر میخواهید برنامه شما از یک برنامه دوربین شخص ثالث خاص برای ضبط تصاویر یا ویدیوها از طرف خود استفاده کند، میتوانید با تنظیم یک نام بسته یا مؤلفه برای هدف، این اهداف را آشکار کنید.
بسته بندی و نصب برنامه
فایل های منابع فشرده
تغییر جزئیات
تغییر نام : 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 مراجعه کنید.