작성자: Chet Haase (Software Engineer)
이 게시물의 원문은 여기서 확인 가능하며, 블로그 리뷰에는 노현석(GDE)님이 참여해주셨습니다.
Android 개발 분야의 새롭고 눈에 띄는 소식을 안내해드리는 'Now in Android'에 오신 걸 환영합니다.
최신 Android 개발
#MADScore 받기
MAD Skills 시리즈를 통해 여러분께 소소한 즐거움을 드리고, 또 다음의 질문에 답할 기회를 드리고 싶었습니다. 'MAD를 경험해보니 어떠셨나요?'
이 질문에 대한 답은 Android Studio에 MAD Scorecard 플러그인을 설치하고 실행하시면 확인할 수 있습니다. 그러면 여러분의앱이 최신 Android 개발의 네 가지 주요 지표에서 몇 점을 받을지 카드로 볼 수 있고, #MADscore 해시태그로 Twitter에도 카드를 공유할 수 있습니다.더 자세한 내용은 MAD Score 사이트나 Christopher Katsaros의 블로그에서 확인해 보세요.
MAD Skills: 머티리얼 디자인 구성 요소
한편, 최신 Android 개발에 관한 기술 콘텐츠와 함께 MAD Skills 시리즈가 계속 나오고 있습니다. 지난주에는 머티리얼 디자인 구성 요소에 관한 시리즈가 마무리되었습니다. 'Now in Android #30' 이후로 아래와 같이 3편의 에피소드가 더 게시되었습니다.
#4: Material Motion
네 번째 MDC 에피소드에서는 Nick Rout이 Material의 네 가지 모션 패턴과 이를 애플리케이션에 구현하는 방법에 관해 들려줍니다. Nick은 Reply 샘플 앱과 그 앱을 기반으로 하는 코드랩을 통해 실제로 어떤 식으로 작동하는지 보여줍니다.
#5 Zarah Dominguez의 커뮤니티 팁
다섯 번째 MDC 에피소드는 Google Developer Expert Zarah Dominguez가 진행했습니다. Zarah의 팀은 Material 카탈로그 앱을 어떻게 사용하는지에 대해 설명했으며,구성 요소를 구현하는 사례를 들어 실제로는 어떤 모습인지 또 소스 코드는 어떻게 생겼는지에 관해 보여주고자 했습니다.
#6: 라이브 Q&A
App Bundle과 Navigation에 관한 이전 시리즈와 마찬가지로 마지막 MDC 에피소드는 개발자 관계에 관한 MDC 전문가 및 머티리얼 엔지니어링 팀과 함께 진행하는 라이브 Q&A로 꾸며졌습니다. Twitter를 통해 많은 질문을 받았고 Q&A 중에 YouTube를 통해 실시간으로 들어온 질문도 많았습니다. 시간 제한상 모든 질문에 답해드리지는 못했지만.. 그래도 의미있는 진전이 있습니다.
MDC 시리즈의 콘텐츠에서 놓친 부분이 있더라도 Nick Rout이 이 요약 문서에 시리즈 내용의 개요를 정리해 두었으며 관련 샘플, 문서, 코드랩 등과 함께 참고할 만한 모든 영상과 문서에 대한 링크도 포함되어 있으므로 도움이 될 것입니다.
MAD Skills: Kotlin과 Jetpack
이번 주에 새로 나온 MAD Skills 시리즈의 주제는 Kotlin과 Jetpack입니다. 특히, 다수의 Jetpack API와 함께 Kotlin을 사용하는 방법에 관해 설명합니다. Florina Muntenescu가 그 내용을 이렇게 소개했습니다.
#1: KTX 사용
이 시리즈의 첫 번째 에피소드는 KTX의 사용에 관한 것으로, KTX는 다양한 플랫폼과 Jetpack 라이브러리를 위해 더 향상되고 간편해진 접근 방식을 제공하는 Kotlin 확장 프로그램이죠. Florina는 플랫폼과 Jetpack API에서 예시를 통해 KTX에 관한 일반적인 사항을 설명하면서 LiveData와 ViewModel을 사용할 때 어떻게 사용하는지 보여줍니다.
아래 게시물에서도 살펴보실 수 있습니다.
#2: 코루틴(Coroutines)을 이용한 API 간소화
두 번째 에피소드에서는 Manuel Vivo가 Kotlin 개발자를 위한 기존 API 사용 환경을 개선하는 Kotlin 코루틴의 사용 방법을 설명합니다. 예를 들어, 코루틴으로 중첩된 콜백(nested callbacks)의 복잡성을 단순화하는 어댑터를 만들 수 있습니다. Manuel은 Fused Location Provider를 위한 더 단순한 API를 만드는 예를 들며 실제로 이 작업을 수행하는 방법을 보여줍니다.
아래 게시물로도 확인 가능합니다.
medium.com
앞으로 몇 주간 새로 소개될 Kotlin/Jetpack 에피소드를 지켜봐 주세요. YouTube 재생목록뿐 아니라 Android Developers 게시물에서도 확인하실 수 있습니다.
YouTube의 MAD Skills 재생목록, Medium의 문서 또는 그 모든 정보를 보여주는 웹페이지에서도 앞으로 계속 이어질 콘텐츠를 확인해 보세요.
문서화
권한
Android에서 권한 사용을 위한 상위 레벨 워크플로
사용자 컨트롤과 사용자 데이터의 투명성에 계속 초점을 맞추고 있으므로, 지난 몇 차례의 릴리스에서 권한에 여러 가지 변화가 있었습니다. 최신 업데이트 및 동작 변경 사항을 따라가려면 개발자의 작업이 수반되므로, 그 과정에 도움을 드리고자 문서화 작업을 하고 있습니다.
이런 노력의 일환으로, 최근에 Android 권한 가이드를 몇 가지 개선했습니다. 현재 이 사이트는 앱에서의 권한 사용과 관련된 모범 사례와 더불어 권한의 작동 방식에 관한 더 간소화된 지침을 제공합니다. 특히, 권한을 실제로 꼭 선언해야 할지 평가해야 하는데, 많은 일반적인 사용 사례에서는 필수 사항이 아닙니다.
Room의 DAO
API의 여러 기능 중 일부의 사용법을 명확히 설명하기 위해 몇 가지 Room 라이브러리 가이드를 개편했습니다.
Room에서 DAO(Data Access Object) 사용은 내장된 쿼리 메서드뿐 아니라 @Query 주석을 사용하는 사용자 지정 메서드의 사용을 비롯하여, DAO 인터페이스 사용의 개요를 설명합니다.
비동기 DAO 쿼리 작성은 UI 스레드에서 발생하는 쿼리의 작성 방법에 대한 자세한 내용을 다루는데, 이는 데이터베이스 상호 작용을 위해 거의 필수적인 사항입니다. 이 가이드에서는 언어와 비동기 API 기본 설정에 따라 사용할 수 있는 여러 가지 대안을 살펴봅니다.
AndroidX
다양한 AndroidX 라이브러리에서 최근에 발표된 수많은 알파, 베타 및 RC 릴리스 중에 다음과 같은 안정적 릴리스가 있었습니다.
Browser 1.3.0: 이 최신 릴리스에서는 Trusted Web Activity API를 사용하여 자유 형식 명령어를 전달하는 기능과 함께 사용자 지정 탭에서의 색 설정 개선 사항과 같은 다른 기능도 제공됩니다.
Media2 1.1.0: 이 릴리스에는 미디어 트랙을 처리하고 AndroidX Media 라이브러리와의 상호 운용성을 위한 추가 API와 함께, 많은 버그 수정 사항이 있습니다.
WearInput 1.0.0: WearInput의 첫 번째 버전에서는 WearableButtons를 위한 지원을 AndroidX 라이브러리에 제공합니다.
Exifinterface 1.3.2, Media 1.2.1, Navigation 2.3.2를 포함한 몇몇 안정적인 버그 수정 릴리스도 있었습니다.
Android Studio
Jamal Eason은 게시글을 통해 Android Studio의 다음 릴리스인 Arctic Fox가 현재 Canary 채널에서 제공되고 있으며 사용해 볼 준비되어 있다는 사실을 알려주었습니다. 이 릴리스에서 가장 먼저 눈에 띄는 점은 새로운 명칭 및 버전 관리 체계인데, 이 문서에서 자세히 설명합니다. 그 외에도, 이 릴리스에는 wifi 디버깅을 위해 기기와 페어링하기 위한 UI(현재는 MacOS만 해당), 레이아웃 유효성 검사 도구, Jetpack Compose 개발을 위한 지속적인 지원 등이 포함되어 있으니 확인해 보시길 추천드립니다. ( 현재 very early 상태에서 Compose로 작업하려면 항상 Studio의 Canary 버전을 사용해야 합니다.)
또한, Murat Yener가 Android Gradle 플러그인의 새로운 알파 릴리스인 버전 7.0.0-alpha01에 관해 쓴 글에서 Android Studio에 새로 도입된 기능을 소개하기도 했습니다. AGP도 버전명이 변경되었음을 기억해 주세요. AGP는 Android Studio 버전과 결합되는 대신, 이제부터는 Gradle 릴리스 버전을 따르게 될 것입니다. 때문에 이 버전이 현재 4.2 릴리스 이후로 두어 차례의 버전을 건너뛰거나 잊어버린 것처럼 보였던 거죠. 이 글에서는 최근 AGP 4.2에서 이루어진 API 변경 사항 몇 가지도 소개합니다.
문서와 영상
ListAdapter
Meghan Mehta가 RecyclerView에 관한 시리즈에 또 다른 게시글을 추가했습니다. RecyclerView가 새로 나온 것도 아니고 대부분의 Android 개발자가 아마도 앱에서 이미 사용하고 있을테지만, 일부 기본 기능에 대한 문서와 예시를 찾기 어려웠습니다. 그래서 Meghan이 해당 기능의 사용법을 설명하고 실제로 어떤 식으로 작동하는지 보여주는 샘플 코드를 제시했습니다.
최근에 올린 글에서, Meghan은 주로 더 나은 성능과 자동 아이템 애니메이션을 비롯해 RecyclerView를 위한 훌륭한 기능을 쉽게 활용하는 방법을 제공하는 ListAdapter의 사용에 관해 설명합니다. ListAdapter는 DiffUtil을 사용하여 발생한 특정 변경 사항을 확인하는데, 이는 RecyclerView가 최적의 성능과 애니메이션을 위해 필요합니다.
성능
저는 최근 버전 1.0에 이른 AndroidX 라이브러리인 App Startup에 관한 두 편의 시리즈를 통해 시작 성능에 대한 탐구를 이어왔습니다. 1부에서는 어떻게 content providers를 인스턴스화(instantiate libraries)하는데 자주 사용하는 방식과그로 인해 애플리케이션 시작 시간에 미치는 숨겨진 영향이 드러날 수 있는지 살펴봅니다.
2부에서는 App Startup 라이브러리를 사용하여 숨겨진 content providers를 제거하고, 그 대신 라이브러리를 지연 초기화하기 위한 요청을 풀링하는 방법을 알아봅니다.
위치, 위치, [더 나은 GPS] 위치
Android Developers 블로그에는 도시에서 더 정확한 위치 정보를 가져올 수 있도록 하기 위해 위치 시스템과 API에 추가한 개선 사항을 자세히 설명하는 글이 있습니다. 이 글에서는 도시에서 GPS 위치를 도출하는 문제를 설명하는데, 여기서 가시선을 사용하는 GPS 기술의 기본 가정이 높은 건물에 반사되어 튕겨 나오는 신호로 인해 오차가 발생합니다. (Tor와 필자는 위치 팀의 Marc Stogaitis와 함께 2014년에 진행했던 ADB 팟캐스트 대담: “도시 협곡”이라는 현상에서 이 문제에 관해 토론한 바 있습니다.)
위치 담당팀은 주요 도시의 3D 빌딩 모델을 통합해 훨씬 더 정확한 위치 결과를 얻었습니다. 현재 일부 Pixel 기기에서 이 기술의 버전 2를 사용할 수 있습니다. 이전 버전은 이미 더욱 폭넓은 생태계에서 사용 가능하며, 이번 최신 버전 역시 내년 초에는 비슷한 수준으로 널리 사용될 것입니다.
물론, 이 모든 것은 사용자 기능이며 'Now in Android'은 개발자를 위한 공간입니다. 하지만 필자는 첫째로는 이 문서와 기술이 흥미롭다는 사실을 알았고, 둘째로는 이처럼 향상된 위치 데이터에 액세스하기 위해 Fused Location Provider (FLP)를 사용하는 개발자 콜아웃이 있기 때문에 여기서 언급하고 싶었습니다.
또한, FLP에는 단순히 현재 위치를 물어서 결과를 얻는 방법과 지속적인 위치 변화를 알려주는 구독 기능을 이용한 다음에 첫 번째 결과를 얻은 후 구독 취소하는 방법으로 현재의 위치 정보를 훨씬 더 쉽게 얻을 수 있는 새로운 API도 있습니다. FLP의 getCurrentLocation() API에 대한 문서, 새로운 CurrentLocationKotlin 샘플, 더 자세한 정보를 담은 문서를 참조하세요.
Jetpack Compose 마이그레이션
Chris Banes는 자신의 앱 Tivi를 현재의 UI Toolkit을 사용하는 앱에서 Jetpack Compose를 사용하는 앱으로 마이그레이션하고 있습니다. Chris는 현재 전체 UI를 Compose로 작성했고 마이그레이션의 주요 부분을 마쳤으며, APK 크기(훨씬 더 작아짐!), 메서드 개수(적어짐!), 빌드 시간(약간 더 짧아짐!)에 관해 몇 가지 흥미로운 결과를 보고하기 위해 다시 나타났습니다.
CameraX의 CameraController
CameraX의 CameraView API는 UI와 컨트롤러 로직을 둘 다 처리하느라 너무 많은 부담을 안고 있었습니다. 그래서 해당 로직은 PreviewView와 새로운 CameraController 클래스로 리팩토링되었습니다. 이 글에서는 CameraController를 사용하는 방법 및 해당 기능과 이전에 CameraView에서 사용했을 기능의 비교 결과를 설명합니다.
팟캐스트 에피소드
지난번 'Now in Android' 이후로 Android 개발자 백스테이지 에피소드가 새로 업로드되었습니다. 아래 링크를 클릭하거나 즐겨 이용하시는 팟캐스트 플랫폼에서 이번 회차를 들어보세요. (영문)
ADB 153: Ok, Ok, Ok
Romain Guy, Tor Norbye 그리고 필자는 Square의 Jesse Wilson과 함께 OkHttp, Okio, [Ok]Moshi를 비롯해 Jesse가 작업한 몇몇 인기 오픈소스 라이브러리에 대한 얘기를 나누었습니다. 우리는 이들 라이브러리와 기타 여러가지, Android, 라이브러리, 프레임워크, Kotlin 개발 등에 관해 얘기했습니다. 그리고 일부 엔지니어가 기능 요청이나 사소한 문제를 새로운 오픈소스 라이브러리를 만드는 프로젝트로 바꾸어 놓는 고약한 습관을 가지고 있습니다.
마무리
이번 회는 이것으로 마치겠습니다. 이제 MAD 스코어카드를 받아보세요! 자세한 MDC 및 Kotlin/Jetpack 콘텐츠에 관해서는 MAD를 살펴보세요! 최신 권한 및 Room 문서를 읽어보세요! 최신 AndroidX 안정적 릴리스를 다운로드하세요! ListAdapter, 시작 성능, 개선된 GPS 위치, Jetpack Compose 마이그레이션, CameraController에 관한 새로운 글을 읽어보세요! 그리고 최신 ADB 팟캐스트를 들어보시고, Android 개발자 커뮤니티의 다음 업데이트 정보를 확인하세요.