Android 15 주요 변경사항 정리

Ryan·2026년 6월 18일

Android 버전 대응

목록 보기
1/1
post-thumbnail

이번 시리즈는 Android 개발을 하면서 버전별 변경사항을 제대로 이해할 필요성을 느껴 작성하게 되었습니다.

첫 번째 주제는 Android 15입니다. 이후에는 Android 16, 17처럼 최신 버전을 살펴보고, 이전 버전들도 순서대로 정리할 예정입니다. 이 시리즈에서는 각 버전의 모든 변경사항을 나열하기보다는, Android 개발자가 실제로 확인하고 대응해야 할 내용을 중심으로 정리해볼게요.

Android 15 배포일: 2024.10.15 / API Level 35

Android 15 주요 변경사항

한줄 요약:
Edge-to-Edge UI 대응부터 보안, 백그라운드 작업, 메모리 호환성까지 전반적으로 점검이 필요한 버전

  • Edge-to-Edge 기본 적용
  • 16KB Page Size 지원
  • Foreground Service 제한 변경
  • TLS 1.0 / 1.1 제한
  • Intent 처리 강화

Edge-to-Edge 기본 적용

Android 15에서 가장 먼저 확인해야 할 변화입니다.

API 35를 타겟팅하는 앱은 기본적으로 시스템 바 영역까지 콘텐츠가 확장됩니다. 기존에는 앱 콘텐츠가 상태 표시줄과 내비게이션 바를 자동으로 피해 배치되었지만, 이제는 콘텐츠가 화면 끝까지 그려집니다.

Window Insets 처리를 하지 않으면 버튼이 내비게이션 바에 가려지거나 제목이 상태 표시줄과 겹치는 문제가 실제로 발생합니다. 디자인 이슈가 아니라 화면이 깨지는 문제입니다.

반드시 확인해야 할 UI 요소:

  • 상단 Toolbar / TopAppBar
  • 하단 NavigationBar / FloatingActionButton / 고정 버튼
  • RecyclerView, LazyColumn의 마지막 아이템
  • WebView 내부 콘텐츠

Insets 처리 방법

Compose에서는 WindowInsets을 활용해 시스템 바 높이만큼 padding을 추가하는 방식으로 대응합니다. Material 3의 Scaffold는 기본적으로 Insets을 처리하지만, 직접 구성한 레이아웃이라면 safeDrawingPadding() 또는 windowInsetsPadding(WindowInsets.safeDrawing)을 명시적으로 적용해야 합니다.

View 시스템에서는 ViewCompat.setOnApplyWindowInsetsListener를 사용해 각 뷰에 Insets을 적용합니다. windowSoftInputModefitsSystemWindows 속성을 혼용하면 예상치 못한 레이아웃이 발생할 수 있으므로, Insets 처리 방식을 일관성 있게 통일하는 것이 좋습니다.

16KB Page Size 지원

Android 15부터 16KB 메모리 페이지 크기를 사용하는 기기를 지원합니다.

페이지 크기란 무엇인가

페이지(Page)는 운영체제가 물리 메모리를 관리하는 기본 단위입니다. 기존 Android 기기는 4KB 페이지를 사용했는데, 이는 Linux의 오랜 기본값이었습니다. 16KB 페이지는 같은 양의 메모리를 더 큰 단위로 묶어 관리하므로, 메모리 매핑 작업이 줄어들고 캐시 효율이 높아집니다. 실제로 Google 내부 테스트에서 앱 시작 시간이 최대 10% 단축되는 성능 향상이 확인되었습니다.

왜 네이티브 라이브러리만 영향을 받는가

Kotlin이나 Java로 작성된 코드는 ART(Android Runtime) 위에서 실행되기 때문에 페이지 크기 변화를 직접 다루지 않습니다. 반면 .so 파일(공유 라이브러리)은 운영체제가 직접 메모리에 매핑하기 때문에, 4KB 단위로 정렬된 라이브러리는 16KB 환경에서 로드 자체가 실패할 수 있습니다.

영향을 받는 앱:

  • NDK를 직접 사용하거나 C/C++ 코드가 포함된 앱
  • .so 파일이 포함된 앱
  • 게임 엔진, 영상·음성 처리, 보안 SDK 등 네이티브 라이브러리를 사용하는 앱

확인해야 할 항목:

  • 사용 중인 NDK 버전이 최신인지 (NDK r27 이상 권장)
  • .so 파일이 16KB 경계로 정렬(ELF alignment)되어 있는지
  • 외부 SDK 제공사가 16KB 환경을 지원하는 버전을 제공하는지
  • Android 15 이상의 에뮬레이터에서 16KB 모드로 앱이 정상 실행되는지

직접 작성한 네이티브 코드가 없더라도, APK 내부에 .so 파일이 포함되어 있다면 영향을 받을 수 있습니다. apkanalyzer 또는 Android Studio의 APK Analyzer로 .so 파일 포함 여부를 확인할 수 있습니다.

Foreground Service 제한 변경

Android는 버전이 올라갈수록 백그라운드 실행을 점점 더 엄격하게 제한합니다.

dataSync timeout

dataSync 타입의 Foreground Service는 이제 6시간이라는 실행 시간 제한이 생겼습니다. 24시간 내에 누적 실행 시간이 6시간을 초과하면 시스템이 해당 서비스를 강제로 중단합니다. 대용량 파일 동기화나 오랜 시간 데이터를 주고받는 작업이라면 이 제한에 걸릴 수 있습니다. 이런 경우에는 WorkManager의 장기 실행 작업(setExpedited 또는 일반 PeriodicWorkRequest)으로 전환하는 것이 더 적합합니다.

mediaProcessing 타입 추가

영상 트랜스코딩, 음성 변환, 이미지 필터 처리처럼 미디어 데이터를 가공하는 작업은 기존에 dataSync나 다른 타입으로 대응하는 경우가 많았습니다. Android 15에서는 이런 작업을 위한 mediaProcessing 타입이 별도로 추가되었습니다. mediaProcessing에도 동일하게 6시간 timeout이 적용됩니다.

확인해야 할 항목:

  • Foreground Service 타입이 실제 작업 목적과 맞게 선언되어 있는지
  • dataSync로 선언한 작업이 6시간을 초과할 가능성이 있는지
  • 미디어 처리 작업에 mediaProcessing 타입으로 전환이 필요한지
  • 부팅 완료 후 바로 Foreground Service를 시작하는 흐름이 있는지
  • WorkManager로 대체 가능한 작업이 있는지

Foreground Service에서 장기간 작업을 수행하도록 구현된 부분이 있다면 이 기회에 다시 검토하는 것이 좋습니다.

TLS 1.0 / 1.1 제한

Android 15를 타겟팅하는 앱에서는 TLS 1.0과 1.1 사용이 제한됩니다.

TLS 버전별 차이

TLS(Transport Layer Security)는 네트워크 통신을 암호화하는 프로토콜입니다. TLS 1.0은 1999년, TLS 1.1은 2006년에 발표되었으며, 현재는 POODLE, BEAST 등 알려진 취약점이 존재합니다. TLS 1.2는 2008년, TLS 1.3은 2018년에 발표되었고, 현재 보안 표준으로 권장되는 버전은 1.2 이상입니다. Android 15에서는 TLS 1.0과 1.1로의 연결 시도 자체가 실패합니다.

대부분의 최신 서버는 이미 TLS 1.2 이상을 사용하기 때문에 영향이 없는 경우가 많습니다. 하지만 오래된 서버나 사내 시스템과 통신하는 앱이라면 반드시 확인해야 합니다.

확인해야 할 항목:

  • 통신하는 모든 서버가 TLS 1.2 이상을 지원하는지
  • 레거시 API 서버나 내부 시스템과 통신하는 부분이 있는지
  • OkHttp, Retrofit 등 라이브러리 설정이 최신 보안 정책과 충돌하지 않는지

Intent 처리 강화

Android 15에서는 Intent 처리가 더 엄격해졌습니다.

구체적으로 무엇이 바뀌었는가

기존에는 암시적 Intent를 보낼 때 action이 일치하지 않더라도 intent-filter가 느슨하게 매칭되는 경우가 있었습니다. Android 15부터는 두 가지 규칙이 명확히 적용됩니다.

첫째, action이 없는 Intent는 어떤 intent-filter와도 매칭되지 않습니다. 기존에는 action 없이 특정 컴포넌트를 호출하더라도 동작하는 경우가 있었지만, 이제는 명시적 Intent(패키지명과 클래스명을 모두 지정)를 사용하거나 적절한 action을 포함해야 합니다.

둘째, 특정 컴포넌트를 대상으로 하는 Intent는 해당 컴포넌트의 intent-filter에 선언된 action, category, data와 정확히 일치해야 합니다. 예를 들어 외부 앱의 Activity를 암시적으로 호출할 때 intent-filter와 맞지 않으면 ActivityNotFoundException이 발생할 수 있습니다.

다음 기능이 있다면 Android 15에서 테스트해보는 것이 좋습니다:

  • 딥링크
  • 앱 간 공유
  • 외부 브라우저 호출
  • 파일 열기
  • 다른 앱의 Activity 실행
  • BroadcastReceiver 연동

기존에 느슨하게 동작하던 Intent 흐름이 Android 15에서 다르게 동작할 수 있습니다.

체크리스트

영역확인 항목영향 대상
UIEdge-to-Edge로 상단 앱바, 하단 버튼, 스크롤 목록이 가려지지 않는지API 35 타겟팅 앱 전체
UIWebView 화면에서 Insets 처리 필요한지WebView 사용 앱
백그라운드dataSync Foreground Service의 누적 실행 시간이 6시간을 초과하는지Foreground Service 사용 앱
백그라운드미디어 처리 작업에 mediaProcessing 타입으로 전환이 필요한지미디어 처리 앱
백그라운드부팅 직후 Foreground Service를 시작하는 흐름이 있는지자동 시작 기능 앱
보안통신 서버가 TLS 1.2 이상을 지원하는지레거시 서버와 통신하는 앱
보안딥링크, 앱 간 공유, 외부 앱 호출이 정상 동작하는지Intent 기반 연동 앱
성능/호환APK에 .so 파일이 포함되어 있는지NDK, 외부 SDK 사용 앱
성능/호환사용 중인 네이티브 라이브러리가 16KB Page Size를 지원하는지네이티브 라이브러리 포함 앱

마무리

Edge-to-Edge 기본 적용은 API 35를 타겟팅하는 순간 바로 화면 깨짐으로 이어질 수 있고, Foreground Service 제한TLS 제한은 기존 코드가 그대로 동작하지 않을 수 있는 변화입니다. 16KB Page Size는 당장 모든 앱이 대응해야 하는 건 아니지만, 네이티브 라이브러리를 포함하는 앱이라면 미리 확인해두는 것이 좋습니다.

다음 글에서는 Android 16의 주요 변경사항을 정리해보겠습니다.

출처

https://developer.android.com/about/versions/15/behavior-changes-all

profile
Seungjun Gong

0개의 댓글