저희는 훌륭한 기술력과 창의성이 돋보이는 수백 건의 혁신적인 게임을 만나 볼 수 있었습니다. 게임을 제출해 주신 모든 개발자 여러분께 진심으로 감사드리며, 오랜 검토와 고심 끝에 선발된 한국의 Top 20 게임을 아래와 같이 발표합니다.
예술성과 뛰어난 작품성을 지닌 Top 20 로 선발된 개발사에게는 사업 성장을 위한 프로모션과 수상 혜택이 제공 되며, 각 개발사는 결승전에서 Top 3 자리를 두고 경합을 펼치게 됩니다.
아울러 안타까운 말씀도 함께 전해드립니다. COVID-19 바이러스가 전세계로 확산됨에 따라 4월 25일로 예정되었던 한국, 일본, 폴란드에서의 결승전을 개최할 수 없게 되었습니다. 최종 후보와 심사위원, 게이머 및 관계자 분들의 안전이 가장 중요하기에 추후 공지가 있을 때까지 결승전을 연기하고자 합니다. 향후 있을 결승전에 대한 공지를 계속하여 확인해 주시면 감사드리겠습니다.
작성자: Xi Zhang(Google 소프트웨어 엔지니어), Caren Chang (Google 개발자 프로그램 엔지니어)
이 글은 Android Dev Summit 2019의 프레젠테이션을 바탕으로 하며, CameraX API의 현재 상태를 반영하도록 업데이트되었습니다. 원문은 이 곳에서 확인 가능하며 블로그 번역 리뷰는 양찬석(Google)님이 참여해 주셨습니다.
Camera2 API는 강력하지만 최대한 활용하기 쉽지 않습니다. 특히 기기에 따라 HDR 또는 야간 모드와 같이 다양한 카메라 기능을 제공하기 때문에 활용하기가 더욱 까다롭습니다. 이를 해결하기 위해 작년 Google I/O에서는 앱에 카메라 기능을 추가할 때 발생하는 어려움을 해결하기 위해 설계된 새로운 Jetpack 라이브러리인 CameraX를 발표했습니다.
개발자가 애플리케이션에 카메라 기능을 더욱 쉽게 통합하도록 지원하기 위해 CameraX팀에서는 다음과 같은 핵심 요소에 중점을 뒀습니다.
●앱에서 더 많은 카메라 기능을 쉽게 구현하는 데 도움이 되는 새로운 기능과 API를 제공합니다. 이제 탭하여 초점 맞추기, 확대/축소 제어 및 기기 회전 정보에 관한 지원이 포함됩니다. 이를 통해 렌즈에 따라 다양한 구성 및 플래시 기능을 더 쉽게 다룰 수 있으므로 카메라 렌즈에 플래시 기능이 있는지 등을 쿼리할 수 있습니다.
●앱이 더 많은 기기에서 야간 모드, HDR 등의 카메라 기능을 사용할 수 있도록 확장 함수를 제공하는 기기의 범위를 넓혔습니다. 이 기능은 작성 시점을 기준으로 삼성, LG, OPPO, Xiaomi, Motorola의 휴대전화(Android 10부터)와 호환됩니다.
●보급형 기기부터 고급형 기기까지 52가지 기기 모델(2억 대 이상의 활성 기기)을 갖춘 실험실에서 특히 API 일관성과 안정성에 중점을 두고 테스트했습니다.
이 작업의 일환으로, CameraX팀에서는 실제 환경에서 라이브러리가 작동하는 방식을 파악하기 위해 Lens Go팀과 긴밀히 협력하고 있습니다. Lens Go는 사용자가 공항 표지판과 같은 대상에 카메라를 갖다 대서 이미지를 분석하고 실시간으로 의견(예: 표지판 내용의 번역)을 보낼 수 있는 앱입니다. 이 협업은 CameraX 라이브러리의 작동 방식, 특히 Lens Go의 주요 기기 세그먼트인 보급형 기기에서의 작동 방식을 테스트하기에 효과적인 방법이었습니다. 또한 매달 수백만 명의 사용자가 수백 가지의 기기에서 Lens Go를 사용하고 있기 때문에 Lens Go에서 CameraX 라이브러리가 어떻게 작동하는지 확인하는 작업은 더 안정적인 라이브러리를 제공하는 데 많은 도움이 되었습니다.
Lens Go팀이 발견한 CameraX 통합의 큰 이점 중 하나는 바로 CameraX가 성능과 크기에 매우 최적화되어 있어 APK 크기를 줄일 수 있다는 점이었습니다. 또한 자체 카메라 코드를 유지하지 않고도 기능을 더 빠르게 제공할 수 있었습니다.
첫 번째 단계는 이미지 캡처 사용 사례를 만드는 것입니다. 이때 사진 해상도와 같은 매개변수를 지정할 수 있습니다. 하지만 설정한 해상도를 사용자 기기에서 지원하는지는 걱정하지 않아도 됩니다. 요청된 해상도를 기기에서 지원하지 않는 경우 CameraX는 이와 가장 가까운 해상도로 대체합니다. 따라서 항상 문제없이 구성을 마칠 수 있습니다.
두 번째 단계는 바인딩입니다. 엑티비티의 생명주기, 카메라 및 캡처 세션의 생명주기 등 고려해야 하는 다양한 생명주기가 있습니다. 사용 사례를 LifecycleOwner로 결합하면 CameraX에서 모든 생명주기를 관리하므로 개발자가 직접 상태 머신을 관리하지 않아도 됩니다. 예를 들어, 필요시 카메라가 열리고, 사용이 끝나면 종료됩니다.
마지막 단계는 상호작용입니다. takePicture를 호출하면 앱에서 사진을 찍습니다.
따라서 단 몇 줄의 코드만으로 이미지 캡처 파이프라인을 가질 수 있습니다.
고급 기능
CameraX에서 제공하는 고급 기능을 이해할 수 있도록 카메라 제어 기능과 카메라 정보 기능을 살펴보겠습니다. 이러한 기능은 사용 사례와 별개로 직접 카메라를 제어할 수 있도록 하는 높은 수준의 API입니다. 즉, 미리보기와 이미지 캡처 사용 사례가 있는 경우 확대/축소 또는 플래시와 같은 카메라 상태를 업데이트하면 이 업데이트가 모든 사용 사례에 적용됩니다.
탭하여 초점 맞추기 구현
CameraX는 자동 초점을 지원하지만, 사용자가 직접 초점을 제어할 수 있도록 여러분이 관련 기능을 제공하려는 경우도 있을 것입니다.
Camera2 API에서 이 기능을 구현하려면 UI(뷰파인더) 좌표와 카메라 센서(이미지) 좌표 간의 변환에 관해 알아야 하고 초점 영역의 크기를 지정해야 합니다.
손가락을 모으거나 펼쳐 확대/축소하기를 구현하려면 기본값과 델타값이 필요합니다. 기본값은 현재의 확대/축소 비율이고, 델타값은 사용자가 손가락을 모으거나 펼쳐 변경하는 비율의 양입니다.
델타값을 얻으려면 ScaleGestureDetector를 만듭니다. 이 Android 객체는 터치 이벤트를 배율로 변환합니다. 이 배율이 델타값입니다.
그런 다음 cameraInfo에서 기본값을 얻습니다. 이 API를 통해 확대/축소 비율, 플래시 사용 가능 여부, 센서 회전도와 같은 카메라 기능 상태를 확인할 수 있습니다.
이 두 가지 값을 사용하여 이제 카메라 제어 기능의 크기와 비율을 호출합니다. CameraX에서 자르기 영역을 파악하고 카메라에 요청을 보냅니다. 이것만으로 손가락을 모으거나 펼쳐 확대/축소하기를 구현할 수 있습니다.
확대/축소 슬라이더 구현
확대/축소 슬라이더를 구현하려면 손가락을 모으거나 펼쳐 확대/축소와는 다른 접근 방식을 취해야 합니다. 이유는 다음과 같습니다. 1~10의 비율로 확대/축소할 수 있는 카메라가 있다고 가정해 보겠습니다. 이 경우 1에서 2로 확대하면 시야가 50% 줄어듭니다. 그러나 9에서 10으로 확대하면 슬라이더에서는 같은 거리이더라도 시야는 10% 줄어듭니다.
이는 최적의 사용자 환경이 아니기 때문에 CameraX에는 setLinearZoom API가 포함되어 있습니다. 이 API는 슬라이더 값을 사용하고 선형 확대/축소를 제공하는 데 필요한 변환을 실행합니다.
원문은 이 곳에서 확인 가능하며 블로그 번역 리뷰는 양찬석(Google)님이 참여해 주셨습니다.
Android 사용자는 휴대전화의 배터리 수명에 많은 신경을 씁니다. 특히 앱에서 지연 가능한 백그라운드 작업을 예약하는 방식은 배터리 수명에 큰 영향을 미칩니다. 배터리 소모가 적은 앱을 개발하는 데 도움이 될 수 있도록 Google은 지연 가능한 백그라운드 처리에 필요한 사항을 모두 지원하는 통합 솔루션인 WorkManager를 도입했습니다.
2020년 11월 1일부터는 Android의 지연 가능한 백그라운드 작업이 WorkManager를 중심으로 통일되며 GCMNetworkManager는 지원 중단됩니다.
WorkManager의 장점
WorkManagerAPI는FirebaseJobDispatcher(FJD) 및 GcmNetworkManager 솔루션의 기능을 통합하여 API 레벨 14까지 일관성 있는 작업 예약 서비스를 제공하면서 배터리 수명을 개선합니다. 예를 들어 앱에서 서버로 로그 파일을 보내야 하는 경우 기기가 충전 중이며 Wi-Fi에 연결될 때까지 기다리는 것이 더 효율적일 수 있습니다. 이 경우 WorkManager는 주어진 조건(충전 중이며 Wi-Fi에 연결됨)이 충족되었을 때 동기화가 실행되도록 해 줍니다. 또한 FJD 및 GcmNetworkManager와 달리 Google Play 서비스가 필요하지도 않습니다.
WorkManager의 다른 몇 가지 주요 특징은 다음과 같습니다.
●앱을 업데이트하고 기기를 다시 시작해도 예약된 작업 계속 진행
●일회성 작업 또는 주기적으로 실행되는 작업 예약
●작업 모니터링 및 관리
●작업 체이닝
개발자에게 미치는 영향
WorkManager 라이브러리의 개발이 완성되어가면서 개발자 스토리를 간소화하고 WorkManager 안정성 및 기능에 초점을 맞추기 위해 대체 솔루션을 지원 중단하기로 했습니다.
●2019년 4월에 Google은 FirebaseJobDispatcher 라이브러리의 지원 중단을 발표했습니다. 2020년 4월에는 라이브러리가 보관처리되며 라이브러리에서 제기되는 문제를 더 이상 지원하지 않게 됩니다.
●이에 더해 이번에는 GCMNetworkManager의 지원 중단을 발표하게 되었습니다. 라이브러리에 더 이상 새로운 기능이 추가되지 않으며 2020년 11월부터는 라이브러리와 관련된 문제를 지원하지 않게 됩니다.
●또한 앱에서 대상 API 레벨(targetSdkVersion)을Android 10(API 레벨 29) 이상으로 업데이트하면 AndroidMarshmallow(6.0) 이상을 실행하는 기기에서 더 이상 FirebaseJobDispatcher 및 GcmNetworkManager API 호출이 작동하지 않습니다.
WorkManager로 이전
아직 앱을 WorkManager로 이전하지 않으셨다면 지금 바로 이전해 주세요. 우선 WorkManager 공식 문서를 읽어 보시기 바랍니다.
앱에서 여전히 FirebaseJobDispatcher를 사용 중이라면 이전 가이드에 따라 앱을 WorkManager로 이전할 수 있습니다. 이와 유사하게 GCMNetworkManager에서WorkManager로의이전 가이드를 활용할 수도 있습니다.
YouTube는 백그라운드 예약 요구사항에 맞춰 최근 WorkManager로 이전했으며, 덕분에 앱 시작 시간을 개선하고 비정상 종료 발생률도 8%만큼 낮출 수 있었습니다.
앞으로의 전망
저희는 계속해서 WorkManager를 개선하고 기능을 개발하고 있습니다. 라이브러리 사용 중에 문제가 발생하거나, 제안하고 싶은 기능이 있거나, 라이브러리와 관련된 의견이 있다면 이곳으로 알려주세요.