이 글의 원문은 여기서 확인 가능하며 블로그 리뷰에는 양찬석(Google)님이 참여해주셨습니다.
Android 앱은 스마트폰과 노트북, 태블릿부터 TV 및 자동차까지 다양한 디바이스에서 매일 수십억명의 사람들이 일하고 놀고 소통하고 창조할 수 있도록 지원합니다. 더 많은 이용자가 여러분이 빌드하는 경험에 익숙해지면서, 이용자들의 기대도 빠르게 커져가고 있습니다. 이런 이유로 저희는 개발자 여러분께 Android 릴리스를 더 일찍 공유드리고자 하며, 또한 여러분의 의견은 앱과 사용자를 위한 더 나은 플랫폼을 만드는 데 큰 도움이 됩니다. 오늘 저희는 Android의 다음 버전인 Android 12의 첫 개발자 프리뷰를 선보입니다. 개발자 여러분들께서 적극적으로 테스트 진행해주시고, 소중한 의견 함께 들려주시길 부탁드리겠습니다.
저희는 각 버전을 선보일 때마다 개인정보 보호와 보안을 핵심적 가치로 두고서 더욱 스마트하며 더 간편하게 사용할 수 있고, 더 나은 성능을 발휘하는 OS로 만들기 위해 노력하고 있습니다. Android12에서도 더 나은 사용자 환경을 위한 새로운 도구를 여러분께 제공해드리고자 애쓰고 있습니다. 몇 가지 예로, 아직 최신 동영상 형식을 지원하지 않는 앱이 최신 포맷의 동영상을 재생할 수 있도록 돕는 호환 가능한 미디어 코덱 변환 도구나, 이미지와 동영상 같은 풍부한 콘텐츠를 앱으로 더 쉽게 복사/붙여넣기를 할 수 있는 기능을 만들고 있습니다. 또한 개인정보 보호를 강화하고 앱의 응답성을 유지하도록 성능을 최적화하는 노력도 함께 기울이고 있습니다.
이번 첫 프리뷰는 Android 12를 위한 시작일 뿐이며, 릴리스 과정에서 더욱 더 많은 기능과 도구를 공유드리겠습니다. 이 게시물에서 Android 12의 새로운 기능을 맛보기로 살펴봐주시고, Android 12 개발자 사이트에서 Pixel용 다운로드와 릴리스 일정을 자세히 확인해주세요. 언제나 그렇듯 여러분의 의견이 가장 중요합니다. 최종 버전에 여러분의 의견을 반영할 수 있도록, 어떻게 생각하시는지 알려주세요!
Android 12에서 진행 중인 작업과 함께, 이번 달 말에는 훌륭한 사용자 환경을 더 쉽게 만드는 데 도움이 되는 다른 중요한 도구로서, 네이티브 UI를 빌드하기 위한 최신 툴키트인 Jetpack Compose에 관해 더 많은 내용을 공유할 예정입니다. Jetpack Compose 개발 과정이 궁금하다면 2월 24일 오전 9시 태평양 표준시(한국 시간으로 2월 25일 오전 2시) 라이브 스트리밍을 통해 진행되는 #TheAndroidShow에 참여해주시고, 실시간으로 #TheAndroidShow를 통해 Jetpack Compose에 대한 질문을 트윗해주세요.
신뢰와 안전(Trust and safety)
개인정보 보호는 저희가 하는 모든 작업의 중심에 있습니다. Android 12 역시 계속해서 기기와 데이터를 안전하게 보호하는 동시에 사용자에게 더 많은 투명성과 제어 능력을 부여하는 데 초점을 맞추고 있습니다. 오늘 릴리스에서는 추적에 사용할 수 있는 식별자(identifier)에 대한 새로운 제어 기능, 앱 구성요소를 위해 더 안전한 기본값 등을 추가했습니다. 이런 변경 사항이 앱에 영향을 줄 수 있으므로 가능한 한 빨리 테스트해 보시기 바랍니다. 이후의 프리뷰 릴리스에 선보일 더 많은 개인정보 보호 및 보안 기능을 눈여겨 살펴봐주세요.
WebView의 최신 SameSite 쿠키 동작(Modern SameSite cookie behaviors in WebView) - Chrome의 변경 사항과 다른 브라우저의 변경 사항에 맞춰, WebView에는 추가적인 보안 및 개인정보 보호 기능을 제공하고 여러 사이트에 걸쳐 쿠키를 어떻게 사용할 수 있을지에 관해 사용자에게 더 많은 투명성과 제어 권한을 부여하기 위한 새로운 SameSite 쿠키 동작이 포함됩니다. 더 자세한 내용은 여기서 확인하세요.
제한된 Netlink MAC(Restricted Netlink MAC) - 저희는 개발자가 개인정보 보호 재설정 가능 식별자(privacy-protecting resettable identifier)로 마이그레이션하도록 계속 돕고 있습니다. 여러 차례의 릴리스를 통해 기기의 범위가 지정된 Netlink MAC 값을 개발자 여러분이 다른 방식으로 마이그레이션 할 수 있도록 안내 했습니다. Android 11에서는 API 레벨 30을 기반으로 Netlink MAC에 대한 액세스를 제한했고 Android 12에서는 targetSDK 레벨과는 무관하게 모든 앱에 대해 액세스 제한을 적용합니다. 더 자세한 내용은 여기서 확인하세요.
더 안전하게 구성요소 노출하기(Safer exporting of components) - 앱이 엑티비티(activities), 서비스(services), 수신자(receivers)를 뜻하지 않게 다른 앱으로 노출하는 일을 예방하기 위해 android;exported 속성의 기본 처리를 더 명시적으로 변경할 예정입니다. 이렇게 변경하면 하나 이상의 인텐트 필터(intent filters)를 선언하는 구성요소가 이제는 android:exported 속성을 명시적으로 선언해야 합니다. 이 변경 사항과 관련된 설치 오류를 피하기 위해서는 매니페스트에서 구성요소(components)를 검사해야 합니다 더 자세한 내용은 여기서 확인하세요.
더 안전하게 인텐트 처리하기(Safer handling of Intents) - PendingIntent를 더 안전하게 처리하기위해 Android 12에서는 앱이 변경 가능성 플래그(각 PendingIntent에 대한 FLAG_MUTABLE 또는 새로운 FLAG_IMMUTABLE)를 명시적으로 선언하도록 요구합니다. 더 자세한 내용은 여기서 확인하세요.
위 내용과 기타 개인정보 보호 및 보안 변경 사항에 관한 자세한 내용은 여기에서 더 자세히 알아볼 수 있습니다.
더 나은 사용자 환경 도구(Better user experience tools)
Google은 Android 12에서 사용자를 위해 더욱 세련된 환경과 더 나은 성능을 제공하기 위한 핵심 영역에 투자하고 있습니다. 다음은 지금까지 업데이트된 사항입니다.
호환 가능한 미디어 트랜스 코딩(Compatible media transcoding) - 휴대기기에 HEVC 하드웨어 인코더가 보편화된 상황에서 카메라 앱이 점점 더 많이 HEVC 형식으로 촬영 영상을 캡쳐하고 있습니다. 이 HEVC 형식은 이전의 코덱보다 화질과 압축 성능이 크게 개선되어 대부분의 앱이 HEVC를 지원해야 하지만, 지원할 수 없는 앱을 위해 호환 가능한 미디어 트랜스 코딩 기능을 도입할 예정입니다.
이 기능을 사용하면 앱이 HEVC를 지원하지 않아도, 플랫폼에서 자동적으로 (널리 호환되는) AVC 형식으로 미디어 포맷을 변환할 수 있습니다. 기기의 동영상 및 하드웨어 속성에 따라 코드 변환에 시간이 걸릴 수 있습니다. 예를 들어 30fps의 1분짜리 1080p 동영상을 Pixel 4에서 변환하는 데는 약 9초가 걸립니다. 앱에서 지원하지 않는 미디어 형식을 선언하는 것만으로도 트랜스 코딩 서비스 사용을 선택할 수 있습니다. 앱이 HEVC를 지원하도록 개발자 여러분께 꼭 권장 드리지만, 불가능 하실 경우에는 호환 가능한 미디어 트랜스 코딩 서비스를 사용하시기 바랍니다. 이 기능은 동영상 캡쳐에 HEVC 형식을 사용하는 모든 기기에서 작동할 것입니다. 이 기능에 대한 여러분의 의견이 정말 궁금합니다. 더 자세한 내용은 여기서 확인하세요.
AVIF 이미지 지원(AVIF image support) - 더욱 효율적인 압축으로 더 높은 화질을 제공하기 위해, Android 12는 AVIF(AV1 Image File Format)를 위한 플랫폼 지원 기능을 선보입니다. AVIF는 AV1을 사용하여 인코딩되는 이미지와 이미지 시퀀스를 위한 컨테이너 형식입니다. 다른 최신 이미지 형식과 마찬가지로, AVIF는 동영상 압축을 통해 프레임 내에 인코딩된 콘텐츠를 이용합니다. 덕분에 JPEG같은 이전 이미지 형식과 비교하면 동일한 파일 크기의 이미지 화질이 대폭 개선됩니다.
AVIF (18.2kB) JPEG (20.7kB)
출처: Jake Archibald, AVIF 형식과의 이미지 비교
포그라운드 서비스 최적화(Foreground service optimization) - 포그라운드 서비스는 앱이 사용자가 경험하게 되는 특정 유형의 작업을 관리하는 중요한 방식이지만, 남용하면 성능에 영향을 미치고 심지어 앱 종료로 이어질 수도 있습니다. 사용자에게 더 나은 경험을 보장하기 위해, 새 플랫폼을 대상으로 하는 앱에 대해서는 백그라운드에서 포그라운드 서비스가 시작되지 않도록 차단할 것입니다. 이 패턴에서 벗어나 더 쉽게 전환할 수 있도록 JobScheduler에서 승격된 프로세스 우선순위인 네트워크 액세스 권한을 얻고 Battery Saver 또는 Doze와 같은 전력 제약 조건과는 상관없이 즉시 실행되는 새로운 신속 처리 작업을 도입할 예정입니다. 이전 버전과의 호환성을 위해 Jetpack WorkManager 라이브러리의 최신 릴리스에 신속 처리 작업을 빌드하기도 했습니다. 사용자의 주의력 분산을 줄일 수 있도록 현재 포그라운드 서비스 알림 표시를 최대 10초까지 지연시키고 있습니다. 그러면 일시적인 작업은 알림이 표시되기 전에 마칠 여유가 생깁니다. 더 자세한 내용은 여기서 확인하세요.
다양한 콘텐츠 삽입(Rich content insertion) - 사용자는 이미지, 동영상, 기타 생생한 콘텐츠를 즐기고자 하지만 이처럼 다양한 콘텐츠를 앱에 삽입하고 옮기는 일이 늘 쉬운 건 아닙니다. 앱에 다양한 콘텐츠를 간단히 삽입하기 위해 클립보드, 키보드 또는 끌어서 놓기 동작 등 어떤 소스에서 오는 콘텐츠라도 허용할 수 있게 해주는 새로운 통합 API를 도입할 예정입니다. 새로운 인터페이스 OnReceiveContentListener를 UI 구성요소에 연결하고 어떤 메커니즘을 통해서든 콘텐츠가 삽입될 때 콜백을 받을 수 있습니다. 이 콜백은 코드가 일반 텍스트와 스타일 지정 텍스트부터 마크업, 이미지, 동영상, 오디오 파일 등에 이르는 모든 콘텐츠의 삽입을 처리하는 유일한 곳이 됩니다. 이전 버전과의 호환성을 위해 통합 API를 Androidx에 추가했습니다. 더 자세한 내용은 여기서 확인하세요.
촉각과 결합된 오디오 효과(Audio-coupled haptic effect) - Android 12에서는 앱이 스마트폰의 진동 기능을 통해 오디오와 결합된 촉각 피드백을 제공할 수 있습니다. 진동 강도와 빈도는 오디오 세션에서 파생되므로, 더욱 심화된 몰입형 게임 및 오디오 환경을 만들 수 있습니다. 예를 들어 영상 통화 앱은 촉각 피드백을 통해 발신자를 식별할 수 있도록 사용자 지정 벨소리를 사용할 수 있고, 개발자는 레이싱 게임에서의 거친 지형을 시뮬레이션할 수도 있습니다. 더 자세한 내용은 여기서 확인하세요.
다중 채널 오디오(Multi-channel audio) - Android 12에서는 공간 정보를 포함한 오디오를 위한 여러 가지 기능이 향상되었습니다. Android 12에는 패스스루(passthrough) 및 오프로드(offload mode) 모드에서 MPEG-H 재생을 위한 지원 기능이 추가되며, 최대 24개(이전에는 최대 8개) 채널에 맞춰 오디오 믹서, 리샘플러, 오디오 효과가 최적화되었습니다.
동작 탐색을 위한 몰입형 모드 API(Immersive mode API improvements for gesture nav) - 예를 들어 동영상을 시청하거나 책을 읽거나 게임을 할 때 더 쉽고 일관되게 동작 탐색을 할 수 있도록 몰입형 모드(immersive mode)를 단순화했습니다. 게임과 관련하여 전체 화면 환경에서 플레이할 때 여전히 우발적이거나 의도치 않았던 동작으로부터 앱을 보호하지만, 다른 모든 전체 화면 또는 몰입형 환경에서는(예: 동영상 뷰어, 읽기, 사진 갤러리) 새로운 플랫폼을 대상으로 삼는 앱을 위해 사용자가 한 번의 스와이프로 스마트폰을 탐색할 수 있도록 기본 설정을 변경할 예정입니다. 더 자세한 내용은 여기서 확인하세요.
알림 UI 업데이트(Notification UI updates) - 알림 UI를 더 현대적이고, 사용하기 쉽고, 기능적으로 만들기 위해 알림 디자인 개선 작업이 진행 중입니다. 이번 첫 프리뷰에서는 창의 변경 사항(drawers)과 템플릿 자체에 대한 제어 기능이 눈에 띌 것입니다. 시스템 전반에 걸쳐 더 부드럽고 자연스럽게 보이도록 전환과 애니메이션도 최적화하는 중입니다. 업데이트의 일환으로, Android 12를 대상으로 하는 앱을 위해 아이콘을 포함한 맞춤 콘텐츠로 알림을 장식하고 다른 모든 알림과 일치하도록 어포던스(affordances)를 확장할 것입니다. 더 자세한 내용은 여기서 확인하세요.
더 빠르고 반응성도 뛰어난 알림(Faster, more responsive notifications) - 사용자는 알림을 탭하면 즉시 앱으로 이동하리라 기대하므로, 그 반응 속도가 빠를수록 좋습니다. 그런 기대를 충족하려면 개발자가 알림 탭이 Activity를 시작하기 위해 중재 브로드캐스트 수신기 또는 서비스인 “트램펄린”(trampolines)을 사용하기보다는 Activity 시작을 직접 트리거하도록 해야 합니다. 알림 트램펄린은 상당한 지연을 일으키고 사용자 환경에 영향을 줄 수 있습니다. Android 12는 알림의 반응성을 유지하기 위해 알림이 대상 Activity를 시작하지 못하게 함으로써 알림 트램펄린을 차단하며, 우리는 개발자가 이 패턴에서 벗어나 마이그레이션하도록 요청할 예정입니다. 이 변경 사항은 새 플랫폼을 대상으로 하는 앱에만 적용되지만, 모든 앱에 대해 트램펄린이 개발자와 사용자에게 보이도록 하기 위한 알림을 표시할 것입니다. 더 자세한 내용은 여기서 확인하세요.
Binder IPC 호출 개선(Improved Binder IPC calls) - 성능에 관한 작업의 일환으로, 우리는 시스템 변동성 축소(system variability)에 초점을 맞춰왔습니다. 지연 시간(latency)과 워크로드 분포(workload distribution)를 살펴보고 맨 끝 또는 99% 백분위수 사용 사례에서 중간값 경험을 줄이는 최적화를 수행했습니다. 그렇게 함으로써 시스템 바인더 호출(system binder calls)에 대한 개선을 목표로 하여 가벼운 캐싱 전략(caching strategies)을 추가하고 지연 시간 분포 개선을 위한 잠금 경합 제거(removing lock contention)에 집중해왔습니다. 덕분에 Binder 호출에 대한 성능이 전반적으로는 대략 2배 정도, 특정 호출에서는 상당한 수준으로 개선되었습니다. 예를 들자면, refContentProvider()에서는 47배, releaseWakeLock()에서는 15배, JobScheduler.schedule()에서는 7.9배나 개선되었습니다.
앱 호환성(App compatibility)
새 플랫폼 버전을 출시하면서 앱 호환성을 최우선 순위에 두어, 더 빠르고 원활한 업데이트를 위해 노력 중입니다. Android 12에서는 개발자에게 더 많은 시간을 주기 위해 앱이 거쳐야 하는 대부분의 변경 사항을 선택할 수 있도록 했을 뿐 아니라 개발자가 더 신속하게 준비할 수 있도록 관련 도구와 프로세스를 업데이트했습니다. Android 12 기기에서 앱에 더 나은 환경을 제공하기 위해 Google Play 시스템 업데이트에 새로운 기능도 추가했습니다.
Google Play를 통해 점점 더 업데이트되는 Android(More of Android updated through Google Play) - 앱이 다양한 기기에서 더 안정적이고 안전한 환경에서 작동할 수 있도록 Google Play 시스템 업데이트(Project Mainline)에 대한 투자를 계속 확대하고 있습니다. Android 12에서 우리는 Android 12를 실행하는 기기에서 코어 런타임과 라이브러리에 업데이트를 푸시할 수 있게 해주는 Android 런타임(ART) 모듈을 추가했습니다. 런타임 성능과 정확성을 개선하고 메모리를 더욱 효율적으로 관리하며 Kotlin이 더 빠르게 작동하도록 할 수 있으며, 전체 시스템 업데이트를 하지 않아도 이 모든 일이 가능합니다. 기존 모듈의 기능도 확장했는데, 그 예로 업데이트 가능한 모듈 내에서 호환 가능한 미디어트랜스 코딩 기능을 제공할 예정입니다.
태블릿, 폴더블, TV를 위한 최적화(Optimizing for tablet, foldables, and TVs) - 그 어느 때보다 많은 사람이 폴더블 기기, 태블릿, TV처럼 화면이 큰 기기에서 앱을 사용하는 지금이야말로 여러분이 개발하는 앱이나 게임을 준비해 선보이기에 좋은 시점입니다. 태블릿용으로 최적화하고 폴더블용 앱을 빌드하는 작업부터 시작하세요. 가정에서 사용하는 가장 큰 화면인 TV 화면을 위해 Android TV용의 첫 Android 12 프리뷰도 제공됩니다. 이 프리뷰로 TV에 최신 Android 기능을 제공할 수 있으며 완전히 새로운 Google TV 환경에서 앱을 테스트할 수도 있습니다. Android TV Developers 사이트에서 더 자세히 알아보고 ADT-3 개발자 키트로 시작해보세요.
업데이트된 비-SDK 인터페이스 목록(Updates lists of non-SDK interfaces) - 비-SDK 인터페이스를 추가로 제한했으며, 여러분의 의견과과 공개 API 요청은 언제나 환영입니다.
더욱 쉬워진 변경 사항 테스트와 디버깅(Easier testing and debugging of changes) - 앱에 영향을 미칠 수 있는 옵트인 변경 사항을 더 쉽게 테스트할 수 있도록, 그중 대부분을 선택적으로 전환할 수 있도록 만들었습니다. 전환 기능을 사용해 Developer 옵션이나 adb에서 변경 사항을 개별적으로 강제 적용하거나 해제할 수 있습니다. 여기서 자세한 내용을 확인해 보세요.
개발자 옵션에서 앱 호환성 전환
플랫폼 안정성 추진일정(Platform stability milestone) - 작년과 마찬가지로 더 여유있게 앱 호환성 작업을 계획할 수 있도록 플랫폼 안정성 추진일정을 미리 상세히 알려드리겠습니다. 이 일정표는 최종 SDK/NDK API뿐 아니라 최종적인 내부 API와 앱과 직접 관련한 시스템 동작에 대한 정보도 제공합니다. 2021년 8월까지 플랫폼 안정성을 달성할 수 있을 것으로 예상하며, 최종 테스트 수행을 위한 공식 릴리스까지 몇 주간의 시간적 여유가 있을 예정입니다. 세부적인 릴리스 일정은 여기에서 확인할 수 있습니다.
Android 12 시작하기
개발자 프리뷰에는 Android 12 기능을 사용해보고 앱을 테스트하고 의견을 전달하는 데 필요한 모든 것이 포함되어 있습니다. 오늘이라도 바로 Pixel 3/3 XL, Pixel 3a/3a XL, Pixel 4/4 XL, Pixel 4a/4a 5G 또는 Pixel 5 기기로 기기 시스템 이미지를 플래시하여 시작할 수 있습니다. Pixel 기기가 없으면 Android Studio의 Android Emulator로 64비트 시스템 이미지를 사용할 수 있습니다.
준비가 되었으면 다음 작업을 수행해야 합니다.
새로운 기능과 API 사용(Try the new features and APIs) - 개발자 프리뷰의 초기에는 여러분의 의견이 매우 중요합니다. 문제 추적기(Issue tracker)를 통해 문제를 신고하거나 의견 및 요청 페이지에서 선택한 기능에 대한 설문조사에 답변하여 여러분의 의견을 알려주세요.
현재 앱의 호환성 테스트(Test your current app for compatibility) - 여기서 목표는 앱이 Android 12의 기본 동작 변경 사항의 영향을 받는지 알아보는 것입니다. Android 12를 실행하는 기기나 에뮬레이터에 현재 게시된 앱을 설치하고 테스트하기만 하면 됩니다.
옵트인 변경 사항으로 앱 테스트(Test your app with opt-in changes) - Android 12는 새 플랫폼을 대상으로 할 때만 앱에 영향을 주는 옵트인 동작 변경 사항(Opt-in behavior changes)이 있습니다. 이런 변경 사항을 빨리 파악하고 평가하는 것이 매우 중요합니다. 더 쉽게 테스트하기 위해 변경 사항의 적용 여부를 개별적으로 설정할 수 있습니다.
Android 12 릴리스 주기 내내 프리뷰 시스템 이미지와 SDK를 정기적으로 업데이트할 예정입니다. 이 초기 프리뷰 릴리스는 개발자 전용이며 일상적 용도나 소비자용으로 제공되는 것은 아니므로,직접 다운로드해야 사용할 수 있습니다. Pixel 기기에 공장 출고 시 이미지를 플래시하거나 Android 11을 실행하는 Pixel로 OTA 이미지를 테스트용으로 로드할 수 있는데, 이런 경우에 부트로더(bootloader)를 잠금 해제하거나 데이터를 삭제할 필요가 없습니다. 어느 쪽이든, 프리뷰 빌드를 수동으로 설치했다면 이후의 모든 프리뷰와 베타 버전에 대한 향후 업데이트를 OTA 방식으로 자동으로 받을 수 있습니다. 더 자세한 내용은 여기서 확인하세요.