동작 변경사항: 모든 앱

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

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

핵심 기능

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

패키지 중지 상태 변경

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

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

您可以调用新的 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 환경에서 앱을 테스트하여 앱 동작에 예상치 못한 회귀가 없는지 확인하는 것이 좋습니다.

일부 앱에서 비공개 스페이스를 지원하기 위해 필요한 변경사항

私密空间是 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 中, 无法安装低于 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

보안 및 개인 정보 보호

Android 15에서는 일회용 비밀번호 (OTP) 사기를 방지하고 사용자의 민감한 콘텐츠를 보호하기 위한 강력한 조치를 도입하여 알림 리스너 서비스 및 화면 공유 보호를 강화하는 데 중점을 둡니다. 주요 개선사항에는 신뢰할 수 없는 앱에서 액세스할 수 있는 알림에서 OTP 삭제, 화면 공유 중에 알림 숨기기, OTP가 게시될 때 앱 활동 보호 등이 있습니다. 이번 변경사항은 승인되지 않은 행위자로부터 사용자의 민감한 콘텐츠를 안전하게 보호하기 위한 것입니다.

앱이 Android 15의 변경사항과 호환되도록 하려면 개발자는 다음 사항을 알아야 합니다.

OTP 수정

Android에서는 NotificationListenerService를 구현하는 신뢰할 수 없는 앱이 OTP가 감지된 알림에서 수정되지 않은 콘텐츠를 읽지 못하도록 합니다. 호환 기기 관리자 연결과 같은 신뢰할 수 있는 앱에는 이러한 제한사항이 적용되지 않습니다.

화면 공유 보호

  • 사용자의 개인 정보를 보호하기 위해 화면 공유 세션 중에 알림 콘텐츠가 숨겨집니다. 앱이 setPublicVersion()를 구현하는 경우 Android는 안전하지 않은 컨텍스트에서 대체 알림 역할을 하는 알림의 공개 버전을 표시합니다. 그렇지 않으면 추가 컨텍스트 없이 알림 콘텐츠가 수정됩니다.
  • 비밀번호 입력과 같은 민감한 콘텐츠는 사용자의 민감한 정보가 노출되지 않도록 원격 시청자에게 표시되지 않습니다.
  • OTP가 감지된 화면 공유 중에 알림을 게시하는 앱의 활동이 숨겨집니다. 앱 콘텐츠가 실행되면 원격 뷰어에서 숨겨집니다.
  • 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 API는 더 이상 사용되지 않거나 더 나은 개발자 환경 제공이나 새 플랫폼 기능 지원을 위해 리팩터링해야 할 수 있습니다. 이 경우 더 이상 사용되지 않는 API를 공식적으로 지원 중단하고 개발자에게 대신 사용할 대체 API를 안내합니다.

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