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 페이지 크기 기기 지원을 통해 앱이 앱이 관련 성능의 이점을 누리는 데 도움이 됩니다 개선할 수 있습니다 다시 컴파일하지 않으면 16KB 기기에서 앱이 작동하지 않을 수 있습니다. 프로덕션화될 때 확인해야 합니다
앱 지원을 추가하는 데 도움이 되도록 다음을 확인하는 방법 앱이 영향을 받는 경우 앱 다시 빌드 (해당하는 경우) 및 앱 테스트 방법 에뮬레이터를 사용한 16KB 환경 (Android 15 포함) 시스템 이미지 참조).
이점 및 실적 향상
16KB 페이지 크기로 구성된 기기는 평균적으로 약간 더 많은 메모리를 사용하지만 시스템과 앱 모두에서 다양한 성능이 개선됩니다.
- 시스템에 메모리 문제가 있는 동안 앱 실행 시간 단축: 평균 3.16% 감소, 테스트한 일부 앱의 경우 더 큰 개선 (최대 30%)
- 앱 실행 중 전원 소모 감소: 평균 4.56% 감소
- 카메라 실행 속도 향상: 평균 핫 스타트 속도가 4.48%, 콜드 스타트 속도가 6.60% 빨라짐
- 시스템 부팅 시간 개선: 평균 8% (약 950밀리초) 개선됨
이러한 개선사항은 초기 테스트를 기반으로 하며 실제 기기의 결과는 다를 수 있습니다. 테스트를 계속하면서 앱의 잠재적 이점에 관한 추가 분석을 제공할 예정입니다.
앱이 영향을 받는지 확인하기
앱에서 네이티브 코드를 사용하는 경우 16KB 기기 지원을 포함하도록 앱을 다시 빌드해야 합니다. 앱에서 네이티브 코드를 사용하는지 확실하지 않은 경우 APK 분석 도구를 사용하여 네이티브 코드가 있는지 확인한 다음 찾은 공유 라이브러리의 ELF 세그먼트 정렬을 확인할 수 있습니다.
앱에서 모든 라이브러리나 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:
- Your app must be assigned as the default launcher app for the device—that
is, possessing the
ROLE_HOME
role. - 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:
- 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. - The user must be able to hide and show the private space container.
- The user must be able to lock and unlock the private space container. Use
the
requestQuietModeEnabled()
method to lock (by passingtrue
) or unlock (by passingfalse
) the private space. 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
andACTION_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 includeEXTRA_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 기반 그림 이모티콘 글꼴이 삭제됨
The legacy, PNG-based emoji font file (NotoColorEmojiLegacy.ttf
) has been
removed, leaving just the vector-based file. Beginning with Android 13 (API
level 33), the emoji font file used by the system emoji renderer changed from a
PNG-based file to a vector based file. The system retained
the legacy font file in Android 13 and 14 for compatibility reasons, so that
apps with their own font renderers could continue to use the legacy font file
until they were able to upgrade.
To check if your app is affected, search your app's code for references to the
NotoColorEmojiLegacy.ttf
file.
You can choose to adapt your app in a number of ways:
- Use platform APIs for text rendering. You can render text to a bitmap-backed
Canvas
and use that to get a raw image if necessary. - Add COLRv1 font support to your app. The FreeType open source library supports COLRv1 in version 2.13.0 and higher.
- As a last resort, you can bundle the legacy emoji font file
(
NotoColorEmoji.ttf
) into your APK, although in that case your app will be missing the latest emoji updates. For more information, see the Noto Emoji GitHub project page.
최소 타겟 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 introduces robust measures to combat one-time passcode (OTP) fraud and to protect the user's sensitive content, focusing on hardening the Notification Listener Service and screenshare protections. Key enhancements include redacting OTPs from notifications accessible to untrusted apps, hiding notifications during screenshare, and securing app activities when OTPs are posted. These changes aim to keep the user's sensitive content safe from unauthorized actors.
Developers need to be aware of the following to ensure their apps are compatible with the changes in Android 15:
OTP Redaction
Android will stop untrusted apps that implement a
NotificationListenerService
from reading unredacted content
from notifications where an OTP has been detected. Trusted apps such as
companion device manager associations are exempt from these restrictions.
Screenshare Protection
- Notification content is hidden during screen sharing sessions to preserve
the user's privacy. If the app implements
setPublicVersion()
, Android shows the public version of the notification which serves as a replacement notification in insecure contexts. Otherwise, the notification content is redacted without any further context. - Sensitive content like password input is hidden from remote viewers to prevent revealing the user's sensitive information.
- Activities from apps that post notifications during screenshare where an OTP has been detected will be hidden. App content is hidden from the remote viewer when launched.
- Beyond Android's automatic identification of sensitive fields, developers
can manually mark parts of their app as sensitive using
setContentSensitivity
, which is hidden from remote viewers during screenshare. - Developers can choose to toggle the Disable screen share protections option under Developer Options to be exempted from the screenshare protections for demo or testing purposes. The default system screen recorder is exempted from these changes, since the recordings remain on-device.
카메라 및 미디어
Android 15에서는 모든 앱의 카메라 및 미디어 동작을 다음과 같이 변경합니다.
리소스 한도에 도달하면 직접 및 오프로드 오디오 재생에서 이전에 열려 있던 직접 또는 오프로드 오디오 트랙이 무효화됨
Android 15 이전에는 다른 앱이 오디오를 재생하는 동안 앱이 직접 또는 오프로드 오디오 재생을 요청하고 리소스 제한에 도달한 경우 앱이 새 AudioTrack
를 열 수 없었습니다.
Android 15부터 앱이 직접 또는 오프로드 재생을 요청하고 리소스 한도에 도달하면 시스템은 현재 열려 있는 모든 AudioTrack
객체를 무효화하여 새 트랙 요청을 처리하지 못하게 합니다.
다이렉트 및 오프로드 오디오 트랙은 일반적으로 압축된 오디오 형식의 재생을 위해 열립니다. 직접 오디오를 재생하는 일반적인 사용 사례로는 HDMI를 통해 인코딩된 오디오를 TV로 스트리밍하는 것이 있습니다. 오프로드 트랙은 일반적으로 하드웨어 DSP 가속이 적용된 휴대기기에서 압축된 오디오를 재생하는 데 사용됩니다.)
사용자 환경 및 시스템 UI
Android 15에는 더 일관되고 직관적인 사용자 환경을 제공하기 위한 몇 가지 변경사항이 포함되어 있습니다.
선택한 앱에 뒤로 탐색 예측 애니메이션이 사용 설정됨
Android 15부터 뒤로 탐색 예측 애니메이션을 위한 개발자 옵션이 삭제되었습니다. 이제 홈으로 돌아가기, 교차 작업, 교차 활동과 같은 시스템 애니메이션이 완전히 또는 활동 수준에서 뒤로 탐색 예측 동작을 선택한 앱에 표시됩니다. 앱이 영향을 받는 경우 다음 조치를 취합니다.
- 앱이 뒤로 탐색 예측 동작을 사용하도록 올바르게 이전되었는지 확인하세요.
- 프래그먼트 전환이 뒤로 탐색 예측에서 작동하는지 확인합니다.
- 애니메이션 및 프레임워크 전환에서 이전하고 대신 애니메이터 및 androidx 전환을 사용하세요.
FragmentManager
가 알지 못하는 백 스택에서 이전합니다. 대신FragmentManager
또는 탐색 구성요소에서 관리하는 백 스택을 사용하세요.
사용자가 앱을 강제 종료하면 위젯이 사용 중지됨
사용자가 Android 15를 실행하는 기기에서 앱을 강제 종료하면 시스템은 모든 앱의 위젯을 일시적으로 사용 중지합니다. 위젯은 비활성화되어 사용자가 상호작용할 수 없습니다. 이는 Android 15부터 앱이 강제 종료되면 시스템이 앱의 대기 중인 인텐트를 모두 취소하기 때문입니다.
사용자가 다음에 앱을 실행하면 시스템에서 이러한 위젯을 다시 사용 설정합니다.
자세한 내용은 패키지 중지 상태 변경사항을 참고하세요.
미디어 프로젝션 상태 표시줄 칩이 사용자에게 화면 공유, 전송, 녹화에 관해 알립니다.
Screen projection exploits expose private user data such as financial information because users don't realize their device screen is being shared. Android has until now shown screen cast and screen record icons on the status bar, but the icons are small and often overlooked. Also, stopping screen sharing or recording is cumbersome because controls are in Quick Settings.
Android 15 introduces a new status bar chip that is large and prominent, which should alert users to any in-progress screen projection. Users can tap the chip to stop their screen from being shared, cast, or recorded.
To provide an intuitive user experience, screen projection now automatically stops when the device screen is locked.
Benefits and performance gains
The new media projection status bar chip enhances the user experience as follows:
- Alerts users to in-progress screen sharing, casting, or recording
- Enable users to terminate screen projection by tapping the chip
Automatic suspension of screen projection when the device screen is locked ensures user privacy.
Check if your app is impacted
By default, your app includes the new status bar chip and automatically suspends
screen projection when the lock screen activates. Test your app by implementing
the
onStop()
method of the
MediaProjection.Callback
.
Verify that your app responds appropriately when the screen projection stops as
a result of the user tapping the status bar chip or when the lock screen
activates.
지원 중단
각 출시에서 특정 Android API는 더 이상 사용되지 않거나 더 나은 개발자 환경 제공이나 새 플랫폼 기능 지원을 위해 리팩터링해야 할 수 있습니다. 이 경우 Google에서는 더 이상 사용되지 않는 API를 공식적으로 지원 중단하고 개발자에게 대신 사용할 대체 API를 안내합니다.
지원 중단이란 API에 관한 공식 지원은 종료되나 개발자는 계속 사용할 수 있다는 의미입니다. 이 Android 출시에서 주목할 만한 지원 중단에 관한 자세한 내용은 지원 중단 페이지를 참고하세요.