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

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

مطمئن شوید که فهرستی از تغییرات رفتاری را که فقط بر برنامه‌هایی که Android 14 را هدف قرار می‌دهند تأثیر می‌گذارد، مرور کنید.

عملکرد اصلی

زمان‌بندی هشدار دقیق به‌طور پیش‌فرض رد می‌شود

آلارم‌های دقیق برای اعلان‌های مورد نظر کاربر یا برای اقداماتی که باید در یک زمان دقیق انجام شوند در نظر گرفته شده‌اند. از Android 14، مجوز SCHEDULE_EXACT_ALARM دیگر به اکثر برنامه‌های تازه نصب‌شده که Android 13 و بالاتر را هدف قرار می‌دهند، از قبل اعطا نمی‌شود — این مجوز به طور پیش‌فرض رد می‌شود.

درباره تغییرات مجوز زمان‌بندی هشدارهای دقیق بیشتر بدانید.

زمانی که برنامه‌ها در حافظه پنهان هستند، پخش‌های ثبت‌شده در زمینه در صف قرار می‌گیرند

在 Android 14 中,当应用处于缓存状态时,系统可以将上下文注册的广播放入队列中。这与 Android 12(API 级别 31)为异步 binder 事务引入的队列行为类似。在清单中声明的广播不会加入队列,并且应用会从缓存状态中移除以进行广播传递。

当应用离开缓存状态(例如返回前台)时,系统会传递所有已加入队列的广播。某些广播的多个实例 可能会合并为一个广播。取决于其他因素,如系统 运行状况,则可能会从缓存状态中移除应用,以及之前排队 广播。

برنامه ها فقط می توانند فرآیندهای پس زمینه خود را از بین ببرند

با شروع اندروید 14، زمانی که برنامه شما killBackgroundProcesses() را فراخوانی می‌کند، API می‌تواند فقط فرآیندهای پس‌زمینه برنامه شما را از بین ببرد.

اگر نام بسته برنامه دیگری را وارد کنید، این روش هیچ تاثیری بر فرآیندهای پس‌زمینه آن برنامه ندارد و پیام زیر در Logcat ظاهر می‌شود:

Invalid packageName: com.example.anotherapp

برنامه شما نباید از killBackgroundProcesses() API استفاده کند یا سعی کند بر چرخه عمر فرآیند سایر برنامه‌ها، حتی در نسخه‌های قدیمی‌تر سیستم عامل تأثیر بگذارد. اندروید به گونه‌ای طراحی شده است که برنامه‌های کش را در پس‌زمینه نگه می‌دارد و زمانی که سیستم به حافظه نیاز دارد، آنها را به‌طور خودکار از بین می‌برد. اگر برنامه شما برنامه‌های دیگر را به‌طور غیرضروری از بین می‌برد، می‌تواند عملکرد سیستم را کاهش دهد و مصرف باتری را با نیاز به راه‌اندازی مجدد کامل آن برنامه‌ها بعداً افزایش دهد، که به طور قابل‌توجهی نسبت به از سرگیری یک برنامه حافظه پنهان موجود، منابع بیشتری را مصرف می‌کند.

MTU برای اولین مشتری GATT که درخواست MTU می کند روی 517 تنظیم شده است

از Android 14، پشته بلوتوث Android به شدت به نسخه 5.2 مشخصات هسته بلوتوث پایبند است و زمانی که اولین مشتری GATT یک MTU را با استفاده از API BluetoothGatt#requestMtu(int) درخواست می کند، BLE ATT MTU را به 517 بایت درخواست می کند و همه را نادیده می گیرد. درخواست های بعدی MTU در آن اتصال ACL.

برای رفع این تغییر و قوی‌تر کردن برنامه‌تان، گزینه‌های زیر را در نظر بگیرید:

  • دستگاه جانبی شما باید به درخواست MTU دستگاه Android با مقدار معقولی که بتواند توسط دستگاه جانبی قابل استفاده باشد پاسخ دهد. مقدار نهایی مذاکره حداقل مقدار درخواستی Android و مقدار ارائه شده از راه دور خواهد بود (به عنوان مثال، min(517, remoteMtu) )
    • اجرای این اصلاح ممکن است به یک به‌روزرسانی میان‌افزار برای دستگاه‌های جانبی نیاز داشته باشد
  • متناوباً، نوشتن مشخصه GATT خود را بر اساس حداقل بین مقدار شناخته شده پشتیبانی شده دستگاه جانبی و تغییر MTU دریافتی محدود کنید.
    • یادآوری این است که باید 5 بایت از اندازه پشتیبانی شده برای هدرها کاهش دهید
    • برای مثال: arrayMaxLength = min(SUPPORTED_MTU, GATT_MAX_ATTR_LEN(517)) - 5

دلیل جدیدی که می توان یک برنامه را در سطل آماده به کار محدود قرار داد

Android 14 引入了一种可将应用放入受限待机模式存储分区的新原因。由于 onStartJobonStopJobonBind 方法超时,应用的作业多次触发 ANR 错误。(如需了解对 onStartJobonStopJob 的更改,请参阅 JobScheduler 强化了回调和网络行为。)

如需跟踪应用是否已进入受限待机分桶,我们建议您在作业执行时使用 API UsageStatsManager.getAppStandbyBucket() 进行日志记录,或在应用启动时使用 UsageStatsManager.queryEventsForSelf() 进行日志记录。

mlock محدود به 64 کیلوبایت

在 Android 14(API 级别 34)及更高版本中,平台将可使用 mlock() 锁定的最大内存量减少到每个进程 64 KB。在之前的版本中,每个进程的上限为 64 MB。此限制有助于更好地管理应用和系统的内存。为了在各种设备上提供更一致的体验,Android 14 针对兼容设备上的新 mlock() 限制添加了一项新的 CTS 测试

سیستم استفاده از منابع برنامه ذخیره شده را اعمال می کند

从设计上讲,当应用的进程移至后台且没有任何其他应用进程组件在运行时,应用进程将处于缓存状态。此类应用进程可能会因系统内存压力而终止。在此状态下,Activity 实例在调用并返回 onStop() 方法后执行的任何工作均不可靠,强烈建议不要这样做。

Android 14 对此设计引入了一致性和强制执行要求。在应用进程进入缓存状态后不久,系统会禁止后台工作,直到进程组件重新进入生命周期的活跃状态。

使用框架支持的典型生命周期 API(例如服务JobSchedulerJetpack WorkManager)的应用应该不受这些变化的影响。

تجربه کاربری

تغییراتی در نحوه تجربه کاربران از اعلان‌های غیرقابل رد کردن

اگر برنامه شما اعلان‌های پیش‌زمینه غیرقابل رد کردن را به کاربران نشان می‌دهد، Android 14 رفتار را تغییر داده است تا به کاربران اجازه دهد چنین اعلان‌هایی را رد کنند.

این تغییر برای برنامه‌هایی اعمال می‌شود که با تنظیم Notification.FLAG_ONGOING_EVENT از طریق Notification.Builder#setOngoing(true) یا NotificationCompat.Builder#setOngoing(true) از رد اعلان‌های پیش‌زمینه توسط کاربران جلوگیری می‌کنند. رفتار FLAG_ONGOING_EVENT تغییر کرده است تا این اعلان‌ها در واقع توسط کاربر قابل رد شود.

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

  • وقتی گوشی قفل است
  • اگر کاربر یک اقدام پاک کردن همه اعلان ها را انتخاب کند (که به اخراج های تصادفی کمک می کند)

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

  • اعلان‌های CallStyle
  • کنترل کننده سیاست دستگاه (DPC) و بسته های پشتیبانی برای سازمانی
  • اطلاعیه های رسانه ای
  • بسته انتخابگر جستجوی پیش فرض

اطلاعات ایمنی داده ها بیشتر قابل مشاهده است

برای افزایش حریم خصوصی کاربران، اندروید 14 تعداد مکان هایی را که سیستم اطلاعاتی را که در فرم کنسول Play اعلام کرده اید نشان می دهد، افزایش می دهد. در حال حاضر، کاربران می توانند این اطلاعات را در بخش ایمنی داده در فهرست برنامه شما در Google Play مشاهده کنند.

ما شما را تشویق می‌کنیم که خط‌مشی‌های اشتراک‌گذاری داده‌های موقعیت مکانی برنامه‌تان را مرور کنید و برای انجام هر گونه به‌روزرسانی‌های قابل‌اجرا در بخش ایمنی داده‌های Google Play برنامه‌تان، لحظه‌ای وقت بگذارید.

در راهنما در مورد اینکه چگونه اطلاعات ایمنی داده در Android 14 بیشتر قابل مشاهده است بیشتر بیاموزید.

دسترسی

مقیاس بندی فونت غیر خطی تا 200٪

با شروع اندروید 14، این سیستم از مقیاس بندی فونت تا 200% پشتیبانی می کند، گزینه های دسترسی اضافی را به کاربران کم بینا ارائه می دهد که با دستورالعمل های دسترسی به محتوای وب (WCAG) مطابقت دارد.

اگر قبلاً از واحدهای پیکسل های مقیاس شده (sp) برای تعریف اندازه متن استفاده می کنید، احتمالاً این تغییر تأثیر زیادی بر برنامه شما نخواهد داشت. با این حال، باید تست UI را با حداکثر اندازه فونت فعال (200٪) انجام دهید تا مطمئن شوید که برنامه شما می‌تواند اندازه فونت‌های بزرگ‌تری را بدون تأثیرگذاری بر قابلیت استفاده داشته باشد.

امنیت

حداقل سطح API هدف قابل نصب

با شروع اندروید 14، برنامه هایی با targetSdkVersion کمتر از 23 قابل نصب نیستند. الزام برنامه‌ها برای برآورده کردن حداقل الزامات سطح API هدف، امنیت و حریم خصوصی کاربران را بهبود می‌بخشد.

بدافزار اغلب سطوح API قدیمی‌تر را هدف قرار می‌دهد تا از حفاظت‌های امنیتی و حریم خصوصی که در نسخه‌های اندروید جدیدتر معرفی شده‌اند دور بزند. برای مثال، برخی از برنامه‌های بدافزار از targetSdkVersion 22 استفاده می‌کنند تا در معرض مدل مجوز زمان اجرا قرار نگیرند که در سال 2015 توسط Android 6.0 Marshmallow (سطح API 23) معرفی شد. این تغییر اندروید 14، جلوگیری از بهبود امنیت و حریم خصوصی را برای بدافزارها دشوارتر می کند. تلاش برای نصب برنامه‌ای که سطح API پایین‌تری را هدف قرار می‌دهد منجر به عدم موفقیت در نصب می‌شود و پیام زیر در Logcat ظاهر می‌شود:

INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 7

در دستگاه‌هایی که به Android 14 ارتقا می‌یابند، هر برنامه‌ای با targetSdkVersion کمتر از 23 نصب می‌شود.

اگر نیاز به آزمایش برنامه ای دارید که سطح API قدیمی را هدف قرار می دهد، از دستور ADB زیر استفاده کنید:

adb install --bypass-low-target-sdk-block FILENAME.apk

نام بسته های مالک رسانه ممکن است ویرایش شود

فروشگاه رسانه از پرسش‌هایی برای ستون OWNER_PACKAGE_NAME پشتیبانی می‌کند، که نشان‌دهنده برنامه‌ای است که یک فایل رسانه خاص را ذخیره کرده است . با شروع در Android 14، این مقدار تغییر می کند مگر اینکه حداقل یکی از شرایط زیر صادق باشد:

  • برنامه ای که فایل رسانه ای را ذخیره می کند دارای یک نام بسته است که همیشه برای سایر برنامه ها قابل مشاهده است.
  • برنامه ای که از فروشگاه رسانه درخواست می کند مجوز QUERY_ALL_PACKAGES درخواست می کند.

درباره اینکه چگونه Android قابلیت مشاهده بسته را برای اهداف حفظ حریم خصوصی فیلتر می کند ، بیشتر بیاموزید.