버미

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

안드로이드

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

Bum_2 2025. 6. 28. 18:15

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

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


1. 16KB 페이지 크기 지원

리눅스 커널 기반인 안드로이드는 4KB 페이지 크기를 사용해왔다. 하지만 안드로이드 15부터는 일부 디바이스에서 16KB 페이지 크기를 지원한다.

자바/코틀린만 사용하는 앱은 코드가 메모리 구조에 의존하지 않아서, 신경쓰지 않아도 된다.

하지만, NDK를 사용하는 앱(Native 코드 포함)은 16KB 페이지 지원 빌드가 필요하다.

 

If your app only uses code written in the Java programming language or in Kotlin, including all libraries or SDKs, then your app already supports 16 KB devices. Nevertheless, we recommend that you 
test your app in a 16 KB environment
 to verify that there are no unexpected regressions in app behavior.
Android Developers: 16KB Page Size

 

이로 인해 아래와 같은 성능 상, 이점이 있다.

(16KB 페이지 전용 디바이스에서의 평균 효과, 4KB 페이지 디바이스는 해당 X)

항목 성능 개선 수치
앱 실행 시간 평균 3.16% 단축
(일부 앱 최대 30%)
앱 실행 시 전력 소모 평균 4.56% 감소
카메라 핫 스타트 4.48% 빨라짐
카메라 콜드 스타트 6.60% 빨라짐
시스템 부팅 시간 평균 1.5% 개선(약 0.8sec)

 

 

2. Private Space

사용자가 직접 민감한 앱을 별도의 보안 공간에 저장하고 추가 인증을 통해 보호할 수 있는 공간을 제공한다.

이 공간에 설치된 앱을 인식하거나 상호작용하려면 추가 작업이 필요하다.

아직, 앱 스토어에서 카테고리로 분류된 앱을 자동으로 Private 공간에 넣는 건 아니며, 민감하다고 생각하는 앱을 사용자가 직접 넣어야 한다. 여기서 민감한 앱은 민감한 정보를 보여주거나 저장하거나 접근할 수 있는 종류다. 예를 들어, 금융, 갤러리, 메신저, 건강 관리, 사무용 앱 등이 있다.

 

3. FLAG_STOPPED 상태 의도 변경

FLAG_STOPPED 은 사용자가 앱 아이콘을 길게 눌러 강제 종료한 경우, 앱이 처음 설치되었지만 아직 실행하지 않은 경우 활성화된다.

안드로이드 14 버전(API 레벨 34)은 FLAG_STOPPED 가 활성화되었어도, AlarmManager나 BroadcastReceiver를 통해 앱이 실행되는 경우가 있었다. 이런 동작을 방지하고자 FLAG_STOPPED 가 활성화 되어있다면, 푸쉬 알림, AlarmManager, BroadcastReceiver 등으로 앱이 실행되지 않는다. 사용자가 직접 앱을 클릭하는 동작을 해야 실행된다.

 

4. OpenJDK LTS 정렬

안드로이드의 Java 표준 클래스들이 OpenJDK LTS에 맞춰 더 많이 정렬되고 일관성을 확보했다.

 


 

다음은, targetSdk를 35로 하는 경우 적용되는 변화이다.

 

1. 카메라 및 미디어 동작 변경

  1.1 오디오 포커스 요청 제한

  최상위 앱 이거나 foreground 서비스를 실행 중인 경우에만 오디오 포커스를 요청할 수 있다.

  그렇지 않고 오디오 포커스를 요청하면, AUDIOFOCUS_REQUEST_FAILED 이 반환된다.

  백그라운드에서 오디오를 제어하려는 앱의 경우 조치가 필요하다.

 

  1.2 미디어 처리 foreground 서비스

  mediaProcessing이라는 새로운 포그라운드 서비스 타입이 도입됐다.

  이 서비스는 미디어 파일 변환(오디오/비디오 트랜스코딩) 작업에 적합하다.

  지속 시간에 있어서, 일정 시간(기본적으로 6시간) 이상 실행되면 시스템이 자동으로 죵료하거나 중단 처리.

  따라서, 서비스는 다음 중 하나를 해야 한다. (그렇지 않으면 시스템이 강제 종료하거나 ANR로 처리)

    1. 작업 종료 및 stopSelf() 호출

    2. 시스템에 작업 완료 보고 (JobFinished, FOregroundServide.stopFOreground())

 

2. BOOT_COMPLETED 브로드캐스트 수신기 제한

안드로이드 앱에서 BootReceiver를 매니페스트에 등록하고, RECEIVE_BOOT_COMPLETED 권한을 선언하며, 앱이 FLAG_STOPPED 상태가 아니라면 BOOT_COMPLETED 브로드캐스트를 수신할 수 있다.

API 레벨 35 버전부터는, BOOT_COMPLETED 브로드캐스트 수신기가 mediaProcessing, dataSync, health, remoteMessaging과 같은 포그라운드 서비스 타입을 직접 시작하는 것이 제한된다. 이는 부팅 직후 앱들이 자동 실행되어 불필요하게 리소스를 사용하는 것을 방지하기 위한 정책이다.

 

3. 텍스트 뷰의 elegantTextHeight 속성 동작 변경

일부 커시브 폰트나 복잡한 스크립트(아랍어, 미얀마어, 태국어 등)는 문자 렌더링 시 이전/다음 문자의 영역을 침범하거나, 텍스트가 잘리는 Ascending(오름차순) 잘림 문제가 발생할 수 있었다

TextView가 이러한 문자에 충분한 공간을 할당하도록 기본 동작이 변경되었으며, 앱은 elegantTextHeighttrue로 설정하여 잘림을 방지할 수 있다.

 

4. 비 SDK 인터페이스 제한

여기서 비 SDK 인터페스는 SDK 문서에 없는 Android 내부 API를 말하는데 이를 제한하는 것이다.

즉, 안드로이드 OS 내부에는 존재하지만, 공식 안드로이드 SDK 에서는 제공하지 않는 클래스, 메소드, 필드 등을 제한한다.

제한하는 이유는 다음과 같다.

 

1. 버전마다 변경될 수 있어 앱이 깨짐 ( 내부 API는 안드로이드 시스템이 자유롭게 수정 가능)

2. 보안상 위험

3. 호환성이 깨짐 (새로운 안드로이드 버전에서 시그니처가 바뀌거나 프로퍼티가 사라질 수 있음)

-> 앱이 안정성과 호환성을 확보하기 위해서, 공식 SDK에 포함된 API만 사용.

 

 

- Reference

 

Behavior changes: Apps targeting Android 15 or higher

 

Behavior changes: all apps