การเปลี่ยนแปลงลักษณะการทํางาน: แอปทั้งหมด

แพลตฟอร์ม Android 15 มีการเปลี่ยนแปลงลักษณะการทำงานที่อาจส่งผลต่อแอปของคุณ การเปลี่ยนแปลงลักษณะการทำงานต่อไปนี้จะมีผลกับแอปทั้งหมดเมื่อแอปทำงานบน Android 15 ไม่ว่าtargetSdkVersion จะเป็นเวอร์ชันใดก็ตาม คุณควรทดสอบแอป แล้วแก้ไข ตามความจำเป็นเพื่อรองรับฟีเจอร์เหล่านี้อย่างเหมาะสม (หากมี)

อย่าลืมตรวจสอบรายการการเปลี่ยนแปลงลักษณะการทำงานที่มีผลกับแอปที่กำหนดเป้าหมายเป็น Android 15 เท่านั้นด้วย

ฟังก์ชันหลัก

Android 15 จะแก้ไขหรือขยายความสามารถหลักต่างๆ ของระบบ Android

การเปลี่ยนแปลงสถานะของแพ็กเกจเป็นหยุด

เจตนาของสถานะ FLAG_STOPPED ของแพ็กเกจ (ซึ่งผู้ใช้สามารถมีส่วนร่วมในบิลด์ AOSP ได้โดยกดไอคอนแอปค้างไว้แล้วเลือก "บังคับหยุด") คือการทำให้แอปอยู่ในสถานะนี้เสมอจนกว่าผู้ใช้จะนำแอปออกจากสถานะนี้อย่างชัดเจนด้วยการเปิดแอปโดยตรงหรือโต้ตอบกับแอปโดยอ้อม (ผ่านชีตการแชร์หรือวิดเจ็ต การเลือกแอปเป็นวอลเปเปอร์แบบเคลื่อนไหว ฯลฯ) ใน Android 15 เราได้อัปเดตลักษณะการทํางานของระบบให้สอดคล้องกับลักษณะการทำงานที่ต้องการนี้ แอปควรถูกนำออกจากสถานะ "หยุดทำงาน" ผ่านการดําเนินการของผู้ใช้โดยตรงหรือโดยอ้อมเท่านั้น

นอกจากข้อจำกัดที่มีอยู่แล้ว ระบบยังยกเลิกIntent ที่รอดำเนินการทั้งหมดเมื่อแอปเข้าสู่สถานะ "หยุดทำงาน" ในอุปกรณ์ที่ใช้ Android 15 เพื่อรองรับลักษณะการทำงานที่ต้องการ เมื่อการดําเนินการของผู้ใช้นําแอปออกจากสถานะหยุดทำงาน ระบบจะส่งการออกอากาศ ACTION_BOOT_COMPLETED ไปยังแอปเพื่อให้ลงทะเบียน Intent ที่รอดําเนินการอีกครั้ง

คุณสามารถเรียกใช้เมธอดใหม่ ApplicationStartInfo.wasForceStopped() เพื่อยืนยันว่าแอปอยู่ในสถานะหยุดทำงานหรือไม่

รองรับขนาดหน้าหน่วยความจำขนาด 16 KB

从历史上看,Android 仅支持 4 KB 内存页面大小,这优化了系统内存性能,以适应 Android 设备通常拥有的平均总内存量。从 Android 15 开始,AOSP 支持配置为使用 16 KB 页面大小的设备(16 KB 设备)。如果您的应用直接或通过 SDK 间接使用任何 NDK 库,则需要重新构建应用,才能在这些 16 KB 设备上运行。

随着设备制造商不断制造出具有更大物理内存 (RAM) 的设备,许多此类设备将采用 16 KB(最终甚至更大)的页面大小来优化设备性能。添加对 16 KB 页面大小设备的支持,可让您的应用在这些设备上运行,并帮助您的应用受益于相关的性能改进。如果不重新编译,应用将无法在未来 Android 版本的 16 KB 设备上运行。

为帮助您为应用添加支持,我们提供了相关指南,介绍了如何检查应用是否受到影响、如何重新构建应用(如果适用),以及如何使用模拟器(包括 Android 模拟器的 Android 15 系统映像)在 16 KB 环境中测试应用

ประโยชน์และประสิทธิภาพที่เพิ่มขึ้น

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

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

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

ตรวจสอบว่าแอปของคุณได้รับผลกระทบหรือไม่

หากแอปใช้โค้ดเนทีฟ คุณควรสร้างแอปใหม่ ให้รองรับอุปกรณ์ขนาด 16 KB หากไม่แน่ใจว่าแอปใช้โค้ดเนทีฟหรือไม่ คุณสามารถใช้ APK Analyzer เพื่อระบุว่ามีโค้ดเนทีฟหรือไม่ จากนั้นตรวจสอบการจัดแนวของส่วน ELF สำหรับไลบรารีที่ใช้ร่วมกันที่คุณพบ Android Studio ยังมีฟีเจอร์ที่จะช่วยให้คุณตรวจหาปัญหาการจัดแนวโดยอัตโนมัติได้ด้วย

หากแอปใช้เฉพาะโค้ดที่เขียนในภาษาโปรแกรม Java หรือ Kotlin ซึ่งรวมถึงไลบรารีหรือ SDK ทั้งหมด แสดงว่าแอปของคุณรองรับอุปกรณ์ขนาด 16 KB อยู่แล้ว อย่างไรก็ตาม เราขอแนะนำให้คุณทดสอบแอปในสภาพแวดล้อมแบบ 16 KB เพื่อยืนยันว่าไม่มีการถดถอยที่ไม่คาดคิดในลักษณะการทำงานของแอป

การเปลี่ยนแปลงที่จำเป็นสำหรับแอปบางแอปเพื่อให้รองรับพื้นที่ส่วนตัว

私密空间是 Android 15 中推出的一项新功能,可让用户在设备上创建一个单独的空间,在额外的身份验证层保护下,防止敏感应用遭到窥探。由于私密空间中的应用具有受限的公开范围,因此某些类型的应用需要执行额外的步骤,才能查看和与用户私密空间中的应用互动。

所有应用

由于私密空间中的应用会保存在单独的用户资料中(类似于工作资料),因此应用不应假定其任何未位于主资料中的已安装副本都位于工作资料中。如果您的应用包含与工作资料应用相关的逻辑,并且做出了上述假设,则需要调整此逻辑。

医疗应用

当用户锁定私密空间时,私密空间中的所有应用都会停止运行,并且这些应用无法执行前台或后台活动,包括显示通知。此行为可能会严重影响安装在私密空间中的医疗应用的使用和功能。

私密空间设置体验会向用户发出警告,告知私密空间不适合需要执行关键前台或后台活动的应用,例如显示医疗应用发送的通知。不过,应用无法确定自己是否在私密空间中使用,因此无法在这种情况下向用户显示警告。

因此,如果您开发的是医疗应用,请检查此功能可能会对您的应用产生哪些影响,并采取适当的措施(例如告知用户不要在私密空间中安装您的应用),以免中断关键的应用功能。

启动器应用

如果您开发的是启动器应用,则必须执行以下操作,才能看到私密空间中的应用:

  1. 您的应用必须被指定为设备的默认启动器应用,即具有 ROLE_HOME 角色。
  2. 您的应用必须在应用的清单文件中声明 ACCESS_HIDDEN_PROFILES 普通权限。

声明 ACCESS_HIDDEN_PROFILES 权限的启动器应用必须处理以下私密空间用例:

  1. 您的应用必须为安装在私密空间中的应用提供单独的启动器容器。使用 getLauncherUserInfo() 方法确定要处理的用户个人资料类型。
  2. 用户必须能够隐藏和显示私密空间容器。
  3. 用户必须能够锁定和解锁私密空间容器。使用 requestQuietModeEnabled() 方法锁定(通过传递 true)或解锁(通过传递 false)私密空间。
  4. 在锁定状态下,私密空间容器中的任何应用都应不可见,也无法通过搜索等机制被发现。您的应用应为 ACTION_PROFILE_AVAILABLEACTION_PROFILE_UNAVAILABLE 广播注册接收器,并在私密空间容器的锁定或解锁状态发生变化时更新应用中的界面。这两种状态的广播都包含 EXTRA_USER,您的应用可以使用该常量来引用不公开个人资料的用户。

    您还可以使用 isQuietModeEnabled() 方法检查私密空间个人资料是否已锁定。

应用商店应用

私密空间包含一个“安装应用”按钮,用于启动隐式 intent 以将应用安装到用户的私密空间。为了让应用能够接收此隐式 intent,请在应用的清单文件中声明一个 <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 แอปที่มี ติดตั้ง targetSdkVersion ที่ต่ำกว่า 24 ไม่ได้ การกําหนดให้แอปเป็นไปตามระดับ API สมัยใหม่จะช่วยให้มั่นใจได้ว่าแอปจะมีความปลอดภัยและความเป็นส่วนตัวที่ดียิ่งขึ้น

มัลแวร์มักกำหนดเป้าหมายเป็น API ระดับต่ำกว่าเพื่อหลีกเลี่ยงความปลอดภัยและความเป็นส่วนตัว ที่เกิดขึ้นใน Android เวอร์ชันที่สูงกว่า ตัวอย่างเช่น แอปมัลแวร์บางแอปใช้ targetSdkVersion เป็น 22 เพื่อหลีกเลี่ยง Android 6.0 Marshmallow (API) เปิดตัวโมเดลสิทธิ์รันไทม์ในปี 2015 ระดับ 23) การเปลี่ยนแปลงนี้ใน Android 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) 欺诈并保护用户的敏感内容,重点是增强通知监听器服务和屏幕共享保护措施。主要增强功能包括从可供不可信应用访问的通知中隐去 OTP、在屏幕共享期间隐藏通知,以及在发布 OTP 时保护应用 activity。这些变更旨在保护用户的敏感内容,使其免受未经授权的操作者的侵害。

开发者需要注意以下事项,以确保其应用与 Android 15 中的变更兼容:

动态密码隐去

Android 会阻止实现 NotificationListenerService 的不受信任应用读取已检测到 OTP 的通知中的未隐去的内容。配套设备管理器关联等受信任应用不受这些限制。

屏幕共享保护

  • 在屏幕共享会话期间,系统会隐藏通知内容,以保护用户的隐私。如果应用实现了 setPublicVersion(),Android 会显示通知的公开版本,该版本在不安全情境中用作替换通知。否则,系统会隐去通知内容,不提供任何其他背景信息。
  • 系统会向远程观看者隐藏密码输入等敏感内容,以防止泄露用户的敏感信息。
  • 如果在屏幕共享期间检测到动态密码,系统会隐藏在该时间段内发布通知的应用的活动。应用内容在启动时会向远程查看器隐藏。
  • 除了 Android 自动识别敏感字段之外,开发者还可以使用 setContentSensitivity 手动将应用的部分标记为敏感,在屏幕共享期间,这些敏感字段会对远程观看者隐藏。
  • 开发者可以选择切换开发者选项下的停用屏幕共享防护选项,以便出于演示或测试目的豁免屏幕共享防护。默认的系统屏幕录制工具不受这些更改的影响,因为录制内容会保留在设备上。

กล้องและสื่อ

Android 15 จะทำการเปลี่ยนแปลงลักษณะการทำงานของกล้องและสื่อต่อไปนี้สำหรับแอปทั้งหมด

การเล่นเสียงโดยตรงและการเล่นเสียงที่ออฟโหลดจะทำให้แทร็กเสียงที่เปิดโดยตรงหรือออฟโหลดก่อนหน้านี้ไม่ถูกต้องเมื่อถึงขีดจำกัดของทรัพยากร

ก่อนที่จะมี Android 15 หากแอปขอการเล่นเสียงโดยตรงหรือส่งออกเสียงขณะที่แอปอื่นกำลังเล่นเสียงและถึงขีดจำกัดทรัพยากร แอปจะเปิด AudioTrack ใหม่ไม่สำเร็จ

ตั้งแต่ Android 15 เป็นต้นไป เมื่อแอปขอการเล่นโดยตรงหรือการเล่นแบบออฟโหลดและถึงขีดจำกัดทรัพยากร ระบบจะทำให้ออบเจ็กต์ AudioTrack ที่เปิดอยู่ในปัจจุบันเป็นโมฆะ ซึ่งจะป้องกันไม่ให้มีการตอบสนองคำขอแทร็กใหม่

(โดยทั่วไปแล้ว ระบบจะเปิดแทร็กเสียงแบบส่งตรงและแบบโอนออกสำหรับการเล่นรูปแบบเสียงที่บีบอัด กรณีการใช้งานทั่วไปสำหรับการเล่นเสียงโดยตรง ได้แก่ สตรีมมิงเสียงที่เข้ารหัสผ่าน HDMI ไปยังทีวี โดยปกติแล้วระบบจะใช้การโอนแทร็กเพื่อเล่นเสียงที่บีบอัดแล้วในอุปกรณ์เคลื่อนที่ที่มีการเร่งฮาร์ดแวร์ DSP)

ประสบการณ์ของผู้ใช้และ UI ของระบบ

Android 15 มีการเปลี่ยนแปลงบางอย่างที่มีจุดประสงค์เพื่อสร้างประสบการณ์ของผู้ใช้ที่สอดคล้องกันมากขึ้น และใช้งานง่าย

เปิดใช้ภาพเคลื่อนไหวของการย้อนกลับที่คาดการณ์ได้สำหรับแอปที่เลือกใช้

从 Android 15 开始,预测性返回动画的开发者选项已被移除。现在,如果应用已完全或在 activity 级别选择启用预测性返回手势,则系统会为其显示“返回主屏幕”“跨任务”和“跨 activity”等系统动画。如果您的应用受到了影响,请执行以下操作:

  • 确保您的应用已正确迁移,以使用预测性返回手势。
  • 确保 fragment 转场效果可与预测性返回导航搭配使用。
  • 请弃用动画和框架过渡,改用动画和 androidx 过渡。
  • FragmentManager 不认识的返回堆栈迁移。请改用由 FragmentManager 或 Navigation 组件管理的返回堆栈。

วิดเจ็ตจะปิดใช้เมื่อผู้ใช้บังคับให้แอปหยุด

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

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

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

ชิปแถบสถานะการฉายสื่อจะแจ้งเตือนผู้ใช้เกี่ยวกับการแชร์หน้าจอ การแคสต์ และการบันทึก

การลักลอบใช้การฉายหน้าจอจะเปิดเผยข้อมูลส่วนตัวของผู้ใช้ เช่น ข้อมูลทางการเงิน เนื่องจากผู้ใช้ไม่ทราบว่ามีการแชร์หน้าจออุปกรณ์

สำหรับแอปที่ทำงานในอุปกรณ์ที่ใช้ Android 15 QPR1 ขึ้นไป ชิปในแถบสถานะที่ใหญ่และเห็นได้ชัดจะแจ้งให้ผู้ใช้ทราบถึงการฉายหน้าจอที่กำลังดำเนินอยู่ ผู้ใช้สามารถแตะชิปเพื่อหยุดไม่ให้แชร์ แคสต์ หรือบันทึกหน้าจอ นอกจากนี้ การฉายหน้าจอจะหยุดโดยอัตโนมัติเมื่อหน้าจออุปกรณ์ล็อกอยู่

ชิปแถบสถานะสำหรับการแชร์หน้าจอ แคสต์ และบันทึก

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

默认情况下,您的应用会包含状态栏条状标签,并会在锁定屏幕激活时自动暂停屏幕投影。

如需详细了解如何针对这些用例测试应用,请参阅状态栏条状标签和自动停止

การจำกัดการเข้าถึงเครือข่ายในเบื้องหลัง

在 Android 15 中,如果应用在有效的进程生命周期之外启动网络请求,则会收到异常。通常是 UnknownHostException 或其他与套接字相关的 IOException。在有效生命周期之外发生的网络请求通常是因为应用在不再活跃后,不知不觉地继续发出网络请求。

为缓解此异常,请使用生命周期感知型组件,确保您的网络请求具有生命周期感知功能,并在离开有效的进程生命周期时取消。如果您非常重视即使用户离开应用也要发出网络请求,请考虑使用 WorkManager 调度网络请求,或使用前台服务继续执行对用户可见的任务。

การเลิกใช้งาน

ในการเปิดตัวแต่ละครั้ง Android API บางรายการอาจล้าสมัยหรือต้อง ปรับโครงสร้างใหม่เพื่อมอบประสบการณ์การใช้งานที่ดียิ่งขึ้นแก่นักพัฒนาแอปหรือรองรับความสามารถใหม่ๆ ของแพลตฟอร์ม ในกรณีเหล่านี้ เราจะเลิกใช้งาน API ที่ล้าสมัยอย่างเป็นทางการและ แนะนำให้นักพัฒนาแอปใช้ API อื่นแทน

การเลิกใช้งานหมายความว่าเราได้สิ้นสุดการสนับสนุน API อย่างเป็นทางการแล้ว แต่ API จะยังคงพร้อมให้บริการแก่นักพัฒนาแอปต่อไป ดูข้อมูลเพิ่มเติมเกี่ยวกับการเลิกใช้งานที่สำคัญใน Android รุ่นนี้ได้ที่หน้าการเลิกใช้งาน