버미

[안드로이드] API 36 버전 업데이트 정리 본문

안드로이드

[안드로이드] API 36 버전 업데이트 정리

Bum_2 2026. 5. 1. 21:40

안드로이드 API 36버전에서 변화되는 내용을 정리하고자 한다.

먼저, 안드로이드 16(API 레벨 36) OS를 갖는 모든 디바이스에 적용되는 내용부터 살펴보자. 

정식 출시는 25년 6월에 출시되었고 구글 플레이 의무화는 26년 8월 부터다.


다음은 targetSdkVersion에 관계없이, Android 16 기기 위에서 실행되는 모든 앱에 적용된다.

 

 1. Job 스케줄링 실행 쿼터 강화

백그라운드 Job의 실행 시간 쿼터가 더 엄격하게 관리된다.

 

아래 세 가지 조건에 따라 쿼터 적용 방식이 달라진다.

 

  • 앱 대기 버킷(Standby Bucket): Active 버킷에도 넉넉한 쿼터가 적용되기 시작
  • 앱 가시성 상태: 앱이 화면에 보이는 동안 시작된 Job이 숨겨진 후에도 계속되면 쿼터 적용
  • 포그라운드 서비스 동시 실행: 포그라운드 서비스와 함께 실행 중인 Job도 쿼터 적용 대상

대용량 데이터 전송 작업은 User-initiated data transfer jobs 사용을 권장

 

앱 대기 버킷(App Standby Bucket)과 쿼터

앱 대기 버킷은 Android 9(API 28)부터 도입된 배터리 관리 메커니즘으로, 시스템이 각 앱을 사용 빈도와 패턴에 따라 다섯 등급(Active, Working Set, Frequent, Rare, Restricted) 중 하나로 자동 분류하는 개념이다.
분류는 전적으로 개인화되어 있어서 같은 앱이라도 사용자의 행동 패턴에 따라 다른 버킷에 들어간다. 매일 출퇴근길에 쓰는 지도 앱은 누군가에겐 Active 버킷이지만, 1년에 한 번 여행 갈 때만 쓰는 사람에겐 Rare 버킷이 되는 식이다.
머신러닝(Adaptive Battery)이 탑재된 기기에서는 한 발 더 나아가 "이 사용자가 이 시간대에 이 앱을 쓸 가능성"까지 예측해서 동적으로 버킷을 조정하고, ML이 없는 기기에서는 단순히 최근 사용 시점 기준으로 정렬한다.

쿼터는 이 버킷 등급에 따라 차등 적용되는 백그라운드 잡(Job)의 실행 시간 예산이다.
일회성 타이머가 아니라 롤링 시간 윈도우 안에서의 누적 실행 시간 한도라서, "지난 60분 동안 이미 20분을 썼다면 더 못 돌리고 시간이 지나면서 예산이 다시 차오른다"는 식으로 동작한다.
Working Set은 60분당 일반 잡 20분,
Frequent는 4시간당 10분,
Rare는 24시간당 10분으로 점점 빡빡해지며,
Restricted는 하루 1회 10분 배치 세션 안에서 다른 앱 잡들과 묶여서만 실행될 정도로 가혹하다.
Active 버킷은 Android 16 이전엔 무제한이었지만, 이제는 "넉넉한(generous)" 쿼터가 적용되기 시작했다.

Android 16의 핵심 변경은 이 쿼터의 사각지대를 없앤 것이다. 기존엔 앱이 화면에 떠 있는 동안 시작된 잡이나 포그라운드 서비스와 함께 도는 잡은 사실상 무제한으로 돌 수 있었는데, 이런 우회로가 막혔다. 단 포그라운드 서비스(FGS) 자체는 별도 규칙을 따르므로 mediaPlayback이나 location 같은 타입은 여전히 무기한 실행되고, 쿼터에 걸려 중단되는 건 어디까지나 그 옆에서 함께 돌던 백그라운드 잡들이다.
Spotify의 음악 재생이나 카카오맵의 내비게이션은 그대로 살아 있고, 그 앱들이 사용자 모르게 묻어 돌리던 동기화·캐싱·통계 업로드 같은 잡들이 제어 대상이 된다.

대용량 데이터 전송은 User-initiated data transfer job을 쓰고, 일반 백그라운드 작업은 WorkManager에 맡겨 시스템이 최적 타이밍을 잡도록 하며, 충전 중·Wi-Fi 연결 같은 제약 조건을 적극 활용해 사용자 버킷이 무엇이든 시스템이 알아서 풀어주는 시점에 작업이 실행되도록 설계하는 것이 핵심이다.


2. Intent 리다이렉션 공격 기본 차단

악성 앱이 인텐트 extras를 조작해 취약한 앱의 비공개 컴포넌트를 실행하는 Intent Redirection 공격에 대해 플랫폼 수준의 보안이 기본 적용된다. 일반적인 방식으로 인텐트를 사용하는 앱은 영향이 없다.


3. 블루투스 본드 손실 처리 개선

기존에는 블루투스 기기와의 본드(페어링 정보)가 손실되면 시스템이 자동으로 재페어링을 시도한다.

Android 16부터는 연결을 끊고 본드 정보를 유지한 채 사용자에게 시스템 다이얼로그로 알려준다. 아울러 두 가지 새 인텐트가 추가된다.

  - ACTION_KEY_MISSING: 원격 본드 손실 감지 시 수신
  - ACTION_ENCRYPTION_CHANGE: 링크 암호화 상태 변경 시 수신

OEM마다 구현 방식이 다를 수 있으므로 실기기 테스트를 권장


 4. 가상 디바이스 디스플레이 오버라이드

차량 인포테인먼트, VR 기기 등 가상 디바이스 소유자가 앱을 외부 화면에 투영할 때, 해당 앱의 방향(orientation), 비율, 리사이즈 제한을 무시하도록 설정할 수 있습니다.




targetSdk 36 지정 시 추가 적용 사항
build.gradle에서 targetSdkVersion = 36으로 설정했을 때만 추가로 적용된다.


1. 대화면 Adaptive Layout 강제 적용

가장 영향이 큰 변경사항으로, 최소 너비 600dp 이상인 화면(태블릿, 폴더블 펼침 화면 등)에서 아래 속성이 모두 무시된다.

  - android:screenOrientation
  - resizeableActivity="false"
  - 가로세로 비율(Aspect Ratio) 제한 전체

앱이 디스플레이 전체를 채우며, 필러박스(letterbox / pillarbox)가 사라진다. 세로 고정으로 개발된 앱은 레이아웃이 깨질 수 있어 사전 검증이 필수.

예외 대상
  - 게임 앱 (android:appCategory="game" 설정 시)
적용 대상

 - Galaxy Z Fold 펼친 상태, 갤럭시 탭 등

 


2. 엣지 투 엣지(Edge-to-Edge) 강제 적용

앱 배경이 상태 바, 내비게이션 바 아래까지 확장된다. UI 요소와 터치 영역은 기존과 동일하게 safe zone 내에 유지되지만, 배경 색상이 시스템 바 영역까지 채워진다. Android 11(API 30) 이상 기기에 적용.

 

 

3. MediaStore 버전 앱별 고유값 변경

 

MediaStore.getVersion()이 이제 앱마다 다른 고유값을 반환.

버전 문자열의 포맷을 파싱해서 추가 정보를 추출하는 로직이 있다면 수정이 필요하다.



4. scheduleAtFixedRate 누락 실행 제한

앱이 유효하지 않은 라이프사이클 상태에 있는 동안 예약 실행이 여러 번 누락되더라도, 앱 복귀 시 최대 1번만 즉시 실행된다.

기존에는 누락된 모든 실행이 한꺼번에 몰아서 실행되었다.

STPE_SKIP_MULTIPLE_MISSED_PERIODIC_TASKS 호환 플래그로 사전 테스트 가능.

 

 

5. 로컬 네트워크 접근 권한 (옵트인 단계)

LAN 기기(프린터, 스마트TV, NAS 등)와의 통신에 별도 권한이 필요해진다.

API 36에서는 옵트인 테스트 단계이며, API 37부터 의무화.

 


6. 카메라 Pro API 강화

야간 모드 씬 감지, 하이브리드 자동 노출, 정밀 색온도 조절, 모션 포토 Intent 액션 추가,

UltraHDR HEIC 인코딩 지원이 추가된다.


7. Health Connect 업데이트

새 데이터 타입 ACTIVITY_INTENSITY가 추가되고, WHO 가이드라인 기반의 FHIR 포맷 의료 기록 읽기·쓰기 API가 도입된다.



8. 예측 뒤로가기 (3-button 내비게이션)

기존에 제스처 내비게이션에서만 지원되던 Predictive Back 애니메이션이 3-button 내비게이션에서도 동작한다. finishAndRemoveTaskCallback(), moveTaskToBackCallback()도 함께 추가된다.


9. 내장 사진 선택기 API

앱 뷰 계층 구조에 사진 선택기를 직접 임베드할 수 있는 새 API가 추가됩니다. 광범위한 미디어 접근 권한 없이 사용할 수 있다.


10. SDK_INT_FULL / 마이너 버전 지원

VERSION_CODES_FULL 열거형과 Build.getMinorSdkVersion() 메서드가 추가되어 주 버전(36)과 부 버전(36.1 등)을 구분한 API 분기 처리가 가능해진다.


11. WiFi 위치 보안 강화

WiFi 6(802.11az) 기반 근접 센싱의 정확도와 보안이 향상된다.

 


- Reference

  - Android 16 동작 변경사항 — 모든 앱
    
  - Android 16 동작 변경사항 — targetSdk 36 앱
    
  - Android 16 새 기능 및 API
    
  - Android 16 Orientation & Resizability 변경사항 (공식 블로그)