[요약] What's new in Android (Google I/O '25)
Jun 3, 2025. | By:
pluulove
Jetpack Compose
Autofill
Compose에서 Autofill API를 사용하는 방법을 소개합니다.
BOM 2025.05.01
TextField(
state = rememberTextFieldState(),
...,
modifier = Modifier.contentType(Username)
)
TextField(
state = rememberTextFieldState(),
...,
modifier = Modifier.contentType(Password)
)
alpha BOM 2025.05.01

Autosize text
BOM 2025.05.01
Box {
Text(
text = myText,
maxLines = 1,
autoSize = TextAutoSize.StepBased()
)
}
// 최소, 최대, 단계 설정
Box {
Text(
text = myText,
maxLines = 1,
autoSize = TextAutoSize.StepBased(
minFontSize = 20.sp,
maxFontSize = 32.sp,
stepSize = 1.sp
)
)
}
Animate bounds
Container 내에서 Composable의 위치와 크기를 자동으로 애니메이션화 가능
BOM 2025.05.01
LookaheadScope {
Box(
Modifier
.animateBounds(this@LookaheadScope)
.width(if(inRow) 100.dp else 150.dp)
.background(...)
.border(...)
)
}
Visibility tracking
onLayoutRectChanged
화면 내에서 Composable의 위치를 추적하는데 사용할 수 있는 저수준 API
BOM 2025.05.01
Box(
Modifier
.size(...)
.offset(...)
.border(...)
.background(...)
.onLayoutRectChanged {
l = it.boundsInRoot.left.toString()
t = it.boundsInRoot.top.toString()
r = it.boundsInRoot.right.toString()
b = it.boundsInRoot.bottom.toString()
}
) {
...
}
// throttle, debounce 사용 사례
Box(
Modifier
.size(...)
.offset(...)
.border(...)
.background(...)
.onLayoutRectChanged(
throttleMillis = 200,
debounceMillis = 1000
) {
...
}
) {
...
}
onVisibilityChanged
Composable의 가시성(Visibility)이 변경될 때마다 콜백을 제공하여 ViewPort에 들어오거나 나갈 때 호출됩니다.
alpha BOM 2025.05.01

onFirstVisible
Composable 버전에 따른 벤치마크 결과
- Pixel 3a 기준, 최신 버전에서는 0.1%의 비율로 버벅임이 발생

다른 최적화 방안

- Pausable composition : 여러 프레임에 걸쳐 Composition을 분할
- Background text measurement : 메인 스레드의 무거운 작업 중 일부를 다른 작업으로 넘김
- Prefetch customization : LazyList에서 item을 미리 가져오는 기능을 사용자 정의

- Google에서 사용되는 Compose의 경우 단일 버전이 사용됨
- 업데이트 주기 변경 : 한 달에 한 번씩 -> 하루에 한 번씩
experimental API 조사
- 다수의 API를 안정화하도록 처리
- 1년 만에 experimental API를 32% 줄이는데 성공
Navigation 3
Compose에서 기존 Navigation으로는 Backstack 및 상태 호이스팅을 다루는 경우 사용하기 불편했습니다.

- 애니메이션을 사용하여 서로 다른 목적지간의 전환을 쉽게 수행
- predictive back 및 shared element transition 구현 가능
- 다양한 폼 팩터에서 작동
- Material Design이 통합
- 사용자 정의가 가능
- 현재는 알파 버전 단계
기존 PreviewView / PlayerView를 감싸는 형태가 아니라 기초부터 재작성 중입니다.

Androidify 샘플에서 비디오 관련 샘플을 다룹니다.
https://github.com/android/androidify


Google에서도 KMP를 지원하고 있으며 Jetpack libraries들 중 일부에서도 지원하고 있습니다.
Stable 목록
- Room
- DataStore
- Collections
- Saved State
- View Model
- Lifecycle
- paging*

Jetpack 라이브러리들에서 3가지 트랙을 나눴으며, 각 계층은 각각 다른 의미를 가집니다.
- 티어 1 : Android, iOS, Kotlin 백엔드에서 비즈니스 로직을 공유하는 모바일 앱을 빌드 가능
- 티어 2/3은 티어1보다 지원 수준이 낮음
KMP 관련 추가 자료
Android 16
Android의 출시 주기 변경

Safe
Credential Manager
- 통합된 API
- 간단하고 안전한 솔루션
- 전세계 상호 운용이 가능
- 모든 폼팩터에서 Google로 로그인/패스워드 가능
- 휴대폰, 태블릿, 웨어러블, XR에서 패스키 지원
디지털 자격 증명 검증 API
- 연령, 학위 확인 등 모든 종류의 신분 확인을 위해 신분증 검증 가능
- https://developer.android.com/identity/digital-credentials
자격 증명 복원 API
- 사용자가 새 기기를 설정할 때 앱 계정을 복원 가능
- https://developer.android.com/identity/sign-in/restore-credentials
3P Code

Privacy Sandbox를 사용하면 3P 코드를 격리된 런타임 환경에서 대응 가능
- http://privacysandbox.google.com/learn
Android 고급 보호 모드
- 사용자가 기기에서 On/Off 가능한 보안 기능 모음
- https://developer.android.com/privacy-and-security/advanced-protection-mode

Identity Check를 통한 도난 방지
- 민감한 사용자 작업이 있는 앱에 적용
- BiometricManager를 통해 신원 확인이 활성화되어 있는지 확인 가능

Health Connect
Medical records API
- 건강 데이터를 통합 가능
- 건강 데이터와 같은 정보를 읽고 쓰기 가능

새로운 데이터 유형 추가
-
Background Reads
- History Reads : 시간 경과에 따른 추세 파악에 도움
- https://developer.android.com/health-and-fitness/guides/health-connect/develop/read-data
- https://developer.android.com/health-and-fitness/guides/medical-records
Battery
새로운 Android Vital metric : Excessive Wake Locks
- 배터리 소모를 측정하는 지표
- https://developer.android.com/topic/performance/vitals

Across devices
Adaptive Apps with Android 16
Large Screen에 포커스
600dp 이상인 대형 화면 단말에서 Target SDK 36를 사용하는 경우 일부 manifest 정의가 무시됩니다.
- Screen Orientation
- Resizeable Activities
- Aspect Ratios

Wear OS
Watch Face Push
- 개발자가 시계 화면을 직접 추가, 업데이트 또는 삭제할 수 있습니다.
- 각 Watch Face를 Play에 업로드하는 대신 Cloud Storage를 사용할 수도 있습니다.
- https://developer.android.com/training/wearables/watch-face-push


Health 권한 강화

Wear OS 6 개발자 프리뷰
- https://android-developers.googleblog.com/2025/05/whats-new-in-wear-os-6.html
Delightful
Material3 Expressive
Material3의 확장팩이며 기존 M3 기능과 호환됩니다.
// Compose
implementation("androidx.compose.material3:material3:1.4.0-alpha15")
// Views
implementation("com.google.android.material:material:1.14.0-alpha01")
Live Updates
사용자가 중요하고 시간에 민감한 진행 중인 작업을 돕는 새로운 알림 정의.
- 기존 Foreground Service로 알림을 사용한 경우의 도움
- 실시간 업데이트가 포함되는 경우에 유용
- https://developer.android.com/about/versions/16/features/progress-centric-notifications
Notification에 ProgressStyle 템플릿을 추가



- 잠금 화면에서 위젯 기능을 다시 사용 가능해짐

- 훌륭한 Widgets 제공을 위해서 Google Play에 새로운 필터를 추가
Jetpack Glance
- Jetpack Glance 1.2 알파 출시
- https://android-developers.googleblog.com/2025/03/design-with-widget-canonical-layouts.html

Edge to edge
Android 16부터는 opt out옵션이 더 이상 제공되지 않음

Predictive Back(뒤로 탐색 예측)
- https://developer.android.com/guide/navigation/custom-back/predictive-back-gesture
- 홈으로 돌아가기, 앱 이동, Activity간 이동에 대해 기본적으로 활성화 됨

- 뒤로 가기 이벤트를 가로채고 있다면, BackHandler API로 마이그레이션할 필요가 있음
- 임시 opt-out 플래그(enableOnBackInvokedCallback)가 제공됨

- Android 15 : 카메라 센서와 ISP를 사용해 자동 노출 모드를 도입
- Google Low Light Boost : 자동 노출 모드를 사용할 수 없는 단말에서는 머신 러닝을 사용해 카메라 화면 밝기를 실시간으로 조절
- https://developer.android.com/media/camera/lowlight/low-light-boost-ae

Jetpack Media3에서 Preload Manager API 출시
- 여러 미디어 소스를 미리 로드 가능
- 짧은 형식의 비디오 재생에 최적화됨

배터리 절약을 위한 더 나은 성능을 제공하는 경우에 사용

Intelligent

- Android는 기기 내 Gemini Nano 모델을 통해 AI 사용이 가능
- 클라우드에서 더 큰 모델에 접근할 수 있는 API 제공
GenAI
- https://github.com/android/ai-samples/tree/main/ai-catalog
Gemini Live APIs
- Gemini의 Multi-modal을 사용하여
- startAudioConversation 함수를 호출하여 Gemini와 연결 시작
