동작 변경사항: 모든 앱

Android 15 플랫폼에는 앱에 영향을 줄 수 있는 동작 변경사항이 있습니다. targetSdkVersion과 관계없이 Android 15에서 실행되는 모든 앱에 적용되는 동작 변경사항은 다음과 같습니다. 이러한 변경사항을 적절히 지원해야 하는 경우 앱을 테스트한 후 필요에 따라 수정해야 합니다.

또한 Android 15를 타겟팅하는 앱에만 영향을 주는 동작 변경사항 목록을 검토해야 합니다.

핵심 기능

Android 15는 Android 시스템의 다양한 핵심 기능을 수정하거나 확장합니다.

패키지 중지 상태 변경

패키지 FLAG_STOPPED 상태 (사용자가 앱 아이콘을 길게 누르고 '강제 종료'를 선택하여 AOSP 빌드에서 참여할 수 있음)의 의도는 항상 사용자가 앱을 직접 실행하거나 공유 시트 또는 위젯을 통해 앱과 간접적으로 상호작용 (앱을 라이브 배경화면으로 선택 등)하여 이 상태에서 앱을 명시적으로 삭제할 때까지 앱을 이 상태로 유지하는 것이었습니다. Android 15에서는 의도된 동작에 맞게 시스템 동작을 업데이트했습니다. 앱은 직접 또는 간접적인 사용자 작업을 통해서만 중지된 상태에서 삭제되어야 합니다.

의도한 동작을 지원하기 위해 시스템은 기존 제한사항 외에도 앱이 Android 15를 실행하는 기기에서 중지된 상태가 되면 모든 대기 중인 인텐트를 취소합니다. 사용자 작업으로 인해 앱이 중지된 상태에서 삭제되면 ACTION_BOOT_COMPLETED 브로드캐스트가 앱에 전송되어 대기 중인 인텐트를 다시 등록할 수 있는 기회를 제공합니다.

ApplicationStartInfo.wasForceStopped() 메서드를 호출하여 앱이 중지 상태인지 확인할 수 있습니다.

16KB 페이지 크기 지원

이전에는 Android에서 4KB 메모리 페이지 크기만 지원하여 Android 기기가 일반적으로 보유한 평균 총 메모리에 맞게 시스템 메모리 성능을 최적화했습니다. Android 15부터 AOSP는 페이지 크기 16KB (16KB 기기)를 사용하도록 구성된 기기를 지원합니다. 앱이 NDK 라이브러리를 직접 또는 SDK를 통해 간접적으로 사용하는 경우 이러한 16KB 기기에서 작동하도록 앱을 다시 빌드해야 합니다.

기기 제조업체가 더 많은 실제 메모리 (RAM)가 있는 기기를 계속 빌드함에 따라 이러한 기기 중 다수가 기기 성능을 최적화하기 위해 16KB (결국 더 큰) 페이지 크기를 채택할 것입니다. 16KB 페이지 크기 기기에 대한 지원을 추가하면 앱이 이러한 기기에서 실행될 수 있으며 앱이 관련 성능 개선의 이점을 누릴 수 있습니다. 다시 컴파일하지 않으면 앱이 향후 Android 출시에서 16KB 기기에서 작동하지 않습니다.

앱 지원을 추가할 수 있도록 앱이 영향을 받는지 확인하는 방법, 앱을 다시 빌드하는 방법 (해당하는 경우), 에뮬레이터 (Android Emulator용 Android 15 시스템 이미지 포함)를 사용하여 16KB 환경에서 앱을 테스트하는 방법에 관한 안내를 제공해 드렸습니다.

이점 및 성능 향상

16KB 페이지 크기로 구성된 기기는 평균적으로 약간 더 많은 메모리를 사용하지만 시스템과 앱 모두에서 다양한 성능이 개선됩니다.

  • 시스템에 메모리 문제가 있는 동안 앱 실행 시간 단축: 평균 3.16% 감소, 테스트한 일부 앱의 경우 더 큰 개선 (최대 30%)
  • 앱 실행 중 전원 소모 감소: 평균 4.56% 감소
  • 카메라 실행 속도 향상: 평균 핫 스타트 속도가 4.48%, 콜드 스타트 속도가 6.60% 빨라짐
  • 시스템 부팅 시간 개선: 평균 8% (약 950밀리초) 개선됨

이러한 개선사항은 초기 테스트를 기반으로 하며 실제 기기의 결과는 다를 수 있습니다. 테스트를 계속하면서 앱의 잠재적 이점에 관한 추가 분석을 제공할 예정입니다.

앱이 영향을 받는지 확인하기

앱에서 네이티브 코드를 사용하는 경우 16KB 기기를 지원하도록 앱을 다시 빌드해야 합니다. 앱에서 네이티브 코드를 사용하는지 확실히 알 수 없는 경우 APK 분석기를 사용하여 네이티브 코드가 있는지 확인한 다음 찾은 공유 라이브러리의 ELF 세그먼트 정렬을 확인하면 됩니다. Android 스튜디오는 정렬 문제를 자동으로 감지하는 데 도움이 되는 기능도 제공합니다.

앱에서 모든 라이브러리나 SDK를 비롯하여 Java 프로그래밍 언어나 Kotlin으로 작성된 코드만 사용한다면 이미 16KB 기기를 지원하는 것입니다. 하지만 16KB 환경에서 앱을 테스트하여 앱 동작에 예기치 않은 회귀가 없는지 확인하는 것이 좋습니다.

일부 앱이 비공개 스페이스를 지원하는 데 필요한 변경사항

Private space is a new feature in Android 15 that lets users create a separate space on their device where they can keep sensitive apps away from prying eyes, under an additional layer of authentication. Because apps in the private space have restricted visibility, some types of apps need to take additional steps to be able to see and interact with apps in a user's private space.

All apps

Because apps in the private space are kept in a separate user profile, similar to work profiles, apps shouldn't assume that any installed copies of their app that aren't in the main profile are in the work profile. If your app has logic related to work profile apps that make this assumption, you'll need to adjust this logic.

Medical apps

When a user locks the private space, all apps in the private space are stopped, and those apps can't perform foreground or background activities, including showing notifications. This behavior might critically impact the use and function of medical apps installed in the private space.

The private space setup experience warns users that the private space is not suitable for apps that need to perform critical foreground or background activities, such as showing notifications from medical apps. However, apps can't determine whether or not they're being used in the private space, so they can't show a warning to the user for this case.

For these reasons, if you develop a medical app, review how this feature might impact your app and take appropriate actions—such as informing your users not to install your app in the private space—to avoid disrupting critical app capabilities.

Launcher apps

If you develop a launcher app, you must do the following before apps in the private space will be visible:

  1. Your app must be assigned as the default launcher app for the device—that is, possessing the ROLE_HOME role.
  2. Your app must declare the ACCESS_HIDDEN_PROFILES normal permission in your app's manifest file.

Launcher apps that declare the ACCESS_HIDDEN_PROFILES permission must handle the following private space use cases:

  1. Your app must have a separate launcher container for apps installed in the private space. Use the getLauncherUserInfo() method to determine which type of user profile is being handled.
  2. The user must be able to hide and show the private space container.
  3. The user must be able to lock and unlock the private space container. Use the requestQuietModeEnabled() method to lock (by passing true) or unlock (by passing false) the private space.
  4. While locked, no apps in the private space container should be visible or discoverable through mechanisms such as search. Your app should register a receiver for the ACTION_PROFILE_AVAILABLE and ACTION_PROFILE_UNAVAILABLE broadcasts and update the UI in your app when the locked or unlocked state of the private space container changes. Both of these broadcasts include EXTRA_USER, which your app can use to refer to the private profile user.

    You can also use the isQuietModeEnabled() method to check whether the private space profile is locked or not.

App store apps

The private space includes an "Install Apps" button that launches an implicit intent to install apps into the user's private space. In order for your app to receive this implicit intent, declare an <intent-filter> in your app's manifest file with a <category> of 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 수준을 충족하도록 요구하면 더 나은 보안과 있습니다.

멀웨어는 최신 Android 버전에 도입된 보안 및 개인 정보 보호 기능을 우회하기 위해 낮은 API 수준을 타겟팅하는 경우가 많습니다. 예를 들어 일부 멀웨어 앱은 targetSdkVersion 22를 사용하여 2015년 Android 6.0 Marshmallow(API 수준 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이 더 낮은 모든 앱 설치된 상태로 유지됩니다.

이전 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에서는 모든 앱의 카메라 및 미디어 동작이 다음과 같이 변경됩니다.

리소스 한도에 도달하면 직접 및 오프로드 오디오 재생으로 인해 이전에 열린 직접 또는 오프로드 오디오 트랙이 무효화됨

Before Android 15, if an app requested direct or offload audio playback while another app was playing audio and the resource limits were reached, the app would fail to open a new AudioTrack.

Beginning with Android 15, when an app requests direct or offload playback and the resource limits are reached, the system invalidates any currently open AudioTrack objects which prevent fulfilling the new track request.

(Direct and offload audio tracks are typically opened for playback of compressed audio formats. Common use-cases for playing direct audio include streaming encoded audio over HDMI to a TV. Offload tracks are typically used to play compressed audio on a mobile device with hardware DSP acceleration.)

사용자 환경 및 시스템 UI

Android 15에는 더 일관되고 직관적인 사용자 환경을 만들기 위한 몇 가지 변경사항이 포함되어 있습니다.

선택한 앱에 뒤로 탐색 예측 애니메이션 사용 설정

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

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

사용자가 앱을 강제 종료하면 위젯이 사용 중지됨

사용자가 Android 15를 실행하는 기기에서 앱을 강제 종료하면 시스템은 일시적으로 앱의 모든 위젯을 사용 중지합니다. 위젯이 비활성화되어 있고 사용자는 위젯과 상호작용할 수 없습니다. Android 15부터 시스템은 앱이 강제 종료될 때 앱의 대기 중인 인텐트를 모두 취소하기 때문입니다.

시스템은 사용자가 다음에 앱을 실행할 때 이러한 위젯을 다시 사용 설정합니다.

자세한 내용은 패키지 중지 상태 변경사항을 참고하세요.

미디어 프로젝션 상태 표시줄 칩은 사용자에게 화면 공유, 전송, 녹화를 알립니다.

화면 프로젝션 악용은 사용자가 기기 화면이 공유되고 있다는 사실을 모르기 때문에 금융 정보와 같은 민감한 사용자 데이터를 노출합니다.

Android 15 QPR1 이상을 실행하는 기기에서 실행되는 앱의 경우 크고 눈에 잘 띄는 상태 표시줄 칩이 진행 중인 화면 프로젝션을 사용자에게 알립니다. 사용자는 칩을 탭하여 화면 공유, 전송, 녹화를 중지할 수 있습니다. 또한 기기 화면이 잠기면 화면 프로젝션이 자동으로 중지됩니다.

화면 공유, 전송, 녹화를 위한 상태 표시줄 칩입니다.

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

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

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

백그라운드 네트워크 액세스 제한

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

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

지원 중단

각 출시에서 특정 Android API는 더 이상 사용되지 않거나 더 나은 개발자 환경 제공이나 새 플랫폼 기능 지원을 위해 리팩터링해야 할 수 있습니다. 이 경우 Google은 더 이상 사용되지 않는 API를 공식적으로 지원 중단하고 개발자에게 대신 사용할 대체 API를 안내합니다.

지원 중단이란 API에 관한 공식 지원은 종료되나 개발자는 계속 사용할 수 있다는 의미입니다. 이번 Android 출시에서 주목할 만한 지원 중단에 대해 자세히 알아보려면 지원 중단 페이지를 참고하세요.