پلاتفرم Android 15 شامل تغییرات رفتاری است که ممکن است بر برنامه شما تأثیر بگذارد.
تغییرات رفتاری زیر برای همه برنامهها هنگام اجرا در Android 15 اعمال میشود،
صرفنظر از targetSdkVersion. باید برنامهتان را آزمایش کنید و سپس درصورت لزوم آن را اصلاح کنید تا از این موارد بهدرستی پشتیبانی کند.
حتماً فهرست تغییرات رفتاری را که فقط بر برنامههایی که Android 15 را هدفیابی میکنند تأثیر میگذارد نیز مرور کنید.
عملکرد اصلی
Android 15 قابلیتهای اصلی مختلف سیستم Android را اصلاح یا گسترش میدهد.
تغییرات در وضعیت توقف بسته
软件包 FLAG_STOPPED 状态(用户可以通过在 AOSP build 中长按应用图标并选择“强制停止”来启用此状态)的用途一直是让应用保持在此状态,直到用户通过直接启动应用或间接与应用互动(通过 Sharesheet 或 widget、将应用选择为动态壁纸等)来明确将应用从此状态移除。在 Android 15 中,我们更新了系统行为,使其与此预期行为保持一致。应用应仅通过直接或间接的用户操作从停止状态移除。
为了支持预期行为,除了现有限制之外,当应用在搭载 Android 15 的设备上进入停止状态时,系统还会取消所有待处理 intent。当用户的操作将应用从停止状态移除时,系统会将 ACTION_BOOT_COMPLETED 广播传送到应用,以便应用有机会重新注册所有待处理 intent。
您可以调用新的 ApplicationStartInfo.wasForceStopped() 方法来确认应用是否已进入停止状态。
پشتیبانی از اندازههای صفحه ۱۶ کیلوبایتی
از لحاظ تاریخی، اندروید تنها از اندازه صفحات حافظه 4 کیلوبایتی پشتیبانی میکند که عملکرد حافظه سیستم را برای میانگین کل حافظهای که دستگاههای اندرویدی معمولا دارند بهینه میکند. با شروع Android 15، AOSP از دستگاه هایی پشتیبانی می کند که برای استفاده از اندازه صفحه 16 کیلوبایت (دستگاه های 16 کیلوبایت) پیکربندی شده اند. اگر برنامه شما از کتابخانه های NDK استفاده می کند، چه به طور مستقیم یا غیرمستقیم از طریق یک SDK، باید برنامه خود را بازسازی کنید تا بتواند روی این دستگاه های 16 کیلوبایتی کار کند.
از آنجایی که سازندگان دستگاهها به ساخت دستگاههایی با حافظه فیزیکی (RAM) بیشتر ادامه میدهند، بسیاری از این دستگاهها از اندازه صفحه ۱۶ کیلوبایت (و در نهایت بیشتر) برای بهینهسازی عملکرد دستگاه استفاده میکنند. افزودن پشتیبانی برای دستگاههای اندازه صفحه 16 کیلوبایت، برنامه شما را قادر میسازد تا در این دستگاهها اجرا شود و به برنامه شما کمک میکند از بهبودهای عملکرد مرتبط بهره مند شود. بدون کامپایل مجدد، برنامه ها در نسخه های بعدی اندروید روی دستگاه های 16 کیلوبایتی کار نخواهند کرد.
برای کمک به اضافه کردن پشتیبانی از برنامه خود، راهنمایی هایی در مورد نحوه بررسی اینکه آیا برنامه شما تحت تأثیر قرار گرفته است ، نحوه بازسازی برنامه خود (در صورت وجود) و نحوه آزمایش برنامه خود در یک محیط 16 کیلوبایتی با استفاده از شبیه سازها (از جمله تصاویر سیستم Android 15 برای شبیه ساز Android) را ارائه کرده ایم.
مزایا و دستاوردهای عملکرد
配置为使用 16 KB 页面大小的设备平均会使用略多一些的内存,但系统和应用的性能也会得到各种提升:
- 缩短了系统内存压力时的应用启动时间:平均降低了 3.16%;对于我们测试的某些应用而言,改进幅度更大(最高可达 30%)
- 应用启动期间的功耗降低:平均降低了 4.56%
- 相机启动更快:热启动速度平均提高了 4.48%,冷启动速度平均提高了 6.60%
- 缩短了系统启动时间:平均缩短了 8%(约 950 毫秒)
这些改进基于我们的初始测试,实际设备上的结果可能会有所不同。随着测试的继续进行,我们将进一步分析应用的潜在收益。
بررسی کنید که آیا برنامه شما تحت تأثیر قرار گرفته است
如果您的应用使用了任何原生代码,则应重新构建应用,使其支持 16 KB 设备。如果您不确定自己的应用是否使用了原生代码,可以使用 APK 分析器来确定是否存在任何原生代码,然后检查您找到的任何共享库的 ELF 段对齐情况。Android Studio 还提供了一些功能,可帮助您自动检测对齐问题。
如果您的应用仅使用以 Java 或 Kotlin 编程语言编写的代码(包括所有库或 SDK),则该应用已支持 16 KB 设备。不过,我们建议您在 16 KB 环境中测试应用,以验证应用行为是否出现意外的回归。
تغییرات لازم برای پشتیبانی برخیاز برنامهها از فضای خصوصی
فضای خصوصی یک ویژگی جدید در اندروید 15 است که به کاربران اجازه میدهد فضای جداگانهای را در دستگاه خود ایجاد کنند تا بتوانند برنامههای حساس را از چشمان کنجکاو دور نگه دارند، زیر یک لایه دیگر از احراز هویت. از آنجایی که برنامههای موجود در فضای خصوصی دید محدودی دارند، برخی از انواع برنامهها باید اقدامات بیشتری را انجام دهند تا بتوانند برنامههای موجود در فضای خصوصی کاربر را ببینند و با آنها تعامل داشته باشند.
همه برنامه ها
از آنجایی که برنامههای موجود در فضای خصوصی در یک نمایه کاربر مجزا مانند نمایههای کاری نگهداری میشوند، برنامهها نباید تصور کنند که هیچ نسخهای نصبشده از برنامهشان که در نمایه اصلی نیست، در نمایه کاری است. اگر برنامه شما دارای منطق مربوط به برنامه های نمایه کاری است که این فرض را ایجاد می کند، باید این منطق را تنظیم کنید.
اپلیکیشن های پزشکی
وقتی کاربر فضای خصوصی را قفل میکند، همه برنامههای موجود در فضای خصوصی متوقف میشوند و آن برنامهها نمیتوانند فعالیتهای پیشزمینه یا پسزمینه، از جمله نمایش اعلانها را انجام دهند. این رفتار ممکن است به شدت بر استفاده و عملکرد برنامه های پزشکی نصب شده در فضای خصوصی تأثیر بگذارد.
تجربه راهاندازی فضای خصوصی به کاربران هشدار میدهد که فضای خصوصی برای برنامههایی که نیاز به انجام فعالیتهای مهم پیشزمینه یا پسزمینه، مانند نمایش اعلانهای برنامههای پزشکی دارند، مناسب نیست. با این حال، برنامهها نمیتوانند تعیین کنند که آیا در فضای خصوصی مورد استفاده قرار میگیرند یا نه، بنابراین نمیتوانند هشداری را برای این مورد به کاربر نشان دهند.
به این دلایل، اگر یک برنامه پزشکی ایجاد میکنید، بررسی کنید که این ویژگی چگونه میتواند بر برنامه شما تأثیر بگذارد و اقدامات مناسب را انجام دهید - مانند اطلاع دادن به کاربران برای عدم نصب برنامه شما در فضای خصوصی - تا از ایجاد اختلال در قابلیتهای مهم برنامه جلوگیری کنید.
برنامه های راه اندازی
اگر یک برنامه راهانداز توسعه میدهید، قبل از اینکه برنامهها در فضای خصوصی قابل مشاهده باشند، باید کارهای زیر را انجام دهید:
- برنامه شما باید به عنوان برنامه راهانداز پیشفرض برای دستگاه اختصاص داده شود، یعنی دارای نقش
ROLE_HOME. - برنامه شما باید مجوز عادی
ACCESS_HIDDEN_PROFILESرا در فایل مانیفست برنامه شما اعلام کند.
برنامههای راهاندازی که مجوز ACCESS_HIDDEN_PROFILES را اعلام میکنند باید موارد استفاده از فضای خصوصی زیر را کنترل کنند:
- برنامه شما باید یک محفظه راهانداز جداگانه برای برنامههای نصب شده در فضای خصوصی داشته باشد. از متد
getLauncherUserInfo()برای تعیین نوع پروفایل کاربری استفاده کنید. - کاربر باید بتواند محفظه فضای خصوصی را پنهان و نشان دهد.
- کاربر باید بتواند محفظه فضای خصوصی را قفل و باز کند. از متد
requestQuietModeEnabled()برای قفل کردن (با عبورtrue) یا باز کردن (با عبورfalse) فضای خصوصی استفاده کنید. در حالی که قفل است، هیچ برنامهای در محفظه فضای خصوصی نباید از طریق مکانیسمهایی مانند جستجو قابل مشاهده یا کشف باشد. برنامه شما باید یک گیرنده برای پخشهای
ACTION_PROFILE_AVAILABLEوACTION_PROFILE_UNAVAILABLEثبت کند و در صورت تغییر وضعیت قفل یا بازشده محفظه فضای خصوصی، رابط کاربری را در برنامه شما بهروزرسانی کند. هر دوی این پخشها شاملEXTRA_USERهستند که برنامه شما میتواند از آن برای ارجاع به کاربر نمایه خصوصی استفاده کند.همچنین می توانید از متد
isQuietModeEnabled()برای بررسی اینکه آیا نمایه فضای خصوصی قفل شده است یا خیر استفاده کنید.
اپلیکیشن های اپ استور
فضای خصوصی شامل دکمه "نصب برنامه ها" است که قصد ضمنی نصب برنامه ها را در فضای خصوصی کاربر راه اندازی می کند. برای اینکه برنامه شما این هدف ضمنی را دریافت کند، یک <intent-filter> را در فایل مانیفست برنامه خود با <category> از CATEGORY_APP_MARKET اعلام کنید.
قلم اموجی مبتنی بر PNG برداشته شد
فایل فونت emoji قدیمی مبتنی بر PNG ( NotoColorEmojiLegacy.ttf ) حذف شده است و فقط فایل مبتنی بر برداری باقی می ماند. با شروع Android 13 (سطح API 33)، فایل فونت emoji مورد استفاده توسط رندر ایموجی سیستم از یک فایل مبتنی بر PNG به یک فایل مبتنی بر برداری تغییر کرد . این سیستم فایل فونت قدیمی را در اندروید 13 و 14 به دلایل سازگاری حفظ کرد، به طوری که برنامههایی با ارائهدهنده فونت خود میتوانند به استفاده از فایل فونت قدیمی تا زمانی که قادر به ارتقا باشند ادامه دهند.
برای بررسی اینکه آیا برنامه شما تحت تأثیر قرار گرفته است، کد برنامه خود را برای ارجاع به فایل NotoColorEmojiLegacy.ttf جستجو کنید.
میتوانید برنامه خود را به روشهای مختلفی تطبیق دهید:
- از API های پلتفرم برای رندر متن استفاده کنید. میتوانید متن را به یک
Canvasبا پشتوانه بیتمپ رندر کنید و در صورت لزوم از آن برای دریافت تصویر خام استفاده کنید. - پشتیبانی از فونت COLRv1 را به برنامه خود اضافه کنید. کتابخانه منبع باز FreeType از COLRv1 در نسخه 2.13.0 و بالاتر پشتیبانی می کند.
- بهعنوان آخرین راهحل، میتوانید فایل فونت emoji قدیمی (
NotoColorEmoji.ttf) را در APK خود قرار دهید، اگرچه در این صورت برنامه شما آخرین بهروزرسانیهای ایموجی را از دست خواهد داد. برای اطلاعات بیشتر، به صفحه پروژه Noto Emoji GitHub مراجعه کنید.
حداقل نسخه کیت توسعه نرمافزار هدف از ۲۳ به ۲۴ افزایش یافت
اندروید 15 بر اساس تغییراتی است که در اندروید 14 ایجاد شده است و این امنیت را بیشتر گسترش می دهد. در اندروید 15، برنامه هایی با targetSdkVersion کمتر از 24 قابل نصب نیستند. نیاز به برنامهها برای مطابقت با سطوح API مدرن به تضمین امنیت و حریم خصوصی بهتر کمک میکند.
بدافزارها اغلب سطوح پایینتر API را هدف قرار میدهند تا از حفاظتهای امنیتی و حریم خصوصی که در نسخههای اندروید بالاتر معرفی شدهاند دور بزنند. برای مثال، برخی از برنامههای بدافزار از targetSdkVersion 22 استفاده میکنند تا در معرض مدل مجوز زمان اجرا قرار نگیرند که در سال 2015 توسط Android 6.0 Marshmallow (سطح API 23) معرفی شد. این تغییر اندروید 15، جلوگیری از بهبود امنیت و حریم خصوصی را برای بدافزارها دشوارتر می کند. تلاش برای نصب برنامهای که سطح API پایینتری را هدف قرار میدهد منجر به عدم موفقیت در نصب میشود و پیامی مانند مورد زیر در Logcat ظاهر میشود:
INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 24, but found 7
در دستگاههایی که به Android 15 ارتقا مییابند، هر برنامهای با targetSdkVersion کمتر از 24 نصب میشود.
اگر نیاز به آزمایش برنامه ای دارید که سطح API قدیمی را هدف قرار می دهد، از دستور ADB زیر استفاده کنید:
adb install --bypass-low-target-sdk-block FILENAME.apk
امنیت و حریم خصوصی
Android 15 اقدامات قدرتمندی را برای مبارزه با کلاهبرداری ازطریق گذرنویسه یکبارمصرف (OTP) و محافظت از محتوای حساس کاربر معرفی میکند که بر تقویت «سرویس شنونده اعلان» و محافظتهای همرسانی صفحهنمایش تمرکز دارد. بهبودهای کلیدی شامل ویرایش کردن گذرواژههای یکبارمصرف از اعلانهای قابلدسترسی برای برنامههای غیرقابلاعتماد، پنهان کردن اعلانها درطول همرسانی صفحهنمایش، و ایمن کردن فعالیتهای برنامه هنگام پست شدن گذرواژههای یکبارمصرف است. هدف از این تغییرات محافظت از محتوای حساس کاربر دربرابر عوامل غیرمجاز است.
توسعهدهندگان باید از موارد زیر آگاه باشند تا مطمئن شوند برنامههایشان با تغییرات Android 15 سازگار است:
محوسازی گذرواژه یکبارمصرف
Android برنامههای غیرقابلاعتمادی را که
NotificationListenerService را پیادهسازی میکنند از خواندن محتوای ویرایشنشده
اعلانهایی که در آنها گذرواژه یکبارمصرف شناسایی شده است منع میکند. برنامههای مورداعتماد مثل
انجمنهای مدیر دستگاه همپا از این محدودیتها معاف هستند.
محافظت از همرسانی صفحهنمایش
- محتوای اعلان درطول جلسههای همرسانی صفحهنمایش پنهان میشود تا حریم خصوصی کاربر حفظ شود. اگر برنامه
setPublicVersion()را پیادهسازی کند، Android نسخه عمومی اعلان را نشان میدهد که بهعنوان اعلان جایگزین در زمینههای ناامن عمل میکند. درغیراینصورت، محتوای اعلان بدون هیچ بافت دیگری ویرایش میشود. - محتوای حساس مانند ورودی گذرواژه از دید بینندگان ازراهدور پنهان میشود تا اطلاعات حساس کاربر فاش نشود.
- فعالیتهای برنامههایی که درطول همرسانی صفحهنمایش اعلان پست میکنند و در آنها گذرواژه یکبارمصرف شناسایی شده است پنهان خواهد شد. محتوای برنامه پساز راهاندازی از دید بیننده ازراهدور پنهان میشود.
- علاوهبر شناسایی خودکار فیلدهای حساس توسط Android، توسعهدهندگان
میتوانند بخشهایی از برنامهشان را بهطور دستی بااستفاده از
setContentSensitivityبهعنوان حساس علامتگذاری کنند که درطول همرسانی صفحهنمایش از دید بینندگان راه دور پنهان میشود. - توسعهدهندگان میتوانند برای اهداف نمایشی یا آزمایشی، گزینه غیرفعال کردن محافظهای همرسانی صفحهنمایش را در گزینههای توسعهدهندگان فعال کنند تا از محافظهای همرسانی صفحهنمایش معاف شوند. ضبطکننده صفحهنمایش پیشفرض سیستم از این تغییرات مستثنی است، زیرا موارد ضبطشده در دستگاه باقی میماند.
دوربین و رسانه
Android 15 تغییرات زیر را در رفتار دوربین و رسانه برای همه برنامهها ایجاد میکند.
بازپخش صوتی مستقیم و انتقال بار، قطعههای صوتی مستقیم یا انتقال بار قبلاً بازشده را درصورت رسیدن به محدودیتهای منابع نامعتبر میکند
قبل از Android 15، اگر برنامهای درخواست پخش مستقیم یا بیبارگیری صدا را در حالی که برنامه دیگری در حال پخش صدا بود و محدودیتهای منابع برآورده شده بود، میکرد، برنامه در باز کردن AudioTrack جدید شکست میخورد.
با شروع Android 15، زمانی که برنامهای درخواست پخش مستقیم یا تخلیه بار میکند و محدودیتهای منابع به دست میآید، سیستم هر شی AudioTrack را که در حال حاضر باز است که مانع از انجام درخواست آهنگ جدید میشود، باطل میکند.
(تراکهای صوتی مستقیم و بدون بار معمولاً برای پخش فرمتهای صوتی فشرده باز میشوند. موارد رایج برای پخش صدای مستقیم شامل پخش صدای کدگذاری شده از طریق HDMI به تلویزیون است. آهنگهای Offload معمولاً برای پخش صدای فشرده در دستگاه تلفن همراه با DSP سختافزاری استفاده میشوند. شتاب.)
تجربه کاربری و واسط کاربر سیستم
Android 15 شامل برخی تغییرات است که هدف آنها ایجاد تجربه کاربری منسجمتر و شهودیتر است.
پویانماییهای اشاره برگشت پیشگویانه برای برنامههایی که موافقت کردهاند فعال شد
با شروع اندروید 15، گزینه توسعه دهنده برای انیمیشن های پیش بینی کننده پشت حذف شده است. اکنون انیمیشنهای سیستمی مانند بازگشت به خانه، تکلیف متقابل و فعالیت متقابل برای برنامههایی ظاهر میشوند که به طور کامل یا در سطح فعالیت در ژست بازگشت پیشبینیکننده شرکت کردهاند . اگر برنامه شما تحت تأثیر قرار گرفته است، اقدامات زیر را انجام دهید:
- مطمئن شوید که برنامه شما به درستی منتقل شده است تا از ژست بازگشت پیش بینی کننده استفاده کنید.
- اطمینان حاصل کنید که انتقال قطعه شما با ناوبری پیشبینی کننده به عقب کار میکند.
- از انتقال انیمیشن و فریمورک دور شوید و به جای آن از انتقال انیماتور و اندرویدکس استفاده کنید.
- از پشتههایی که
FragmentManagerاز آنها اطلاعی ندارد، مهاجرت کنید. به جای آن از پشته های پشته ای استفاده کنید که توسطFragmentManagerیا مؤلفه Navigation مدیریت می شوند.
ابزارهها وقتی کاربر برنامه را بهاجبار متوقف میکند غیرفعال میشوند
اگر کاربر به زور برنامه ای را در دستگاهی که اندروید 15 دارد متوقف کند، سیستم به طور موقت تمام ویجت های برنامه را غیرفعال می کند. ویجت ها خاکستری هستند و کاربر نمی تواند با آنها تعامل داشته باشد. این به این دلیل است که با شروع اندروید 15، سیستم تمام اهداف معلق برنامه را با توقف اجباری برنامه لغو می کند.
دفعه بعد که کاربر برنامه را راه اندازی می کند، سیستم دوباره آن ویجت ها را فعال می کند.
برای اطلاعات بیشتر، به تغییرات وضعیت بسته بسته مراجعه کنید.
تراشه نوار وضعیت نمایش رسانه به کاربران درباره همرسانی، پخش محتوا، و ضبط صفحهنمایش هشدار میدهد
بهرهبرداریهای پیشبینی صفحه، دادههای خصوصی کاربر مانند اطلاعات مالی را در معرض دید کاربران قرار میدهند، زیرا کاربران متوجه نمیشوند که صفحه دستگاهشان به اشتراک گذاشته میشود.
برای برنامههایی که روی دستگاههای دارای Android 15 QPR1 یا بالاتر اجرا میشوند، یک تراشه نوار وضعیت که بزرگ و برجسته است، به کاربران هشدار میدهد که هر گونه نمایش صفحه نمایش در حال پیشرفت را نشان دهند. کاربران میتوانند روی تراشه ضربه بزنند تا از اشتراکگذاری، پخش یا ضبط صفحه نمایش خود جلوگیری کنند. همچنین، با قفل شدن صفحه نمایش دستگاه، نمایش صفحه به طور خودکار متوقف می شود.

检查您的应用是否受到影响
默认情况下,您的应用会包含状态栏条状标签,并会在锁定屏幕激活时自动暂停屏幕投影。
如需详细了解如何针对这些用例测试应用,请参阅状态栏条状标签和自动停止。
محدودیتهای دسترسی به شبکه پسزمینه
在 Android 15 中,如果应用在有效的进程生命周期之外启动网络请求,则会收到异常。通常是 UnknownHostException 或其他与套接字相关的 IOException。在有效生命周期之外发生的网络请求通常是因为应用在不再活跃后,不知不觉地继续发出网络请求。
为缓解此异常,请使用生命周期感知型组件,确保您的网络请求具有生命周期感知功能,并在离开有效的进程生命周期时取消。如果您非常重视即使用户离开应用也要发出网络请求,请考虑使用 WorkManager 调度网络请求,或使用前台服务继续执行对用户可见的任务。
منسوخشدنها
با هر نسخه پخش، میاناهای برنامهسازی کاربردی خاص Android ممکن است منسوخ شوند یا نیاز به بازسازی کد داشته باشند تا تجربه توسعهدهنده بهتری ارائه دهند یا از قابلیتهای جدید پلاتفرم پشتیبانی کنند. در این موارد، ما بهطور رسمی میاناهای برنامهسازی کاربردی منسوخشده را از رده خارج میکنیم و توسعهدهندگان را به میاناهای برنامهسازی کاربردی جایگزین هدایت میکنیم تا از آنها استفاده کنند.
منسوخ شدن به این معنی است که پشتیبانی رسمی از میاناهای برنامهسازی کاربردی را پایان دادهایم، اما این میاناهای برنامهسازی کاربردی همچنان برای توسعهدهندگان دردسترس خواهند بود. برای کسب اطلاعات بیشتر درباره موارد منسوخشده مهم در این نسخه Android، به صفحه موارد منسوخشده مراجعه کنید.