[go: up one dir, main page]

작성자: Yuri Blaise (Product Manager, Android)

이 글의 원문은 여기서 확인하실 수 있으며 블로그 리뷰에는 엄재웅(GDE)님이 참여해주셨습니다. 



Android Studio 팀은 안정적인 최신 버전의 Android Studio Dolphin 🐬(2021.3.1)을 이용해 더 쉽게 고품질 앱을 만드는 방법을 심층적으로 살펴봤습니다. 해당 버전은 Jetpack Compose, Wear OS, 개발 생산성이라는 세 가지 주요 테마에 초점을 두고 있습니다.


Jetpack Compose의 경우, Android Studio Dolphin에는 다중 화면 미리보기와 애니메이션 미리보기를 지원하는 안정적인 도구가 마련되어 있습니다. 또한 Layout Inspector 내에 편리한 Compose UI 카운터를 도입하여 여러분이 앱의 사용자 인터페이스를 디버그할 때 UI 재구성 시점을 계속 추적할 수 있도록 했습니다.


Android Studio Dolphin을 이용해 모든 Wear OS 3 기기에 맞는 Wear 앱, 타일, 시계 모드를 준비할 수 있도록 다양한 Wear OS 기능을 추가했습니다. 업데이트된 Wear OS Emulator와 직관적인 Pairing Assistant, 론치 타일과 시계 모드용 새로운 배포 흐름을 통해 훌륭한 Wear OS용 앱을 그 어느 때보다 쉽고 효율적으로 만들 수 있습니다.


마지막으로, Android Studio 사용 시 생산성을 한층 더 향상시키고자 Gradle Managed Virtual Devices가 테스트 기기를 중앙에서 관리할 수 있도록 했습니다.


최신 업데이트를 살펴보려면 지금 바로 다운로드하세요.


Android Studio Dolphin에 도입된 새로운 기능을 자세히 알고 싶다면 이 글 혹은 아래 영상의 내용을 참고하시기 바랍니다.



개발 도구
  • Intellij 2021.3 플랫폼 업데이트 - Android Studio Dolphin에는 개선된 Find Usages 흐름, Kotlin 디버거 업데이트, Kotlin에 대한 상시적 조건 검사, 개선된 코드 작성 의도 미리보기 등의 기능이 있는 Intellij 2021.3 버전이 포함됩니다. 자세히 알아보세요.

  • Gradle Managed Virtual Devices - 에뮬레이터를 사용해 앱 테스트를 자동화하려 했으나 조정 및 설정 과정이 번거롭다고 느꼈다면 Gradle Managed Virtual Devices를 사용해 보시기 바랍니다. 자동화된 테스트에 필요한 가상 기기를 개발의 일부로 설정하면 나머지 작업은 Gradle이 처리해 줍니다. SDK 다운로드부터 기기 프로비저닝 및 설정과 테스트 실행 및 해제에 이르기까지, Gradle이 계측 테스트 중에 가상 기기의 수명 주기를 관리합니다. Gradle은 스냅샷 관리, 테스트 캐싱, 테스트 샤딩을 지원하는 새로운 기능을 사용해 테스트 과정을 더욱 최적화하여 효율적이고 신속하며 일관적인 테스트 실행을 보장합니다.

Gradle Managed Virtual Devices는 또한 자동 테스트기로 불리는 완전히 새로운 유형의 기기도 도입했습니다. 자동화 테스트에 최적화된 이 기기를 통해 테스트 실행 중 CPU 및 메모리 사용량을 크게 절감할 수 있습니다. 자세히 알아보세요.

Gradle Managed Virtual Devices

Jetpack Compose
  • Compose Animation Inspector - Animation Preview inspector로 지원되는 애니메이션을 전부 한 번에 보고 조정할 수 있습니다. 특정 애니메이션을 고정하거나 전체 애니메이션을 프레임 단위로 스크럽하는 것도 가능합니다. Animation Preview는 현재 updateTransitionAnimatedVisibility로 제작된 애니메이션을 지원합니다.

Compose Animation Inspector


  • Compose Multipreview Annotations - 앱 전반에 걸쳐 모든 곳에 똑같은 @Preview 코드를 복사하여 붙여넣는 대신, 여러 개의 미리보기 정의가 포함된 Annotation 클래스를 정의할 수 있습니다. 새로운 Annotation은 미리보기를 전부 한 번에 생성하므로 모든 단일 Composable을 반복해서 정의하지 않고도 다양한 기기, 글꼴, 테마를 동시에 미리보기할 수 있습니다. 자세히 알아보세요.

Multipreview annotations


  • Layout Inspector의 Compose Recomposition Counts - Jetpack Compose UI를 쉽게 디버그할 수 있도록 Layout Inspector에서 Compose 앱의 재구성 횟수를 볼 수 있도록 했습니다. 이 도구를 통해 UI 업데이트 횟수가 적절한지 파악할 수 있습니다. Component Tree 패널과 Attributes 패널에 재구성 횟수와 건너뛰기 횟수를 선택적으로 표시하면 더 편하게 사용할 수 있습니다. 자세히 알아보세요.

Compose Recomposition Counts



Wear OS

  • Wear OS Emulator Pairing Assistant - Wear OS Emulator Pairing Assistant를 사용하면 여러 ADB 명령과 기기의 조합 없이도 하나 또는 그 이상의 시계 에뮬레이터를 단일 휴대폰과 페어링하여 Device Manager에서 Wear OS 기기를 볼 수 있습니다. 또한 Android Studio는 종료 후에도 페어링을 기억하므로 기기 페어링을 자주 반복할 필요가 없다는 점도 추가적인 장점입니다. 자세히 알아보세요.

Wear OS Emulator Pairing Assistant

  • Wear OS Emulator 툴바 - Android Emulator 툴바에 Wear OS의 물리적 기기에 맞춘 새로운 버튼과 상호 작용 기능이 도입되었습니다. 손바닥 제스처 같은 작업을 시작하거나 기기 기울이기를 시뮬레이션할 때 사용하실 수 있습니다. 자세한 내용은 에뮬레이터의 일반 작업을 참고하시기 바랍니다.

Wear OS Emulator Side Toolbar


  • Wear OS Direct Surface Launch - Wear OS 앱을 배포할 때, 특히 시계 모드 정보 표시 같은 기능에 대한 작업을 하는 경우, 때로는 앱을 적절한 상태로 만들기 어려울 수 있습니다. Android Studio Dolphin에서는 Android Studio에서 직접 적용할 수 있는 Wear OS 타일, 시계 모드, 정보 표시에 대한 실행/디버그 구성을 만들 수 있습니다. 자세히 알아보세요.

New Wear OS Run/Debug configuration types

Android Studio Dolphin의 새로운 개선 사항과 기능은 다음과 같습니다.

개발 도구

  • Intellij 2021.3 플랫폼 업데이트

  • Gradle Managed Virtual Devices

Jetpack Compose 도구

  • Compose Animation Inspector

  • Compose MultiPreview Annotations

  • Layout Inspector의 Compose Recomposition Counts

Wear OS

  • Wear OS Emulator Pairing Assistant

  • Wear OS Emulator 툴바

  • Wear OS Direct Surface Launch


Android Studio 출시 노트, Android Gradle 플러그인 출시 노트, Android Emulator 출시 노트에서 자세한 내용을 확인하실 수 있습니다.



시작하기

다운로드

다운로드 페이지에서 Android Studio Dolphin 최신 버전을 다운로드할 수 있습니다. 이전 버전의 Android Studio를 사용 중이라면 최신 버전으로 간단히 업데이트가 가능합니다. 안정적인 버전의 Android Studio를 유지하고 싶다면 Android Studio의 안정적인 버전과 카나리 버전을 동시에 실행할 수 있습니다. 자세히 알아보세요.

앞서 언급한 Android Emulator 기능을 사용하려면 Android Studio SDK Manager를 통해 다운로드한 Android Emulator v31.3.0 이상이 실행 중이어야 합니다.

마음에 드는 부분이나 궁금한 점, 원하는 기능에 대한 피드백은 언제든지 환영합니다. 버그나 문제를 발견한 경우에는 신고해 주시기 바랍니다. TwitterMedium에서 Android Studio 개발팀을 팔로우하고 실시간 소식을 확인해보세요.

작성자: Jolanda Verhoef (Android Developer Relations Engineer) 

원문은 여기서 확인할 수 있으며 블로그 리뷰에는 엄재웅(GDE)님이 참여해주셨습니다.

저희의 로드맵에 발맞춰 Android의 최신 네이티브 UI 도구 키트인 Jetpack Compose 버전 1.2가 출시되었습니다. 이번 버전에는 다운로드 가능한 글꼴과 지연 그리드 같은 새로운 기능과 향상된 포커스, 마우스, 입력 처리 등 태블릿과 Chrome OS용으로 개선된 기능들이 포함되어 있습니다.

Compose는 스마트폰, 태블릿, 폴더블에서 작동하는 새로운 Android 앱 개발에 권장됩니다. 이번에 Compose for Wear OS 1.0도 함께 출시되어 Wear OS 앱을 개발하는데에도 Compose가 최고의 방안이 되었습니다.

Twitter 엔지니어링 팀과 같이 개발자들이 Compose를 사용해 앱을 더 빠르게 출시하는 사례가 이어지고 있습니다.

Compose 덕분에 개발 생산성이 매우 향상되었습니다. 사용자 설정 뷰를 만드는 것보다 구성 가능한 함수를 작성하는 것이 훨씬 더 쉽고 빠르며, 저희 디자이너들의 요구 사항들도 훨씬 더 쉽게 충족할 수 있습니다.

Compose 1.2에는 휴대폰, 태블릿, 폴더블에서 Compose를 지원하기 위한 여러 업데이트가 포함되어 있습니다. 그중에는 실험 단계를 마치고 새로 선보이는 안정적인 API가 있으며 Kotlin 최신 버전도 지원됩니다. Compose 1.2와 함께 작동하도록 샘플, Codelab, Accompanist 라이브러리, MDC-Android Compose Theme Adapter도 업데이트했습니다.

참고: Compose Compiler 라이브러리를 1.2로 업데이트하려면 Kotlin 1.7.0을 사용해야 합니다. 현 시점 이후로 이 Compiler 버전은 다른 Compose 라이브러리 버전과 분리됩니다. Jetpack Compose 라이브러리의 독립 버전 관리에 관한 블로그 게시물에서 자세히 살펴보세요.

새롭고 안정적인 기능 및 API

몇 가지 기능과 API가 안정적으로 추가되었습니다. 주요 사항은 다음과 같습니다.

새롭고 실험적인 API

Compose에는 계속해서 새로운 기능을 도입하고 있습니다. 그 중 주요한 몇 가지를 소개합니다.

  • LazyLayout으로 효율적인 스크롤 가능한 고유의 사용자 설정 레이아웃을 만드세요. Modifier.overscroll을 사용하여 스크롤 가능한 컨테이너에 사용자 설정 오버스크롤 효과를 추가해보세요.
  • GoogleFont를 사용하는 다운로드 가능한 글꼴. 시작하려면 문서를 읽어보시기 바랍니다.
  • includeFontPadding과 줄 높이의 사용자 정의(텍스트 문서블로그 게시물 참조) 허용, Brush API(블로그 게시물 참조), pluralStringResource 추가와 같은 다수의 텍스트 기능이 추가되었습니다.
  • 테스트 API를 개선했습니다. 그 예로 performKeyInput 동작은 테스트에서 키보드 입력을 모방합니다. 새로운 testTagsAsResourceId 시맨틱 속성을 사용하면 UI Automator와 통합할 수 있습니다.

@OptIn으로 새 API를 사용해 보신 후 여러분의 의견을 들려주세요!

수정된 버그

커뮤니티에서 제기된 여러 문제를 해결했습니다. 그중 중요한 몇 가지를 공유합니다.

Issue Tracker를 통해 버그를 신고하고 기능을 요청해 주셔서 감사드립니다. Compose를 개선하고 필요한 API를 개발하는 데 큰 도움이 되니, 앞으로도 소중한 의견 남겨 주시고 Compose 개선에 여러분의 많은 도움을 부탁드립니다!

다음 단계가 궁금하시다면 업데이트된 로드맵을 확인하여 지연 항목 추가 및 제거를 위한 애니메이션, 흐름 레이아웃, 텍스트 편집 개선 사항 등, 현재 저희가 추진중인 기능들을 살펴보시기 바랍니다.

Jetpack Compose는 개발자 여러분이 요청해주신 여러 기능 덕분에 진화를 거듭하고 있습니다. 이미 프로덕션 단계에서 수만 개의 앱이 Jetpack Compose를 사용하고 있다는 것을 매우 기쁘게 생각하며, 또한 많은 개발자 여러분들이 Jetpack Compose로 앱 개발을 어떻게 개선했는지 경험을 공유해 주셨습니다. 여러분이 다음에 무엇을 개발하실 지 무척 기대됩니다. 

Compose를 잘 활용해보시길 바랍니다!


작성자: Takeshi Hagikura (Developer Relations Engineer)

이 글의 원문은 여기서 확인하실 수 있으며 블로그 리뷰에는 노현석(GDE)님이 참여해주셨습니다. 

Android는 앱에서 프레임을 생성해 이를 화면에 표시함으로써 UI(사용자 인터페이스)를 렌더링합니다. 사용자와 앱의 원활한 상호 작용을 보장하려면 앱은 각 프레임을 렌더링할 때 기기별 새로고침 빈도를 초과해서는 안 됩니다. 예를 들어 Pixel 6에서는 초당 최대 90 프레임을 렌더링할 수 있는데, 이는 각 프레임을 11ms 미만으로 렌더링해야 한다는 의미입니다. 앱의 UI 렌더링 속도가 느린 경우 Android 프레임워크는 강제로 프레임을 건너뛰는데, 이런 일이 발생하면 사용자는 주의를 산만하게 하는 예기치 않은 시각적 결함, 즉 버벅거림 현상을 겪게 됩니다.

버벅거림의 원인은 앱 자체나 SurfaceFlinger 등 여러 가지가 있습니다. 이 글에서는 앱으로 인해 발생하는 버벅거림 현상과, 라이브 앱을 검사하고 기록된 추적 정보를 열어 앱의 성능 문제를 해결함으로써 버벅거림 현상을 찾아내고 해결하는 Android Studio 지원 도구에 대해 알아보겠습니다.

참고: 이 글에서는 Android 12(API Level 31) 이상을 실행하는 실제 기기 혹은 Android 에뮬레이터와 Android Studio Chipmunk부터 탑재된 새 Jank detection UI 가 사용되었습니다.


라이브 상호 작용에서 추적 기록

다음 예제에서는 GitHub 성능 샘플 저장소에 있는 JankStatsSample 앱을 사용하여 CPU 프로파일러로 버벅거림의 원인을 찾아내는 방법을 소개하겠습니다.

(이 샘플 프로젝트에서는 JankStats 라이브러리를 사용하는 방법을 소개해드립니다. 여기에는 여러 가지 간단한 샘플 Activity가 포함됩니다.)

1. JankStatsSample을 열고 앱을 실행합니다.

2. Android Studio 하단의 Profiler 탭을 엽니다.

Android Studio 하단의 Profiler 탭

3. Profiler의 왼쪽 창에 있는 + 아이콘을 클릭하여 새 프로파일링 세션을 시작한 다음, 프로파일러를 실행할 대상이 되는 기기 이름과 앱 프로세스를 선택합니다.

프로파일링 가능한 프로세스를 선택하는 이미지

참고: 디버그 가능한 앱을 프로파일링할 수도 있지만, 그러면 부작용으로 상당한 성능 비용이 더해지므로 프로파일링 가능한 앱을 프로파일링하는 것이 좋습니다. 자세한 내용은 프로파일링 가능한 앱에 대한 개발자 문서를 참조하세요.

4. CPU 행을 클릭합니다.

5. System Trace Recording을 선택하고 Record를 클릭합니다.

추적 옵션에서 시스템 추적 기록을 선택하는 CPU 프로파일러의 스크린샷

6. 앱과 상호 작용하여 데이터를 수집한 다음 Stop 버튼을 클릭합니다.

그러면 Android Studio에서 버벅거리는 프레임이 보이는 Display 섹션을 표시합니다.

또는 All Frames 체크박스를 선택하면 추적 기록에 버벅거리지 않는 프레임도 표시할지 여부를 지정할 수 있습니다.

각 프레임으로 마우스를 가져가거나 프레임을 클릭하면 자세한 프레임 정보를 볼 수 있습니다. All Frames 체크박스를 선택하면 세 가지 유형의 프레임이 보입니다.

  • 녹색 프레임
    버벅거림으로 간주되지 않는 일반 프레임

녹색 프레임의 예를 보여주는 스크린샷

  • 빨간색 프레임
    앱 프로세스가 예상보다 오래 실행되고 프레임 예상 지속 기간의 기한을 놓치는 바람에 버벅거림으로 간주된 프레임. 앱 개발자가 조치 가능한 프레임은 일반적으로 빨간색 프레임입니다.

빨간색 프레임의 예를 보여주는 스크린샷

  • 노란색 프레임
    버퍼 채우기로 간주된 프레임으로, 이전 프레임이 표시되기 전에 앱이 시스템에 프레임을 계속 전송한다는 의미입니다. 이 프레임은 보통 이전 프레임이 버벅거리기 때문에 발생하며, 앱 개발자가 노란색 프레임에 대해 할 수 있는 일은 많지 않습니다.

노란색 프레임의 예를 보여주는 스크린샷

Lifecycle 체크박스를 선택하면 네 개의 추가 트랙을 표시/숨기기로 전환할 수 있습니다.

Lifecycle 확인란이 선택된 추적의 스크린샷

네 개의 추가 트랙은 다음과 같습니다.

  • Application
  • Wait for GPU
  • Composition
  • Frames on display

위 트랙은 Android Studio Bumblebee부터 제공되었습니다. 개발자 문서에서 각 트랙에 대한 자세한 설명을 볼 수 있습니다.


버벅거리는 프레임 검사

이제 앱에서 버벅거리는 프레임이 발생하는 원인을 진단하는 방법을 살펴보겠습니다.

  1. Janky frames 트랙에서 버벅거리는 프레임을 선택하면, 해당 수명 주기 데이터가 Display 섹션에 강조 표시되고 해당 스레드 데이터가 Threads 섹션에 강조 표시됩니다.

해당 스레드에서 관련 추적과 함께 버벅거리는 프레임을 선택한 모습을 보여주는 스크린샷

파선 Deadline은 기한을 나타냅니다. 프레임의 지속 시간이 기한을 초과하면 프레임이 버벅거리는 것으로 간주됩니다.

Android Studio의 오른쪽 창에서도 자세한 분석 결과를 볼 수 있습니다.

버벅거리는 프레임의 상세 분석 스크린샷

2. 앱의 메인 스레드에서 해당 추적 부분을 보면 `View#draw`에서 많은 시간이 소요되는 것을 알 수 있습니다.

또한 상세 분석 창에서 메인 스레드 상태를 보면 많은 스레드 상태가 절전 모드임을 알 수 있습니다.


상세 분석 창의 하단. 절전 모드로 있는 시간이 많다는 점을 알려 줍니다.

3. View#draw가 호출되는 코드를 살펴보겠습니다.

View#onDrawJankyView 클래스에서 재정의된 것을 알 수 있습니다.

onDraw에서 호출되는 simulateJank 메서드는 다음과 같이 정의됩니다.

그러면 Thread.sleepsimulateJank 메서드 내부에서 호출되는 것을 찾을 수 있습니다. JankStatsSample 앱이 의도적으로 버벅거림을 시뮬레이션하도록 만들어졌으므로 그 점이 명백할 수도 있지만, 중요한 것은 개요부터 더 자세한 분석까지 살펴봄으로써 실제 버벅거림이 발생한 코드를 찾아낼 수 있다는 점입니다.

참고: 이 예제에서는 Thread.sleep 호출에 문제가 있는 것이 분명하지만, 실제로 앱 코드를 최적화할 때는 더 어려운 결정을 내려야 합니다. Microbenchmark 라이브러리를 살펴보면 개발자가 변경하는 내용이 원하는 효과를 거둘지 쉽게 판단할 수 있습니다.

참고: 시스템 추적은 플랫폼 코드와 앱에 포함된 라이브러리로 캡처한 다양한 섹션을 보여줍니다. 시스템 추적 정보가 충분하지 않을 경우, 맞춤 추적을 추가하는 한 방법으로서 trace(“MySection”) { /* this will be in the trace */ }를 AndroidX Tracing 라이브러리에서 사용할 수 있습니다.

예를 들어, 이 예제의 trace(“Jank Simulation”) { … }은 해당 스레드의 추적 섹션에 표시됩니다.

추적 읽기 및 맞춤 추적 추가에 대한 자세한 내용은 시스템 추적 개요를 참조하시기 바랍니다.

4. onDraw에서 simulateJank 메서드를 호출하지 않도록 코드를 변경한 다음, 버벅거리는 프레임이 여전히 관찰되는지 확인해 보겠습니다.

이번에는 시스템 추적 기록을 다시 실행할 때 앱과 상호 작용한 후 버벅거리는 프레임이 보이지 않을 것입니다!

코드 수정 후 버벅거리는 프레임이 없는 프로파일러의 스크린샷


저장된 추적 로드

그 외에도 아래 단계를 따라 추적을 저장했다가 나중에 로드할 수도 있습니다. 저장 후 로드 기능을 이용하면 서로 다른 버전의 추적을 비교하고 다른 사람들과 공유할 수 있습니다.

참고: 또한 Macrobenchmark 라이브러리를 사용하여 시스템 추적 결과를 얻을 수도 있습니다.

  1. 라이브 상호 작용에서 추적을 기록하는 것과 똑같이 1단계부터 6단계까지 진행합니다.

  2. 저장 아이콘을 클릭하여 기록을 내보냅니다.


추적을 시작하는 아이콘의 스크린샷

3. 그 이후 + -> Load from file…로 이동하여 저장된 시스템 추적 기록을 로드하고 이전 단계에서 내보낸 저장된 파일을 선택합니다.

Load from file 메뉴를 선택하는 스크린샷


저장된 추적을 선택하는 파일 탐색기의 스크린샷

4. 분석할 프로세스를 선택합니다. 프로세스 목록 드롭다운이 표시된 후 프로세스 이름 일부를 입력하면 해당 프로세스를 빠르게 찾을 수 있습니다.

그런 다음 저장된 추적을 로드하면, 라이브 상호 작용에서의 기록과 똑같이 버벅거리는 프레임을 볼 수 있습니다.


요약

이렇게만 하면 됩니다! Android Studio Chipmunk부터는 앱의 버벅거림을 찾는 데 도움이 되는 더욱 정밀한 프로파일링 데이터를 볼 수 있습니다.

CPU 프로파일러의 사용에 대해 자세히 알아보려면 문서를 참조하시고 Android Studio에서 `Help -> Submit Feedback`으로 이동하여 도구 개선에 도움을 주시기 바랍니다.

또한 버벅거리는 프레임 방지를 포함해 광범위한 성능 주제에 대해서는 Google I/O의 'What's new in app performance'(앱 성능의 새로운 내용) 세션에서도 확인하실 수 있습니다.

사용자 기기에서 실행 중인 프로덕션 앱에서 발생하는 버벅거림을 감지하고 보고할 수 있는 새 라이브러리를 확인하려면 JankStats에 대한 문서를 살펴보세요!