2025년에 Android 16이 출시되면서 앱이 휴대전화, 폴더블, 태블릿, 데스크톱, 자동차 디스플레이, XR 등 어떤 화면에도 원활하게 적응하는 기기 생태계에 관한 비전을 공유했습니다. 사용자는 앱이 어디에서나 작동하기를 기대합니다. 태블릿에서 멀티태스킹을 하든, 기기를 펼쳐 편안하게 읽든, 데스크톱 창 환경에서 앱을 실행하든 사용자는 UI가 사용 가능한 디스플레이 공간을 채우고 기기 자세에 적응할 것으로 기대합니다.
적응형 동작을 지원하기 위해 방향 및 크기 조절 API에 중대한 변경사항을 도입했으며, 전환을 지원하기 위해 임시 선택 해제 옵션을 제공합니다. API 수준 36을 타겟팅할 때 이미 많은 개발자가 이 전환에 성공적으로 적응했습니다.
이제 Android 17 베타가 출시됨에 따라 적응형 로드맵의 다음 단계로 이동합니다. Android 17 (API 수준 37)에서는 대형 화면 기기 (sw > 600dp)의 방향 및 크기 조절 제한에 대한 개발자 선택 해제가 삭제됩니다. 대상 API 수준 37을 타겟팅하는 경우 앱이 다양한 디스플레이 크기에 적응할 수 있어야 합니다.
동작 변경사항을 통해 Android 생태계는 모든 기기 폼 팩터에서 일관되고 고품질의 환경을 제공할 수 있습니다.
Android 17에서 변경되는 사항
Android 17을 타겟팅하는 앱은 Android 16에 도입된 매니페스트 속성 및 런타임 API의 단계적 폐지와 호환되어야 합니다. 일부 앱의 경우 이번 변경사항이 큰 전환이 될 수 있으므로 이 블로그 게시물 후반부에 일반적인 문제를 방지하는 데 도움이 되는 권장사항과 도구를 포함했습니다.
Android 16 이후 새로운 변경사항은 도입되지 않았지만 개발자 선택 해제는 더 이상 불가능합니다. 참고로, 앱이 대형 화면(디스플레이의 작은 크기가 600dp 이상인 경우)에서 실행되면 다음 매니페스트 속성과 API가 무시됩니다.
참고: Android 16에서 이전에 언급한 바와 같이 이러한 변경사항은 sw 600dp보다 작은 화면이나 android:appCategory 플래그를 기반으로 게임으로 분류된 앱에는 적용되지 않습니다.
| 매니페스트 속성/API | 무시된 값 |
| screenOrientation | portrait, reversePortrait, sensorPortrait, userPortrait, landscape, reverseLandscape, sensorLandscape, userLandscape |
| setRequestedOrientation() | portrait, reversePortrait, sensorPortrait, userPortrait, landscape, reverseLandscape, sensorLandscape, userLandscape |
| resizeableActivity | 모두 |
| minAspectRatio | 모두 |
| maxAspectRatio | 모두 |
또한 사용자는 계속해서 제어할 수 있습니다. 화면 비율 설정에서 사용자는 앱에서 요청한 동작을 사용하도록 명시적으로 선택할 수 있습니다.
앱 준비하기
더 이상 가로세로 비율과 방향을 세로 또는 가로로 제한할 수 없으므로 앱은 사용자가 앱을 사용하도록 선택할 수 있는 모든 가로세로 비율의 디스플레이 크기에 맞게 가로 및 세로 레이아웃을 지원해야 합니다(크기 조절 가능한 창 포함).
앱 테스트
첫 번째 단계는 이러한 변경사항을 적용하여 앱을 테스트하여 다양한 디스플레이 크기에서 앱이 잘 작동하는지 확인하는 것입니다.
Android 스튜디오에서 Pixel Tablet 및 Pixel Fold 시리즈 에뮬레이터와 함께 Android 17 베타 1을 사용하고 targetSdkPreview = “CinnamonBun”를 설정합니다. 또는 앱이 아직 API 수준 36을 타겟팅하지 않는 경우 UNIVERSAL_RESIZABLE_BY_DEFAULT 플래그를 사용 설정하여 앱 호환성 프레임워크를 사용할 수 있습니다.
레이아웃이 올바르게 조정되도록 지원하는 추가 도구가 있습니다. Compose UI Check를 사용하여 UI를 자동으로 감사하고 UI를 더 적응형으로 만드는 방법을 제안받고, DeviceConfigurationOverride를 사용하여 테스트에서 특정 디스플레이 특성을 시뮬레이션할 수 있습니다.
이전부터 방향과 가로세로 비율을 제한해 온 앱의 경우 구성 변경을 처리할 때 카메라 미리보기가 기울어지거나 방향이 잘못 지정되고, 레이아웃이 늘어나고, 액세스 불가 버튼이 있거나, 사용자 상태가 손실되는 문제가 흔히 발생합니다.
이러한 일반적인 문제를 해결하기 위한 몇 가지 전략을 살펴보겠습니다.
카메라 호환성 확인
가로 모드 폴더블이나 멀티 윈도우, 데스크톱 창 모드, 연결된 디스플레이와 같은 시나리오에서 가로세로 비율을 계산할 때 흔히 발생하는 문제는 카메라 미리보기가 늘어나거나 회전되거나 잘리는 경우입니다.
카메라 미리보기가 늘어나거나 회전되지 않았는지 확인합니다.
이 문제는 앱이 카메라 기능 (예: 가로세로 비율 및 센서 방향)과 기기 기능 (예: 기기 방향 및 자연스러운 방향) 간의 고정된 관계를 가정하기 때문에 대형 화면 및 폴더블 기기에서 자주 발생합니다.
카메라 미리보기가 모든 창 크기나 방향에 올바르게 적응하도록 하려면 다음 네 가지 해결 방법을 고려하세요.
해결 방법 1: Jetpack CameraX (권장)
가장 간단하고 강력한 솔루션은 Jetpack CameraX 라이브러리를 사용하는 것입니다. PreviewView UI 요소는 모든 미리보기 복잡성을 자동으로 처리하도록 설계되었습니다.
PreviewView센서 방향, 기기 회전, 크기 조정을 올바르게 조정합니다.- PreviewView는 일반적으로 중앙에 배치하고 잘라 카메라 이미지의 가로세로 비율을 유지합니다 (
FILL_CENTER). - 필요한 경우
FIT_CENTER로 확장 유형을 설정하여 미리보기를 레터박스 처리할 수 있습니다.
자세한 내용은 CameraX 문서의 미리보기 구현을 참고하세요.
솔루션 2: CameraViewfinder
기존 Camera2 코드베이스를 사용하는 경우 CameraViewfinder 라이브러리 (API 수준 21과 하위 호환됨)가 또 다른 최신 솔루션입니다. TextureView 또는 SurfaceView을 사용하고 필요한 모든 변환 (가로세로 비율, 크기, 회전)을 적용하여 카메라 피드 표시를 간소화합니다.
자세한 내용은 카메라 뷰파인더 소개 블로그 게시물과 카메라 미리보기 개발자 가이드를 참고하세요.
해결 방법 3: Camera2 수동 구현
CameraX 또는 CameraViewfinder를 사용할 수 없는 경우 방향과 가로세로 비율을 수동으로 계산하고 각 구성 변경 시 계산이 업데이트되도록 해야 합니다.
CameraCharacteristics에서 카메라 센서 방향 (예: 0, 90, 180, 270도)을 가져옵니다.- 기기의 현재 디스플레이 회전 (예: 0, 90, 180, 270도)을 가져옵니다.
- 카메라 센서 방향 및 디스플레이 회전 값을 사용하여
SurfaceView또는TextureView에 필요한 변환을 결정합니다. - 왜곡을 방지하려면 출력의 가로세로 비율
Surface이 카메라 미리보기의 가로세로 비율과 일치해야 합니다.
중요: 카메라 앱이 멀티 윈도우 또는 데스크톱 윈도우 모드에서 또는 연결된 디스플레이에서 화면의 일부에서 실행될 수 있습니다. 따라서 화면 크기를 사용하여 카메라 뷰파인더의 크기를 결정해서는 안 됩니다. 대신 창 측정항목을 사용하세요. 그렇지 않으면 카메라 미리보기가 늘어날 수 있습니다.
자세한 내용은 카메라 미리보기 개발자 가이드와 다양한 폼 팩터의 카메라 앱 동영상을 참고하세요.
솔루션 4: 인텐트를 사용하여 기본 카메라 작업 실행
카메라 기능이 많이 필요하지 않다면 기기의 기본 카메라 애플리케이션을 사용하여 사진이나 동영상 촬영과 같은 기본적인 카메라 작업을 실행하는 것이 간단하고 직접적인 솔루션입니다. 이 경우 카메라 라이브러리와 통합하는 대신 Intent를 사용하면 유지관리와 적응성이 더 쉬워집니다.
자세한 내용은 카메라 인텐트를 참고하세요.
늘어난 UI 또는 액세스 불가 버튼 피하기
앱이 특정 기기 방향이나 디스플레이 가로세로 비율을 가정하는 경우 이제 다양한 방향이나 창 크기에서 사용될 때 문제가 발생할 수 있습니다.
버튼, 텍스트 필드, 기타 요소가 대형 화면에서 늘어나지 않도록 합니다.
버튼, 텍스트 필드, 카드를 fillMaxWidth 또는 match_parent로 설정했을 수 있습니다. 휴대전화에서는 멋지게 표시됩니다. 하지만 태블릿이나 폴더블을 가로 모드로 사용하면 UI 요소가 대형 화면 전체로 늘어납니다. Jetpack Compose에서는 widthIn 수정자를 사용하여 콘텐츠가 늘어나지 않도록 구성요소의 최대 너비를 설정할 수 있습니다.
Box(
contentAlignment = Alignment.Center,
modifier = Modifier.fillMaxSize()
) {
Column(
modifier = Modifier
.widthIn(max = 300.dp) // Prevents stretching beyond 300dp
.fillMaxWidth() // Fills width up to 300dp
.padding(16.dp)
) {
// Your content
}
}사용자가 폴더블이나 태블릿에서 앱을 가로 방향으로 열면 화면 하단의 저장 또는 로그인과 같은 작업 버튼이 화면에 표시되지 않을 수 있습니다. 컨테이너를 스크롤할 수 없는 경우 사용자가 계속 진행하지 못할 수 있습니다. Jetpack Compose에서는 verticalScroll 수정자를 구성요소에 추가할 수 있습니다.
Column(
modifier = Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
.padding(16.dp)
)최대 너비 제약 조건을 세로 스크롤과 결합하면 앱 창 크기가 얼마나 넓어지거나 짧아지든 앱이 작동하고 사용 가능하도록 할 수 있습니다.
적응형 레이아웃 빌드에 관한 가이드를 참고하세요.
구성 변경으로 상태 유지
방향 및 가로세로 비율 제한을 삭제하면 앱의 창 크기가 훨씬 더 자주 변경됩니다. 사용자는 기기를 회전하거나, 접거나 펼치거나, 화면 분할 또는 데스크톱 창 모드에서 앱의 크기를 동적으로 조절할 수 있습니다.
기본적으로 이러한 구성 변경으로 활동이 제거되고 다시 생성됩니다. 앱에서 이 수명 주기 이벤트를 적절하게 관리하지 않으면 사용자는 스크롤 위치가 상단으로 재설정되고, 절반만 작성된 양식이 완전히 삭제되고, 탐색 기록이 손실되는 등 불편한 경험을 하게 됩니다. 원활한 적응형 환경을 보장하려면 앱이 이러한 구성 변경을 통해 상태를 유지하는 것이 중요합니다. Jetpack Compose를 사용하면 다시 만들기를 선택 해제하고 대신 창 크기 변경으로 인해 사용 가능한 새 공간을 반영하도록 UI를 리컴포즈할 수 있습니다.
UI 상태 저장에 관한 가이드를 참고하세요.
2027년 8월까지 API 수준 37 타겟팅
이전에 API 수준 36을 타겟팅할 때 이러한 변경사항을 선택 해제한 앱은 앱이 API 수준 37을 타겟팅한 후에만 Android 17 선택 해제 삭제의 영향을 받습니다. 미리 계획하고 앱을 필요한 대로 조정할 수 있도록 변경사항이 적용되는 시기를 알려드립니다.
- Android 17: 위에 설명된 변경사항은 API 수준 37을 타겟팅하는 앱의 대형 화면 기기 (가장 작은 화면 너비 > 600dp)의 기준 환경이 됩니다. 개발자는 선택 해제할 수 없습니다.
특정 API 수준을 타겟팅하는 기한은 앱 스토어마다 다릅니다. Google Play의 경우 신규 앱과 업데이트는 API 수준 37을 타겟팅해야 하므로 2027년 8월부터 이 동작이 배포에 필수입니다.
Android 17 준비
Android 17에서 앱에 영향을 미치는 모든 변경사항은 Android 17 변경사항 페이지를 참고하세요. 앱을 테스트하려면 Android 17 베타 1을 다운로드하고 targetSdkPreview = “CinnamonBun”로 업데이트하거나 앱 호환성 프레임워크를 사용하여 특정 변경사항을 사용 설정하세요.
Android의 미래는 적응형이며 Google은 여러분이 적응형으로 나아갈 수 있도록 지원합니다. Android 17을 준비하면서 적응형 레이아웃 빌드 가이드와 대형 화면 품질 가이드라인을 검토하는 것이 좋습니다. 이러한 리소스는 여러 폼 팩터와 창 크기를 자신 있게 처리하는 데 도움이 되도록 설계되었습니다.
기다리지 마세요. 지금 Android 17을 준비하세요
계속 읽기
-
제품 소식
Pixel 10 Pro Fold와 같은 새로운 폼 팩터가 Android 생태계에 합류하면서 휴대전화, 태블릿, 폴더블에서 고품질 사용자 환경을 만들려면 적응형 앱 개발이 필수적입니다.
Fahd Imtiaz, Miguel Montemayor • 3분 읽기
-
제품 소식
Android XR에서 Unreal Engine과 Godot이 공식적으로 지원됩니다. 또한 생산성을 높이고 새로운 XR 기능을 지원하도록 설계된 새로운 도구인 Android XR 엔진 허브와 Android XR 상호작용 프레임워크도 출시합니다.
Luke Hopkins • 읽는 데 4분 소요
-
제품 소식
Android 17 출시와 함께 적응형 우선 개발 표준으로 전환합니다. 사용자는 더 이상 단일 폼 팩터에 의존하지 않습니다. 하루 종일 휴대전화, 폴더블, 태블릿, 노트북, 자동차 디스플레이, 몰입형 XR 환경 간에 전환합니다.
Fahd Imtiaz • 읽는 데 4분 소요
소식 받아보기
Android 개발 관련 최신 정보를 이메일로 받아 보세요.