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

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

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

عملکرد اصلی

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

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

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

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

در اندروید 14، سیستم می‌تواند پخش‌های ثبت شده در زمینه را در یک صف قرار دهد، در حالی که برنامه در حالت حافظه پنهان است. این شبیه رفتار صف‌بندی است که Android 12 (سطح API 31) برای تراکنش‌های بایندر غیرهمگام معرفی کرد. پخش‌های اعلام‌شده توسط مانیفست در صف قرار نمی‌گیرند و برنامه‌ها برای تحویل پخش از حالت حافظه پنهان حذف می‌شوند.

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

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

با شروع اندروید 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 کیلوبایت

در اندروید 14 (سطح API 34) و بالاتر، پلتفرم حداکثر حافظه قابل قفل شدن با استفاده از mlock() را به 64 کیلوبایت در هر فرآیند کاهش می دهد. در نسخه های قبلی، محدودیت برای هر پردازش 64 مگابایت بود. این محدودیت مدیریت بهتر حافظه را در بین برنامه ها و سیستم ارتقا می دهد. برای ارائه سازگاری بیشتر در بین دستگاه‌ها، Android 14 یک آزمایش CTS جدید برای محدودیت mlock() جدید در دستگاه‌های سازگار اضافه می‌کند.

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

从设计上讲,当应用的进程移至后台且没有任何其他应用进程组件在运行时,应用进程将处于缓存状态。此类应用进程可能会因系统内存压力而终止。在此状态下,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) و بسته های پشتیبانی برای سازمانی
  • اطلاعیه های رسانه ای
  • بسته انتخابگر جستجوی پیش فرض

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

为了加强用户隐私保护,Android 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 قابلیت مشاهده بسته را برای اهداف حفظ حریم خصوصی فیلتر می کند ، بیشتر بیاموزید.