작성자: Arjun Dayal (Director, Google Play Games)
이 글의 원문은 여기서 확인하실 수 있습니다.
PC용 Google Play 게임즈 사용자는 Google Play와 동일한 수준의 보안과 안정성을 누리며 자신이 좋아하는 모바일 게임을 PC에서 플레이할 수 있습니다. 최고의 게임들을 소개하는 카탈로그와 매월 100억 개 이상의 모바일 세션을 제공하는 이 플랫폼은 고품질, 고성능 에뮬레이션과 다화면 플레이를 원하는 사용자들의 기대에 부응해 왔습니다.
개발자 여러분은 PC용 Google Play 게임즈를 통해 사용자층, 참여도, ROI를 확대하고 다양한 Google 기기 영역에서 작동하는 고품질 게임을 개발할 수 있습니다.
로그인된 모든 기기에서 Asphalt 9: Legends의 플레이 화면이 원활하게 동기화된 모습입니다.
게임 가용성과 PC 호환성에 따라 다를 수 있습니다.
PC용 Google Play 게임즈는 대상 지역을 넓혀 가면서 전 세계 사용자 수십억 명에게 사랑받는 게임들을 점점 더 많이 지원하고 있습니다. 다음 몇 개월 안에 일본과 유럽까지 확대하고 Garena Free Fire, Ludo King, 메이플스토리M과 같은 게임도 추가로 지원할 예정입니다.
Intel의 협력에 힘입어, 개발자 여러분은 기존 모바일 빌드로도 PC용 Google Play 게임즈에 쉽게 참여하실 수 있습니다. 최적화를 완료하여 최고의 사용자 경험을 제공하는 게임이 크로스 플랫폼 마케팅 및 프로모션의 기회를 얻는 것은 당연하지만, 기존 모바일 빌드를 제출하여 플레이어를 더 빨리 만나는 것도 가능합니다. 여러분이 개발한 모바일 게임이 데스크톱에서 잘 작동한다면, 양식을 작성해 Google Play 게임즈에 참여해 보실 것을 권합니다.
새롭게 선보이는 PC용 Google Play 게임즈 개발자 에뮬레이터는 디버그 및 빌드 프로세스를 위해 특별히 설계된 Google Play 게임즈의 개발자 중심 에뮬레이터입니다. 이 에뮬레이터를 사용하면 adb 명령을 통해 APK를 사이드로드하거나 다양한 플레이어 환경에 맞게 Android Studio로 일부 그래픽 및 하드웨어 설정을 조정하면서 게임을 직접 배포할 수 있습니다. 양식을 작성하시면 지금 즉시 에뮬레이터를 다운로드할 수 있습니다.
Google Play 게임즈에서 수준 높은 플레이 경험을 보장하기 위해서는 빌드 제출 전에 출시 체크리스트의 모든 필수 단계를 완료하셔야 승인을 빨리 얻을 수 있습니다. 이 체크리스트에는 고해상도 텍스처 및 애셋 사용, Windows 화면 비율 지원, 마우스 및 키보드 입력 구현 등의 주요 요구사항이 포함되어 있습니다.
20억 개 이상의 게이머 프로필을 보유한 Play 게임즈 서비스는 Google Play 게임즈에서 기기 간 원활한 연속성을 보장하는 핵심 역할을 합니다. 올해 저희는 차세대 플레이어 ID를 출시할 예정입니다. 차세대 플레이어 ID는 하나의 게임 내에서 기기에 관계없이 동일하게 유지되나, 사용자가 다른 게임을 플레이하면 그때마다 별도의 ID를 받게 됩니다.
지난 몇 년간 게임 업계에서는 데스크톱, 노트북, 태블릿, 폴더블을 포함한 대화면 기기에서 모바일 기반 게임의 원활한 플레이를 구현하려는 적극적인 움직임이 일었습니다. 폼 팩터마다 특유의 장점이 있다고 해서 각각에 맞게 게임을 일일이 맞춤 설정할 필요는 없을 것입니다. 이 세션을 확인하여 다양한 플랫폼 전반에 걸쳐 훌륭한 플레이 경험을 보장하는 방법을 알아보시기 바랍니다.
개발자 사이트에서 PC용 Google Play 게임즈에 대해 자세히 알아보고 g.co/gamedevsummit에서 Google for Games Developer Summit의 모든 세션을 시청하실 수 있습니다.
Windows는 Microsoft 그룹사의 상표입니다.
*PC용 Google Play 게임즈는 2023년 3월 14일 현재 13개국에서 다운로드할 수 있습니다.
이 글의 원문은 여기서 확인하실 수 있으며 블로그 리뷰에는 서본양(Google)님이 참여해주셨습니다.
개발자 여러분께서 성공적인 비즈니스를 구축하고 전 세계 수십억 명의 사용자에게 양질의 앱과 게임을 제공할 수 있도록 Android와 Google Play를 안전하게 보호하는 것이 저희의 최우선 목표입니다. 지난 몇 년에 걸쳐 저희는 여러분의 앱을 보호하는 다양한 도구를 공유하고, 사용자와 가족들을 안전하게 지키는 정책들을 발전시키며, 개인정보 보호를 강화한 광고 기술을 구축해 왔습니다.
급격한 속도로 빠르게 변화하고 있는 개인정보 보호 및 보안 환경에 발맞추어 저희는 그동안 더 많은 제품과 정책 지원을 제공하는 한편, 운영 현황을 수시로 업데이트하며 변동 사항을 미리 알려드리고 있습니다. 올해 역시 작년과 마찬가지로, 함께 만날 사용자들을 위하여 개발자 여러분과 협업해 나가고자 하는 저희의 주요 프로젝트를 미리 소개해 드리고자 합니다.
개인정보 보호를 한층 강화하는 광고 방식을 구현합니다
작년에 도입을 발표했던 Android용 Privacy Sandbox는 사용자의 개인정보 보호 기준을 높이고, 무료 콘텐츠 및 서비스에 대한 지속적인 액세스를 보장하려는 업계 전반에 걸친 이니셔티브입니다. 현재 저희의 웹 버전을 바탕으로 사용자 데이터의 공유를 제한하고 크로스앱 식별자에 의존하지 않는 디지털 광고 솔루션을 개발 중이며, 업계와 긴밀히 협력하여 피드백을 수집하면서 새로운 기술을 시험하고 있습니다.
이제 이 이니셔티브의 다음 단계로서, 일부 Android 기기를 대상으로 하는 Privacy Sandbox의 첫 Android 베타 버전을 출시합니다. 이 베타 버전을 통해 사용자와 개발자는 실제 환경에서 이러한 새로운 솔루션을 경험하고 평가할 수 있습니다. 베타 참여 방법은 개발자 가이드라인을 참고해 주시고, Privacy Sandbox 블로그를 통해 꾸준히 게시되는 업데이트 소식을 확인해 주시기 바랍니다. 저희는 앞으로도 개인정보 보호를 한층 더 강화하는 모바일 생태계로의 전환을 모색하기 위해 개발자, 퍼블리셔, 규제기관 등과 지속적으로 협력해 나갈 것입니다.
데이터에 대한 사용자의 제어 권한을 강화합니다
책임감 있는 데이터 보호에 대한 간단하고 이해하기 쉬운 방식을 보여줌으로써 소비자의 신뢰를 얻고자 하는 개발자 여러분을 위해, 저희는 지난 몇 년간 여러분이 사용자 데이터를 수집, 공유, 보호하는 과정을 더욱 투명하게 공개하실 수 있도록 지원해 왔습니다. 올해에도 Google Play의 데이터 보안 섹션에 새로운 기능과 정책을 도입하여 사용자들이 데이터 삭제를 더욱 명확히 이해하고 제어하도록 돕고자 합니다.
개발자 여러분은 사용자 데이터에 접근하기 위한 권한을 줄임으로써 사용자의 보안을 강화할 수 있습니다. 개발자 여러분의 앱은 기능을 충족하기 위해 개인정보 보호에 용이한 방식을 취할 수 있습니다. 예를 들어 런타임 권한으로 기기에 저장된 모든 사진에 액세스를 요청하는 대신, 사진 선택 도구 인텐트를 이용하면 사용자가 어떤 사진을 앱과 공유할지 개별적으로 선택할 수 있습니다. 더불어 Android 14 개발자 프리뷰 1을 통해 개인정보 보호, 보안 및 투명성 개선 사항을 테스트해 보는 것도 가능합니다. 곧이어 더 많은 내용을 공유해 드릴 예정이니, Android 14 및 Google Play 정책 업데이트를 계속 확인해 주시기 바랍니다.
악용과 공격으로부터 앱을 보호합니다
개발자 여러분께서는 비즈니스, 사용자 및 IP 보호에 더 많은 지원이 필요하다는 의견을 피력해 주셨습니다. 이에 따라 저희는 여러분이 위험을 감지하고 예방하며 악용 방지 전략을 강화하는 데 도움을 드리고자 Play Integrity API 및 자동 무결성 보호를 개선해 왔습니다. 이러한 제품을 사용하는 개발자는 앱과 게임에 대한 무단 액세스가 평균 50% 이상 감소했으므로, Play Integrity API를 지금 바로 사용해 보시기 바랍니다. 또한 많은 분이 요청해 주신 무결성 도구 기능을 업데이트하고 자동 무결성 보호에 대한 액세스를 확대할 예정이니 많은 관심 부탁드립니다.
SDK 탐색을 지원해 드립니다
어떤 SDK가 신뢰할 수 있고 안전한지 판단하는 데 도움이 더 필요하다는 의견도 있었습니다. 이에 따라 특정 SDK 버전에 관한 중요한 문제나 SDK 관련 비정상 종료를 해결하는 방법에 관하여 SDK 공급자가 Play Console과 Android Studio를 통해 여러분께 직접 메시지를 전달하는 방법이 마련되었습니다. 한편 Google Play SDK 색인이 공개됨에 따라, Google Play에서 가장 널리 사용되는 상용 SDK 100여 가지에 대한 정보와 사용 데이터가 제공되고 있습니다. SDK가 사용할 수 있는 민감한 권한이나 Google Play 정책을 위반할 수 있는 특정 SDK 버전 등에 관해서도 앞으로 더 많은 정보를 공유해 드리려 합니다. SDK 공급자와 협력하여 더욱 안전한 SDK를 구축하고 여러분께 보다 폭넓은 정보를 제공하려는 저희의 노력을 통해, 개발자 여러분과 사용자가 앱 사용 중단을 겪거나 위험에 노출되는 일이 줄어들기를 바랍니다.
어린이와 가족에 대한 보호를 강화합니다
저희는 개발자 여러분과 힘을 모은 결과 Google Play가 아이들에게 유쾌한 교육적 경험을 선사하려는 가족들의 신뢰를 받는 플랫폼이 되었다고 자부합니다. 지난 몇 년간 저희는 앱 경험을 개선하고 개인정보 보호 및 보안을 강화하고자 새로운 기능을 출시했고, 프로그램을 확대했으며, 정책을 발전시켰습니다. 올해에도 Google Play는 가족을 위한 앱 추천 기능을 강화하고 어린이의 안전을 위한 정책을 업데이트할 예정입니다. 정책 이메일과 PolicyBytes 영상을 통해 최신 정보를 확인해 주시기 바랍니다.
책임감 있는 데이터의 수집 및 사용을 촉진합니다
저희는 개발자 여러분과 앱이 사용자 정보에 접근할 때, 양질의 사용자 경험 제공과 앱 작동에 필수적인 사용자 정보만을 수집하고 사용해야 한다는 점을 계속 강조하고 있습니다. 올해에도 새로운 권한과 정책 요건을 소개해 드릴 예정입니다. 정책 이메일과 PolicyBytes 영상을 통해 최신 정보를 확인해 주시기 바랍니다.
사용자를 안전하게 보호하면서 개발자의 혁신을 장려합니다
저희는 하나의 플랫폼으로서 개발자 여러분이 어떤 어려움에 부딪히는지 이해하고, 혁신적인 아이디어를 구현하는 데 도움을 드리고자 노력합니다. Google Play는 지금도 다양한 블록체인 관련 앱을 관리하고 있지만, NFT 형식의 디지털 자산 토큰화를 비롯한 웹3 구성요소를 앱과 게임에 추가로 도입하려 하는 개발자 여러분의 목소리에도 귀 기울이고 있습니다. 모든 새로운 기술은 사용자 보호 책임과 혁신 사이에서 반드시 균형을 유지해야 합니다. 따라서 저희는 책임감을 가지고 이러한 기회를 뒷받침하기 위해 어떻게 정책을 바꾸어야 할지 가늠하고자, 협력 개발사들과 대화를 시작했습니다. 늘 그렇듯, 개발자 여러분과의 소통은 저희 플랫폼을 발전시키고, 저희가 여러분과 함께 공유하는 사용자에게 안전하고 투명하며 믿음직한 경험을 제공하는 데 필수적인 부분입니다. 조만간 여러분께 더 많은 소식을 알려 드리겠습니다.
Google Play 정책과 Play Console로 더 나은 경험을 제공합니다
저희는 정책에 관련한 소통, 지원, 경험을 지속적으로 개선하고 있습니다. 최근에는 여러분이 앱 리뷰 과정을 더욱 유연하게 제어할 수 있는 새로운 Play Console 기능을 도입하기도 했습니다. 올해는 더 많은 기능과 지원을 제공할 예정입니다.
궁금한 점을 물어보고 다른 이들의 생각을 들을 수 있는 곳이 있으면 좋겠다는 개발자 여러분의 의견에 따라, 지난 2월에는 모든 개발자가 영어로 동료들에게 조언을 구하고 권장사항을 공유할 수 있는 Google Play 개발자 커뮤니티를 열었습니다. 여러 개발자의 긍정적인 피드백이 이어진 이 새로운 포럼에 이제 Product Expert로 등록하실 수 있습니다. (제품은 Play Console, 언어는 영어를 선택해 주시기 바랍니다.)
이와 더불어 전화로 직접 정책 지원을 제공하는 Google Play 개발자 헬프라인 파일럿 등의 파일럿 프로그램도 확대 중입니다. 본 파일럿 프로그램은 현재 26개국 약 60,000명을 대상으로 할 만큼 확대되었습니다. (지난 11월 이후 개발자 16,000명과 9개국이 새롭게 추가되었습니다.) 지금까지 5,000여 건에 가까운 정책 지원 세션을 완수했으며, 만족도는 90%를 기록 중입니다.
끝으로, 저희는 여러분께서 앱 업데이트를 고려하실 때 참고하실 수 있도록 Google Play Console 메시지함을 통해 향후 요건 관련 공지와 알림을 발송해 드리고 있습니다. 올해에는 여러분께서 앱 사용 권한 선언을 미리 계획할 수 있는 새로운 기능도 구축하려 합니다.
올 한 해 동안 업데이트 소식을 계속 전해 드리겠습니다. 누구나 안심하고 신뢰할 수 있는 Android와 Google Play를 만드는 데 힘을 모아 주셔서 감사드립니다.
작성자: Harini Chandrasekharan (Staff Software Engineer, Google Play)
Google Play 스토어는 10여 년 전인 2012년에 출시된 이래, 끊임없이 발전하는 전 세계의 수많은 앱과 게임을 수십억 명의 사용자와 연결하며 Android의 중심 역할을 해 왔습니다.
세계 최대 Android 마켓플레이스의 서비스 인프라는 어떻게 설계해야 할까요? 소비자를 대상으로 하는 소프트웨어의 경우, 창의적인 엔지니어링 솔루션을 마련하더라도 Google 규모의 서비스에 필요한 까다로운 조건을 충족하지 못하는 일이 많습니다. 따라서 Google의 모든 시스템은 Google Play 스토어의 기준에 맞는 특유의 가용성, 품질, 지연 시간 조건을 지킬 수 있도록 세심한 개선을 반복적으로 거칩니다.
기능이란 사용자와 직접 상호 작용하는 형식, 콘텐츠, 콘텐츠의 배열, 페이지 레이아웃, 정보 아키텍처 등을 말합니다. 형식은 추천 시스템, 광고주, 머천다이저 등의 다양한 소스가 제공하는 앱 콘텐츠가 UI에 표시되는 방식을 결정합니다. 적절한 콘텐츠와 UI로 맞춤형 환경을 형성하여 Play 스토어를 이용하는 사용자에게 가장 관련성 높은 앱과 게임을 제안하는 것이 그 목표입니다.
소비자를 대상으로 하는 기능의 영역에서는 사용자의 의견과 선택, 개발자 생태계, 수요가 너무 빠르게 바뀌는 바람에 인프라가 따라잡지 못하기도 합니다. 그런 환경에서 엔지니어가 직면하는 가장 큰 어려움은 확장성과 성능의 제약 안에서 변화에 발맞추는 한편 소비자 공간의 요구사항을 충족하는 인프라를 설계하는 것입니다. 이처럼 역동적인 공간에서 발생하는 엔지니어링의 어려움을 몇 가지 자세히 살펴보겠습니다.
Play 스토어처럼 데이터를 기반으로 하는 구조에서는 모든 중요 요소를 평가할 수 있는 측정항목이 마련되어 있습니다. 성공의 정도를 측정하고 추적할 때 유용한 몇 가지 기준을 아래에 소개합니다.
제품/비즈니스 측정항목 - 검토 대상인 제품이나 서비스에 해당하는 측정항목입니다. 새로운 관리가 필요할 때 A/B 테스트로 이 측정항목의 변화를 측정하면 신뢰도를 확보할 수 있으며, 득실을 따지는 의사 결정을 할 때 특히유용합니다.
성능 - 지연 시간, 오류율, 가용성 측정은 당연하게도 거의 모든 서비스의 근간을 이룹니다. 이들은 제품에 대한 사용자의 경험과 인식을 면밀히 추적하는 기본 측정항목이므로 반드시 알아 두어야 합니다.
시스템 상태 - 리소스 사용률과 연결 안정성을 추적하는 내부 시스템 측정항목입니다.
Play 스토어의 요구사항에 맞게 확장하는 한편 사용자 상호 작용의 유동성과 반응성을 성능 기준 이상으로 확보할 수 있는 백엔드 시스템을 설계하는 것이 무엇보다도 중요합니다. 엔지니어링의 관점에서 보자면 인프라는 비즈니스의 요구를 충족할 수 있도록 지속적으로 발전해야 합니다. Play 스토어의 인프라도 예외가 아니기에, 오늘날 사용자들이 이용하는 신규 기능의 발판을 마련하고 현대화, 기술 부채 탕감, 특히 지연 시간 단축을 이루기 위하여 지난 10년간 여러 단계의 발전을 거쳤습니다.
어려움: 기능은 오랫동안 반복적으로 시험해야 하지만, 앞으로 발생할 모든 요구사항을 미리 충족하는 엔지니어링 인프라를 계획하기는 쉽지 않습니다.
실험이 일상인 환경에서는 기능을 적정 규모로 신속히 구축하고자 최적의 접근 방식을 취해도 기술 부채가 발생하는 일이 비일비재합니다. 기술 부채는 종류가 다양하므로, 실패로 끝난 기능이 쌓이다 보면 정리가 어려워지고, 성능이 하락하며, 까다로운 테스트를 피할 길이 없는 코드 오류가 발생하기도 합니다.
어려움: 수백 명의 엔지니어가 활동하는 대규모 조직에서는 여러 기능을 동시에 제각각 개발하곤 합니다.
인프라를 재사용하고 함께 혁신을 이루려 하면 속도가 심각하게 떨어지는 일이 많습니다. 제품이 빠르게 발전하는 부문에서는 시스템의 유연성을 위해 각종 수단을 투입하는 데 상당한 불확실성이 따릅니다. 투입 수단이 너무 많으면 시스템이 지나치게 복잡해지고, 너무 적으면 반복으로 인한 비용이 치솟습니다. 양쪽 사이에서 균형을 찾는 것은 이 부문에서 활동하는 기능 엔지니어가 갖추어야 할 핵심 역량입니다.
어려움: 근사한 엔지니어링 솔루션을 개발하는 데 시간이 소요되어 기회 비용이 발생합니다.
실험 시간은 사용자를 대상으로 하는 기능을 위한 솔루션을 설계할 때 염두에 두어야 할 매우 중요한 측정항목입니다. 반복 속도를 향상하고 지연 시간을 비롯한 성능 관련 SLO를 충족하는 유연한 설계가 이상적입니다.
하지만 실제로는 변경 사항으로 인해 특정 사용자가 받을 영향을 추정할 때 어림짐작에 기대야 할 부분이 많습니다. 과거의 데이터와 경험을 거리낌 없이 활용할 만한 상황도 있겠지만, 전에 없던 완전히 새로운 아이디어에 적용하기에는 무리가 있습니다.
Play 스토어가 최첨단 혁신을 꾀하고자 위의 어려움을 해결하는 방법은 다음과 같습니다.
최적의 출시 시점을 찾으려면 사용자에게 기능을 제공하고 앱 설치와 같은 스토어 비즈니스 측정항목에 어떤 영향이 있는지 A/B 테스트를 통해 알아내야 합니다. 데이터를 기반으로 하는 빠른 반복을 수행하면 최종 기능을 목표에 맞게 조정할 수 있습니다. Google은 세계적인 규모로 A/B 테스트를 실행하기 위한 여러 자체 개발 기술을 보유하고 있으며, 이 기술들은 실험의 원활한 진행에 도움을 주는 측정항목 표시 도구와 전혀 어긋나지 않게 잘 작동합니다. 따라서 개발자 여러분은 분석 대신 코딩에 더 많은 시간을 할애할 수 있습니다.
설계를 시작하기 전에는 몇 가지 중요한 질문에 대한 답이 필요합니다. 무엇을 개발할지 결정하고, 개발 결과물이 Google의 품질 기준을 충족하는지 판단하고, 엔지니어링 비용을 파악하고, 해결하고자 하는 사용자의 요구사항이 무엇인지 이해해야 합니다. 따라서 기능 엔지니어링에는 제품 관리자와의 긴밀한 협업이 필요할 때가 많습니다. 사용자 여정에 맞는 합리적인 엔지니어링 시간 내에 구축할 수 있는 MVP를 위주로 삼는 것이 성공의 핵심입니다.
반복을 자주 수행하고 MVP를 빨리 개발하다 보면 각종 부작용이 따르는데, 그중 심각한 것이 기술 부채입니다. 속도 향상을 위한 최적화 과정에서 중요 단계를 건너뛰면 측정항목 실행이 불가능해져 코드를 쓰지 못하게 되거나 실험 플래그가 삭제될 수 있고, 이런 문제를 방치하면 테스트와 유지 관리가 어려워지는 데다 향후 개발 속도에도 차질이 생깁니다. 반면 최근에 나온 훌륭한 프레임워크를 이용해 지연 시간을 최대한 줄이거나 개발 과정을 단순화하면 장기적으로 큰 이득이 됩니다. 리팩터링 혹은 완전 재작성을 통해 인프라를 자주 쇄신하는 것은 코드가 잘못 설계되었음을 인정하는 일일 수도 있지만, 기능 엔지니어라면 감수해야 할 일입니다. 사용자와 기능 사이의 상호 작용이 이루어지지 않으면 아무리 멋진 인프라라도 의미가 없을 겁니다.
작성자: Francesco Romano (Developer Relations Engineer, Android)
그동안 Android 기기는 크기, 형태, 디스플레이를 비롯한 여러 특징이 점차 다양해지는 방향으로 발전해 왔지만, 그 와중에도 휴대폰 사진 촬영은 Android 기기 초창기부터 가장 핵심적인 사용 사례에 속했습니다. 카메라의 기능은 지금도 여전히 휴대폰을 구매할 때 가장 중요한 요인으로 고려됩니다.
개발자 여러분은 앱에서 카메라 기능을 활용할 수 있도록 Android Camera Framework를 채택하실 것입니다. 가장 먼저 구현할 사용 사례인 미리보기는 카메라 센서의 출력을 화면에 표시합니다.
개발을 계속 진행하면서 기기 화면과 같은 크기의 영역을 이용하여 CaptureSession을 생성하실 텐데, 화면 비율이 카메라 센서 출력과 동일하고 기기가 처음 그대로 세로 방향을 유지하는 한 모든 것이 정상적으로 작동할 것입니다.
하지만 창 크기를 조정하거나, 기기를 펼치거나, 디스플레이 또는 화면 방향을 바꾸면 어떻게 될까요? 미리보기가 한쪽 방향으로 늘어나거나, 거꾸로 뒤집히거나, 이상하게 회전되어 보이는 경우가 대부분입니다. 멀티 윈도우 환경에서는 앱이 비정상 종료될 수도 있습니다.
왜 이런 문제가 발생하는 걸까요? CaptureSession을 생성할 때 당연히 여기고 넘어가는 점이 있기 때문입니다.
그동안에는 앱을 수명 주기 내내 하나의 동일한 창에서만 보는 편이었지만, 폴더블 기기 같은 새로운 폼 팩터, 멀티 윈도우나 멀티 디스플레이 같은 새로운 디스플레이 모드가 등장한 지금도 그럴 것이라고 생각해서는 안 됩니다.
따라서 다양한 폼 팩터를 대상으로 하는 앱 개발 시 어떤 요소를 가장 우선적으로 고려해야 하는지 살펴볼 필요가 있습니다.
다양한 폼 팩터에서 작동할 앱을 개발할 때 간과하기 쉬운 점을 정리해 보자면 다음과 같습니다.
CameraX가 위 사례를 대부분 해결할 수 있지만, Camera2 API를 사용하여 어느 상황에서든 작동하는 미리보기를 구현하는 것은 어려운 작업이 될 수 있습니다. 이에 대해서는 카메라 앱에서 크기 조절이 가능한 노출 영역 지원 Codelab 문서에서 확인하실 수 있습니다.
어떤 간단한 구성요소가 이런 세부 사항들을 처리해 줘서 개발자 여러분이 특정 앱 로직에만 집중할 수 있다면 좋지 않을까요?
당연히 그렇습니다.
CameraViewfinder는 Jetpack 라이브러리의 새로운 아티팩트로, 카메라 미리보기를 쉽고 빠르게 구현할 수 있도록 도와줍니다. CameraViewfinder는 내부적으로 TextureView 또는 SurfaceView를 사용해 카메라 피드를 표시하며, 뷰파인더를 올바르게 표시하는 데 필요한 변환을 적용합니다. 여기에는 화면 비율, 배율, 회전 등을 수정하는 작업이 포함됩니다. CameraViewfinder는 기존 Camera2 코드베이스와 완벽하게 호환되며 여러 기기에서 계속 테스트를 거칩니다.
이제 사용 방법을 알아보겠습니다.
먼저 앱 수준 build.gradle 파일에 종속성을 추가합니다.
implementation "androidx.camera:camera-viewfinder:1.3.0-alpha01"
프로젝트를 동기화합니다. 이제 CameraViewfinder를 다른 View로 직접 사용할 수 있을 것입니다. 예를 들어 레이아웃 파일에 이를 추가할 수 있습니다.
<androidx.camera.viewfinder.CameraViewfinder
android:id="@+id/view_finder"
app:scaleType="fitCenter"
app:implementationMode="performance"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
보시다시피 CameraViewfinder에는 PreviewView에서 사용할 수 있는 것과 똑같은 컨트롤이 있으므로 다양한 구현 모드와 배율 유형을 선택할 수 있습니다.
이 구성요소가 이제 레이아웃의 일부가 된 상황에서 CameraCaptureSession을 생성할 수도 있지만, TextureView 또는 SurfaceView를 대상 영역으로 제공하는 대신 requestSurfaceAsync()의 결과를 사용할 것을 권장합니다.
fun startCamera(){
val previewResolution = Size(width, height)
val viewfinderSurfaceRequest =
ViewfinderSurfaceRequest(previewResolution, characteristics)
val surfaceListenableFuture =
cameraViewfinder.requestSurfaceAsync(viewfinderSurfaceRequest)
Futures.addCallback(surfaceListenableFuture, object : FutureCallback<Surface> {
override fun onSuccess(surface: Surface) {
//create a CaptureSession using this surface as usual
}
override fun onFailure(t: Throwable) { /* something went wrong */}
}, ContextCompat.getMainExecutor(context))
덧붙임: 폴더블 기기에 최적화된 레이아웃
CameraViewFinder는 영역 크기 조절, 구성 변경, 회전, 멀티 윈도우 모드에 바로 사용할 수 있고, 수많은 폴더블 기기에서 테스트를 거친 상태입니다.
하지만 폴더블 및 이중 화면 기기에 최적화된 레이아웃을 구현하려는 경우에는 CameraViewFinder를 Jetpack WindowManager 라이브러리와 결합하여 사용자에게 꼭 맞는 환경을 제공할 수도 있습니다.
예를 들어 화면 중앙에 힌지가 있거나 기기가 '책' 또는 '탁상' 모드일 때 전체 화면 미리보기를 표시하지 않도록 선택할 수 있습니다. 이때 화면 한쪽에는 뷰파인더를 두고 다른 쪽에는 컨트롤을 두거나, 화면의 일부 영역에 최근 찍은 사진을 띄울 수 있습니다. 상상하는 만큼 마음껏 구현됩니다.