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

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

حتماً لیست تغییرات رفتاری که فقط بر برنامه‌های اندروید ۱۴ تأثیر می‌گذارند را نیز بررسی کنید.

عملکرد اصلی

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

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

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

پخش‌های ثبت‌شده در متن در صف قرار می‌گیرند در حالی که برنامه‌ها در حافظه پنهان (cache) ذخیره می‌شوند.

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

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

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

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

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

Invalid packageName: com.example.anotherapp

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

MTU برای اولین کلاینت GATT که درخواست MTU می‌دهد، روی ۵۱۷ تنظیم شده است.

از 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 محدود به ۶۴ کیلوبایت

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

سیستم، استفاده از منابع برنامه ذخیره شده در حافظه پنهان را اجباری می‌کند

بر اساس طراحی ، فرآیند برنامه زمانی که به پس‌زمینه منتقل می‌شود و هیچ مؤلفه پردازش برنامه دیگری در حال اجرا نیست، در حالت حافظه پنهان است. چنین فرآیند برنامه ای به دلیل فشار حافظه سیستم از بین می رود. هر کاری که نمونه‌های Activity پس از فراخوانی و برگرداندن متد onStop() انجام می‌دهند، در حالی که در این حالت هستند، قابل اعتماد نیستند و به شدت از آن جلوگیری می‌شود.

اندروید 14 یکپارچگی و اجرا را به این طراحی معرفی می کند. مدت کوتاهی پس از ورود یک فرآیند برنامه به حالت کش، کار پس‌زمینه غیرمجاز است، تا زمانی که یک جزء فرآیند دوباره وارد حالت فعال چرخه حیات شود.

برنامه‌هایی که از APIهای چرخه عمر معمولی پشتیبانی شده از چارچوب استفاده می‌کنند - مانند سرویس‌ها ، JobScheduler ، و Jetpack 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 بیشتر قابل مشاهده است بیشتر بیاموزید.

دسترسی‌پذیری

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

从 Android 14 开始,系统支持将字体放大至最高 200%,为用户提供更多无障碍选项。

如果您已使用可缩放像素 (sp) 单位来定义文本大小,这项更改可能不会对您的应用产生太大影响。不过,您应在启用最大字号 (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 如何出于隐私保护目的而过滤软件包可见性