저희는 훌륭한 기술력과 창의성이 돋보이는 수백 건의 혁신적인 게임을 만나 볼 수 있었습니다. 게임을 제출해 주신 모든 개발자 여러분께 진심으로 감사드리며, 오랜 검토와 고심 끝에 선발된 한국의 Top 20 게임을 아래와 같이 발표합니다.


예술성과 뛰어난 작품성을 지닌 Top 20 로 선발된 개발사에게는 사업 성장을 위한 프로모션과 수상 혜택이 제공 되며, 각 개발사는 결승전에서 Top 3 자리를 두고 경합을 펼치게 됩니다. 

아울러 안타까운 말씀도 함께 전해드립니다. COVID-19 바이러스가 전세계로 확산됨에 따라 4월 25일로 예정되었던 한국, 일본, 폴란드에서의 결승전을 개최할 수 없게 되었습니다. 최종 후보와 심사위원, 게이머 및 관계자 분들의 안전이 가장 중요하기에 추후 공지가 있을 때까지 결승전을 연기하고자 합니다. 향후 있을 결승전에 대한 공지를 계속하여 확인해 주시면 감사드리겠습니다.




제5회 구글플레이 인디 게임 페스티벌 Top 20  게임(개발사 명) *가나다순



Android 앱/게임 개발자를 위한 무료 온라인 교육 플랫폼인 Play Academy는 지난 2019년 9월부터 11월까지 3개월 간 ‘히어로 캠페인'이라는 개발자 성공사례 발굴 프로젝트를 진행했습니다. 


이 캠페인은 Play Academy 강의를 통해 기존 서비스를 혁신하고 비즈니스 성장을 이뤄낸 사례를 소개하고 ‘성장'의 가치를 공유하는 캠페인입니다.  


이번 ‘히어로 캠페인'에 선발된 총 6명의 개발자들은 기존 게임사, 스타트업부터 1인 개발사에 이르기까지 다채로운 배경을 지닌 분들입니다. 이들의 목소리를 듣고 어떻게 Play Academy로 실질적인 비즈니스 성장을 이뤄냈는지 살펴보시기 바랍니다. 


딜라이트룸 ‘알라미'
‘알라미'는 사용자가 사전에 선택한 미션을 수행해야 알람이 해제되는 알람 앱입니다. 장예소나 제품 디자이너는 Play Academy를 듣고 Play Console의 스토어 등록정보, 비공개 베타서비스 등을 활용해 미국 오가닉 유저를 90% 상승시켰습니다. 


오케이 소프트 ‘항상 보이는 볼륨버튼' 
‘항상 보이는 볼륨 버튼’은 앱으로 볼륨 조절이 가능하도록 지원하는 앱 입니다. 개발 입문자인 어영선 대표가 처음 개발한 앱으로 Play Academy를 통해 사용자 의견을 앱 개발에 반영하여 3개월만에 사용자 수를 3배 확대할 수 있었습니다. 


네오위즈플레이스튜디오 ‘피망 뉴맞고' 
네오위즈는 ‘피망 뉴 맞고’ 등 다양한 웹보드 게임을 서비스하고 있습니다. 이경주 네오위즈 게임운영팀 팀장은 Play Academy를 통해 보다 정교한 유저 타겟을 설정하고 앱 운영 과정을 크게 개선할 수 있었습니다.  


에듀캐스트 ‘에듀캐스트'
에듀캐스트는 원하는 가격에 온라인 강의를 판매, 구매, 시청이 가능한 온라인 학습 플랫폼입니다. 류기민 개발자는 Play Academy 강의를 수강한 후 사용자 리뷰 분석을 진행하여 4개월 만에 앱 평점을 2배로 상승 시켰습니다. 


플랫팜 ‘찰라네온' 
‘찰라 네온'은 레트로 느낌의 레온 템플릿, 필터, 문구 등을 지원하는 디자인 앱입니다. 배승현 마케팅 팀장은 Play Academy를 통해 첫 구독상품의 전략을 사용자 관점에서 효과적으로 세울 수 있었습니다. 


띵앱스 ‘리그램' 
‘리그램'은 Instagram에서 리포스팅을 지원하는 앱입니다. 1인 개발자 안동원 대표는 Play Academy 강의를 통해 앱 크기를 줄이고 서비스를 글로벌화하여 2달만에 글로벌 활성사용자가 약 2,500% 증가되었습니다.  


선발된 개발자 스토리는 Play Academy 공식 사이트의 ‘Play Academy 개발자 이야기’에서 직접 확인하실 수 있습니다. 처음 방문하신 경우, 구글 계정으로 로그인한 후 국가 설정을 '대한민국'으로 지정해 주시면 됩니다.

작성자:  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 사용
CameraX는 가장 일반적인 카메라 시나리오에서 다음 3가지 사용 사례를 지원합니다.
미리보기: 뷰파인더를 포함하여 앱에서 실시간 카메라 피드를 표시할 수 있습니다.
이미지 분석: 카메라 프레임 데이터에 액세스하여 객체 감지, 증강 현실과 같은 기능을 구현할 수 있습니다.
이미지 캡처: 사진을 찍어서 디스크에 저장할 수 있습니다.
각 사용 사례에는 구성, 결합, 상호작용의 세 가지 설정 단계가 있습니다.
각 단계에 관한 자세한 설명을 위해 앱에서 사진을 찍는 이미지 캡처의 예를 살펴보겠습니다.
첫 번째 단계는 이미지 캡처 사용 사례를 만드는 것입니다. 이때 사진 해상도와 같은 매개변수를 지정할 수 있습니다. 하지만 설정한 해상도를 사용자 기기에서 지원하는지는 걱정하지 않아도 됩니다. 요청된 해상도를 기기에서 지원하지 않는 경우 CameraX는 이와 가장 가까운 해상도로 대체합니다. 따라서 항상 문제없이 구성을 마칠 수 있습니다.
두 번째 단계는 바인딩입니다. 엑티비티의 생명주기, 카메라 및 캡처 세션의 생명주기 등 고려해야 하는 다양한 생명주기가 있습니다. 사용 사례를 LifecycleOwner로 결합하면 CameraX에서 모든 생명주기를 관리하므로 개발자가 직접 상태 머신을 관리하지 않아도 됩니다. 예를 들어, 필요시 카메라가 열리고, 사용이 끝나면 종료됩니다.
마지막 단계는 상호작용입니다. takePicture를 호출하면 앱에서 사진을 찍습니다.
따라서 단 몇 줄의 코드만으로 이미지 캡처 파이프라인을 가질 수 있습니다.
고급 기능
CameraX에서 제공하는 고급 기능을 이해할 수 있도록 카메라 제어 기능과 카메라 정보 기능을 살펴보겠습니다. 이러한 기능은 사용 사례와 별개로 직접 카메라를 제어할 수 있도록 하는 높은 수준의 API입니다. 즉, 미리보기와 이미지 캡처 사용 사례가 있는 경우 확대/축소 또는 플래시와 같은 카메라 상태를 업데이트하면 이 업데이트가 모든 사용 사례에 적용됩니다.
탭하여 초점 맞추기 구현
CameraX는 자동 초점을 지원하지만, 사용자가 직접 초점을 제어할 수 있도록 여러분이 관련 기능을 제공하려는 경우도 있을 것입니다.  
Camera2 API에서 이 기능을 구현하려면 UI(뷰파인더) 좌표와 카메라 센서(이미지) 좌표 간의 변환에 관해 알아야 하고 초점 영역의 크기를 지정해야 합니다.
CameraX에서 이 기능을 구현하는 방법은 다음과 같습니다.
먼저 SurfaceView 및 UI 좌표를 사용하고 측정 지점인 센서 좌표를 반환하는 SurfaceViewMeteringPointFactory를 호출하여 좌표를 변환할 수 있습니다.
그리고 나서 작업을 만듭니다. 동일한 영역에 초점을 맞추고 측정하려면 FocusMeteringAction을 사용하여 측정 영역을 전달합니다.
마지막으로, 이 작업을 cameraControl에 전달하면 CameraX에서 나머지 작업을 처리합니다.
손가락을 모으거나 펼쳐 확대/축소하기 구현
Camera2에서 손가락을 모으거나 펼쳐 확대/축소하는 기능을 구현하려면 변환과 자르기 영역에 관해 알아야 합니다.
CameraX에서 이 기능을 구현하는 방법은 다음과 같습니다.
손가락을 모으거나 펼쳐 확대/축소하기를 구현하려면 기본값과 델타값이 필요합니다. 기본값은 현재의 확대/축소 비율이고, 델타값은 사용자가 손가락을 모으거나 펼쳐 변경하는 비율의 양입니다.
델타값을 얻으려면 ScaleGestureDetector를 만듭니다. 이 Android 객체는 터치 이벤트를 배율로 변환합니다. 이 배율이 델타값입니다.
그런 다음 cameraInfo에서 기본값을 얻습니다. 이 API를 통해 확대/축소 비율, 플래시 사용 가능 여부, 센서 회전도와 같은 카메라 기능 상태를 확인할 수 있습니다.
이 두 가지 값을 사용하여 이제 카메라 제어 기능의 크기와 비율을 호출합니다. CameraX에서 자르기 영역을 파악하고 카메라에 요청을 보냅니다. 이것만으로 손가락을 모으거나 펼쳐 확대/축소하기를 구현할 수 있습니다.
확대/축소 슬라이더 구현
확대/축소 슬라이더를 구현하려면 손가락을 모으거나 펼쳐 확대/축소와는 다른 접근 방식을 취해야 합니다. 이유는 다음과 같습니다. 1~10의 비율로 확대/축소할 수 있는 카메라가 있다고 가정해 보겠습니다. 이 경우 1에서 2로 확대하면 시야가 50% 줄어듭니다. 그러나 9에서 10으로 확대하면 슬라이더에서는 같은 거리이더라도 시야는 10% 줄어듭니다.
Implementing a zoom slider with Android logo
이는 최적의 사용자 환경이 아니기 때문에 CameraX에는 setLinearZoom API가 포함되어 있습니다. 이 API는 슬라이더 값을 사용하고 선형 확대/축소를 제공하는 데 필요한 변환을 실행합니다.
따라서 다음과 같은 코드 한 줄로 확대/축소 슬라이더를 구현할 수 있습니다.
자세히 알아보기
이 문서가 CameraX API를 사용하여 앱에 카메라 기능을 손쉽게 통합하는 방법을 이해하는 데 도움이 되었기를 바랍니다. 자세한 내용은 CameraX 설명서를 확인해 보세요. 여기서는 전체 API 설명서 외에도 예제 앱과 실습 Codelab을 확인할 수 있습니다. 이전 블로그 게시물인 Core Principles Behind(핵심 원칙) CameraX Jetpack Library(CameraX Jetpack 라이브러리)를 읽어 보는 것도 좋습니다. 궁금한 점이나 의견이 있으면 CameraX Google 그룹에 게시해 주시기 바랍니다.

원문은 이 곳에서 확인 가능하며 블로그 번역 리뷰는 양찬석(Google)님이 참여해 주셨습니다. 



Android 사용자는 휴대전화의 배터리 수명에 많은 신경을 씁니다. 특히 앱에서 지연 가능한 백그라운드 작업을 예약하는 방식은 배터리 수명에 큰 영향을 미칩니다. 배터리 소모가 적은 앱을 개발하는 데 도움이 될 수 있도록 Google은 지연 가능한 백그라운드 처리에 필요한 사항을 모두 지원하는 통합 솔루션인 WorkManager 도입했습니다. 

2020년 11월 1일부터는 Android의 지연 가능한 백그라운드 작업이 WorkManager를 중심으로 통일되며 GCMNetworkManager는 지원 중단됩니다. 



WorkManager의 장점 
WorkManager API는 Firebase Job Dispatcher(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) 이상으로 업데이트하면 Android Marshmallow(6.0) 이상을 실행하는 기기에서 더 이상 FirebaseJobDispatcher 및 GcmNetworkManager API 호출이 작동하지 않습니다. 



WorkManager로 이전 
아직 앱을 WorkManager로 이전하지 않으셨다면 지금 바로 이전해 주세요. 우선 WorkManager 공식 문서 읽어 보시기 바랍니다. 
앱에서 여전히 FirebaseJobDispatcher를 사용 중이라면 이전 가이드에 따라 앱을 WorkManager로 이전할 수 있습니다. 이와 유사하게 GCMNetworkManager에서 WorkManager로의 이전 가이드 활용할 수도 있습니다. 
YouTube는 백그라운드 예약 요구사항에 맞춰 최근 WorkManager로 이전했으며, 덕분에 앱 시작 시간을 개선하고 비정상 종료 발생률도 8%만큼 낮출 수 있었습니다. 



앞으로의 전망 
저희는 계속해서 WorkManager를 개선하고 기능을 개발하고 있습니다. 라이브러리 사용 중에 문제가 발생하거나, 제안하고 싶은 기능이 있거나, 라이브러리와 관련된 의견이 있다면 이곳으로 알려주세요.  
  
Share on Twitter Share on Facebook