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

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

مطمئن شوید که فهرستی از تغییرات رفتاری که فقط بر برنامه‌هایی که اندروید 15 را هدف قرار می‌دهند را نیز بررسی کنید.

عملکرد اصلی

اندروید 15 قابلیت های اصلی مختلف سیستم اندروید را اصلاح یا گسترش می دهد.

تغییرات در وضعیت بسته

软件包 FLAG_STOPPED 状态(用户可以通过在 AOSP build 中长按应用图标并选择“强制停止”来启用此状态)的用途一直是让应用保持在此状态,直到用户通过直接启动应用或间接与应用互动(通过 Sharesheet 或 widget、将应用选择为动态壁纸等)来明确将应用从此状态移除。在 Android 15 中,我们更新了系统行为,使其与此预期行为保持一致。应用应仅通过直接或间接的用户操作从停止状态移除。

为了支持预期行为,除了现有限制之外,当应用在搭载 Android 15 的设备上进入停止状态时,系统还会取消所有待处理 intent。当用户的操作将应用从停止状态移除时,系统会将 ACTION_BOOT_COMPLETED 广播传送到应用,以便应用有机会重新注册所有待处理 intent。

您可以调用新的 ApplicationStartInfo.wasForceStopped() 方法来确认应用是否已进入停止状态。

پشتیبانی از اندازه صفحه 16 کیلوبایت

Android 过去仅支持 4 KB 内存页面大小, 优化了系统内存性能,以针对 Android 设备通常具备的功能。从 Android 15 开始,AOSP 支持 配置为使用 16 KB (16 KB) 页面大小的设备 设备)。如果您的应用使用任何 NDK 库,请直接使用 或者通过 SDK 间接创建,那么,您需要重新构建自己的应用 支持这些 16KB 设备。

随着设备制造商不断打造出 物理内存 (RAM),许多此类设备都会采用 16KB(以及 页面大小以优化设备的性能。正在添加 支持 16 KB 页面大小的设备,可使您的应用在这些设备上运行 并有助于您的应用从相关的广告效果中获益 改进。如果不重新编译,应用可能无法在 16KB 设备上运行 在未来的 Android 版本中正式推出。

为帮助您为应用添加支持,我们提供了有关如何检查 如果您的应用受到影响 重新构建您的应用(如果适用),以及如何在 Google Play 中 使用模拟器(包括 Android 15)的 16 KB 环境 系统映像)。

优势和性能提升

配置为使用 16 KB 页面大小的设备平均会使用略多一些的内存,但系统和应用的性能也会得到各种提升:

  • 缩短了系统内存压力时的应用启动时间:平均降低了 3.16%;对于我们测试的某些应用而言,改进幅度更大(最高可达 30%)
  • 应用启动期间的功耗降低:平均降低了 4.56%
  • 相机启动更快:热启动速度平均提高了 4.48%,冷启动速度平均提高了 6.60%
  • 缩短了系统启动时间:平均缩短了 8%(约 950 毫秒)

这些改进基于我们的初始测试,实际设备上的结果可能会有所不同。随着测试的继续进行,我们将进一步分析应用的潜在收益。

检查您的应用是否受到影响

如果您的应用使用了任何原生代码,则应重新构建应用以支持 16 KB 设备。如果您不确定自己的应用是否使用了原生代码,可以使用 APK 分析器确定是否存在任何原生代码,然后检查您找到的任何共享库的 ELF 段对齐情况

如果您的应用仅使用以 Java 或 Kotlin 编程语言编写的代码(包括所有库或 SDK),则该应用已经支持 16 KB 设备。不过,我们建议您在 16 KB 环境中测试应用,以验证应用行为是否没有意外回归。

تغییرات لازم برای برخی از برنامه ها برای پشتیبانی از فضای خصوصی

فضای خصوصی یک ویژگی جدید در اندروید 15 است که به کاربران اجازه می‌دهد فضای جداگانه‌ای را در دستگاه خود ایجاد کنند تا بتوانند برنامه‌های حساس را از چشمان کنجکاو دور نگه دارند، زیر یک لایه دیگر از احراز هویت. از آنجایی که برنامه‌های موجود در فضای خصوصی دید محدودی دارند، برخی از انواع برنامه‌ها باید اقدامات بیشتری را انجام دهند تا بتوانند برنامه‌های موجود در فضای خصوصی کاربر را ببینند و با آنها تعامل داشته باشند.

همه برنامه ها

از آنجایی که برنامه‌های موجود در فضای خصوصی در یک نمایه کاربر مجزا مانند نمایه‌های کاری نگهداری می‌شوند، برنامه‌ها نباید تصور کنند که هیچ نسخه‌ای نصب‌شده از برنامه‌شان که در نمایه اصلی نیست، در نمایه کاری است. اگر برنامه شما دارای منطق مربوط به برنامه های نمایه کاری است که این فرض را ایجاد می کند، باید این منطق را تنظیم کنید.

اپلیکیشن های پزشکی

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

تجربه راه‌اندازی فضای خصوصی به کاربران هشدار می‌دهد که فضای خصوصی برای برنامه‌هایی که نیاز به انجام فعالیت‌های مهم پیش‌زمینه یا پس‌زمینه، مانند نمایش اعلان‌های برنامه‌های پزشکی دارند، مناسب نیست. با این حال، برنامه‌ها نمی‌توانند تعیین کنند که آیا در فضای خصوصی مورد استفاده قرار می‌گیرند یا نه، بنابراین نمی‌توانند هشداری را برای این مورد به کاربر نشان دهند.

به این دلایل، اگر یک برنامه پزشکی ایجاد می‌کنید، بررسی کنید که این ویژگی چگونه می‌تواند بر برنامه شما تأثیر بگذارد و اقدامات مناسب را انجام دهید - مانند اطلاع دادن به کاربران برای عدم نصب برنامه شما در فضای خصوصی - تا از ایجاد اختلال در قابلیت‌های مهم برنامه جلوگیری کنید.

برنامه های راه اندازی

اگر یک برنامه راه‌انداز توسعه می‌دهید، قبل از اینکه برنامه‌ها در فضای خصوصی قابل مشاهده باشند، باید کارهای زیر را انجام دهید:

  1. برنامه شما باید به عنوان برنامه راه‌انداز پیش‌فرض برای دستگاه اختصاص داده شود، یعنی دارای نقش ROLE_HOME .
  2. برنامه شما باید مجوز عادی ACCESS_HIDDEN_PROFILES را در فایل مانیفست برنامه شما اعلام کند.

برنامه‌های راه‌اندازی که مجوز ACCESS_HIDDEN_PROFILES را اعلام می‌کنند باید موارد استفاده از فضای خصوصی زیر را کنترل کنند:

  1. برنامه شما باید یک محفظه راه‌انداز جداگانه برای برنامه‌های نصب شده در فضای خصوصی داشته باشد. از متد getLauncherUserInfo() برای تعیین نوع پروفایل کاربری استفاده کنید.
  2. کاربر باید بتواند محفظه فضای خصوصی را پنهان و نشان دهد.
  3. کاربر باید بتواند محفظه فضای خصوصی را قفل و باز کند. از متد requestQuietModeEnabled() برای قفل کردن (با عبور true ) یا باز کردن (با عبور false ) فضای خصوصی استفاده کنید.
  4. در حالی که قفل است، هیچ برنامه‌ای در محفظه فضای خصوصی نباید از طریق مکانیسم‌هایی مانند جستجو قابل مشاهده یا کشف باشد. برنامه شما باید یک گیرنده برای پخش‌های ACTION_PROFILE_AVAILABLE و ACTION_PROFILE_UNAVAILABLE ثبت کند و در صورت تغییر وضعیت قفل یا بازشده محفظه فضای خصوصی، رابط کاربری را در برنامه شما به‌روزرسانی کند. هر دوی این پخش‌ها شامل EXTRA_USER هستند که برنامه شما می‌تواند از آن برای ارجاع به کاربر نمایه خصوصی استفاده کند.

    همچنین می توانید از متد isQuietModeEnabled() برای بررسی اینکه آیا نمایه فضای خصوصی قفل شده است یا خیر استفاده کنید.

اپلیکیشن های اپ استور

فضای خصوصی شامل دکمه "نصب برنامه ها" است که قصد ضمنی نصب برنامه ها را در فضای خصوصی کاربر راه اندازی می کند. برای اینکه برنامه شما این هدف ضمنی را دریافت کند، یک <intent-filter> را در فایل مانیفست برنامه خود با <category> از CATEGORY_APP_MARKET اعلام کنید.

فونت ایموجی مبتنی بر PNG حذف شد

我们移除了基于 PNG 的旧版表情符号字体文件 (NotoColorEmojiLegacy.ttf),只保留了基于矢量的文件。从 Android 13(API 级别 33)开始,系统表情符号渲染程序使用的表情符号字体文件已从基于 PNG 的文件更改为基于矢量的文件。出于兼容性原因,系统在 Android 13 和 14 中保留了旧版字体文件,以便具有自己的字体渲染程序的应用在能够升级之前继续使用旧版字体文件。

如需检查您的应用是否受到影响,请在应用的代码中搜索对 NotoColorEmojiLegacy.ttf 文件的引用。

您可以通过多种方式自适应应用:

  • 使用平台 API 进行文本渲染。您可以将文本渲染到基于位图的 Canvas,并在必要时使用该 Canvas 获取原始图片。
  • 为您的应用添加 COLRv1 字体支持。FreeType 开源库在 2.13.0 版及更高版本中支持 COLRv1。
  • 作为最后的手段,您可以将旧版表情符号字体文件 (NotoColorEmoji.ttf) 捆绑到 APK 中,但在这种情况下,您的应用将缺少最新的表情符号更新。如需了解详情,请参阅 Noto Emoji GitHub 项目页面

حداقل نسخه SDK هدف از 23 به 24 افزایش یافت

Android 15 基于 在 Android 14 中进行的更改,并扩展了 安全性。在 Android 15 中, 无法安装低于 24 的 targetSdkVersion。 要求应用符合现代 API 级别有助于确保更好的安全性和 保护隐私。

恶意软件通常会以较低的 API 级别为目标平台,以绕过安全和隐私 更高的 Android 版本中引入的保护机制。例如,有些恶意软件应用使用 targetSdkVersion 22,以避免受到 Android 6.0 Marshmallow(API 级别 23)在 2015 年引入的运行时权限模型的约束。这项 Android 15 变更使恶意软件更难以规避安全和隐私权方面的改进限制。尝试安装以较低 API 级别为目标平台的应用将导致安装失败,并且 Logcat 中会显示如下所示的消息:

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

在升级到 Android 15 的设备上,targetSdkVersion 级别较低的任何应用 安装在 Google Play 上

如果您需要测试以旧版 API 级别为目标平台的应用,请使用以下 ADB 命令:

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

دوربین و رسانه

اندروید 15 تغییرات زیر را در رفتار دوربین و رسانه برای همه برنامه ها ایجاد می کند.

پخش مستقیم و بدون بارگیری آهنگ های صوتی که قبلاً باز شده یا مستقیماً بارگیری شده اند با رسیدن به محدودیت های منابع، باطل می شوند.

قبل از Android 15، اگر برنامه‌ای درخواست پخش مستقیم یا بی‌بارگیری صدا را در حالی که برنامه دیگری در حال پخش صدا بود و محدودیت‌های منابع برآورده شده بود، می‌کرد، برنامه در باز کردن AudioTrack جدید شکست می‌خورد.

با شروع Android 15، زمانی که برنامه‌ای درخواست پخش مستقیم یا تخلیه بار می‌کند و محدودیت‌های منابع به دست می‌آید، سیستم هر شی AudioTrack را که در حال حاضر باز است که مانع از انجام درخواست آهنگ جدید می‌شود، باطل می‌کند.

(تراک‌های صوتی مستقیم و بدون بار معمولاً برای پخش فرمت‌های صوتی فشرده باز می‌شوند. موارد رایج برای پخش صدای مستقیم شامل پخش صدای کدگذاری شده از طریق HDMI به تلویزیون است. آهنگ‌های Offload معمولاً برای پخش صدای فشرده در دستگاه تلفن همراه با DSP سخت‌افزاری استفاده می‌شوند. شتاب.)

تجربه کاربری و رابط کاربری سیستم

اندروید 15 شامل تغییراتی است که برای ایجاد یک تجربه کاربری سازگارتر و بصری در نظر گرفته شده است.

انیمیشن‌های پیش‌بینی‌کننده پشتی برای برنامه‌هایی که شرکت کرده‌اند فعال شد

با شروع اندروید 15، گزینه توسعه دهنده برای انیمیشن های پیش بینی کننده پشت حذف شده است. اکنون انیمیشن‌های سیستمی مانند بازگشت به خانه، تکلیف متقابل و فعالیت متقابل برای برنامه‌هایی ظاهر می‌شوند که به طور کامل یا در سطح فعالیت در ژست بازگشت پیش‌بینی‌کننده شرکت کرده‌اند . اگر برنامه شما تحت تأثیر قرار گرفته است، اقدامات زیر را انجام دهید:

  • مطمئن شوید که برنامه شما به درستی منتقل شده است تا از ژست بازگشت پیش بینی کننده استفاده کنید.
  • اطمینان حاصل کنید که انتقال قطعه شما با ناوبری پیش‌بینی کننده به عقب کار می‌کند.
  • از انتقال انیمیشن و فریمورک دور شوید و به جای آن از انتقال انیماتور و اندرویدکس استفاده کنید.
  • از پشته‌هایی که FragmentManager از آن‌ها اطلاعی ندارد، مهاجرت کنید. به جای آن از پشته های پشته ای استفاده کنید که توسط FragmentManager یا مؤلفه Navigation مدیریت می شوند.

وقتی کاربر برنامه‌ای را به اجبار متوقف می‌کند، ابزارک‌ها غیرفعال می‌شوند

如果用户在搭载 Android 15 的设备上强制停止应用,系统会暂时停用该应用的所有微件。这些 widget 会灰显,用户无法与其互动。这是因为,从 Android 15 开始,当系统强制停止应用时,会取消应用的所有待处理 intent。

系统会在用户下次启动应用时重新启用这些微件。

如需了解详情,请参阅对软件包停止状态的更改

تحقیرها

با هر انتشار، APIهای خاص Android ممکن است منسوخ شوند یا برای ارائه تجربه بهتر توسعه‌دهنده یا پشتیبانی از قابلیت‌های پلتفرم جدید نیاز به بازسازی داشته باشند. در این موارد، ما رسماً API های منسوخ شده را منسوخ می کنیم و توسعه دهندگان را به API های جایگزین هدایت می کنیم تا به جای آن از آنها استفاده کنند.

منسوخ شدن به این معنی است که ما به پشتیبانی رسمی از API ها پایان داده ایم، اما آنها همچنان در دسترس توسعه دهندگان خواهند بود. برای کسب اطلاعات بیشتر در مورد منسوخ شدن های قابل توجه در این نسخه از Android، به صفحه منسوخ شدن ها مراجعه کنید.