핵심만 골라 배우는 젯팩 컴포즈 : 젯팩 컴포즈, 안드로이드 스튜디오, 코틀린으로 안드로이드 앱 개발하기
젯팩 컴포즈, 안드로이드 스튜디오, 코틀린으로 안드로이드 앱 개발하기이 책은 젯팩 컴포즈, 안드로이드 스튜디오, 코틀린 프로그래밍 언어를 사용해 신속하고 빠르게 안정적이고 쾌적하게 동작하는 안드로이드 네이티브 UI 빌드 방법을 소개한다. 이 책에서 다루는 주제들은 자세한 튜토리얼 방식의 실습과 함께 진행되며, 다운로드할 수 있는 샘플 소스 코드도 함께 제공된다.
25년 이상의 IT 개발 경력을 지녔다. 특히 프로그래밍 언어와 기업용 개발 도구, 사용자 인터페이스 디자인을 전문으로 해왔으며, 시스템 프로그래밍과 웹 개발, 마케팅까지 담당하기도 했다. IT 학사 외에 Network+, Project+, 자바와 마이크로소프트 MCP 자격증을 보유하고 있다. 또한, 40여 종의 기술 관련 서적을 집필하였으며, 현재는 미국에서 인터넷 출판과 모바일 애플리케이션 개발 회사인 Payload Media의 공동 창업자이자 CEO로 재직 중이다.
옮긴이 머리말 xxiv베타리더 후기 xxvCHAPTER 1 들어가며 11.1 코틀린 개발자에게 21.2 코틀린을 처음 접하는 개발자에게 21.3 샘플 코드 다운로드 2CHAPTER 2 안드로이드 스튜디오 개발 환경 설정 32.1 시스템 요구사항 32.2 안드로이드 스튜디오 패키지 다운로드 42.3 안드로이드 스튜디오 설치 42.4 안드로이드 스튜디오 설치 마법사 62.5 추가 안드로이드 SDK 패키지 설치하기 82.6 커맨드라인에서 안드로이드 SDK 도구에 접근할 수 있도록 설정하기 102.7 안드로이드 스튜디오 메모리 관리 132.8 안드로이드 스튜디오 및 SDK 업데이트 142.9 정리 14CHAPTER 3 컴포즈 프로젝트 개요 153.1 프로젝트 개요 153.2 프로젝트 만들기 163.3 액티비티 만들기 163.4 프로젝트 및 SDK 설정 정의하기 17 3.5 예제 프로젝트 미리 보기 193.6 메인 액티비티 살펴보기 213.7 미리 보기 업데이트 253.8 정리 26CHAPTER 4 컴포즈 예제 프로젝트 274.1 시작하기 274.2 템플릿 코드 삭제하기 274.3 컴포저블의 계층 구조 284.4 DemoText 컴포저블 추가하기 294.5 DemoText 컴포저블 미리 보기 304.6 DemoSlider 컴포저블 추가하기 314.7 DemoScreen 컴포저블 추가하기 324.8 DemoScreen 컴포저블 미리 보기 344.9 대화형 모드에서 테스트하기 354.10 프로젝트 완료하기 364.11 정리 36CHAPTER 5 안드로이드 스튜디오에서 AVD 만들기 375.1 안드로이드 가상 기기 개요 375.2 에뮬레이터 시작하기 395.3 AVD에서 애플리케이션 실행하기 405.4 여러 기기에서 실행하기 425.5 애플리케이션 실행 중지하기 435.6 다크 테마 지원하기 435.7 별도의 창에서 에뮬레이터 실행하기 445.8 기기 프레임 활성화하기 465.9 정리 46CHAPTER 6 안드로이드 스튜디오 에뮬레이터 이용 및 설정하기 476.1 에뮬레이터 환경 476.2 에뮬레이터 툴바 옵션 486.3 줌 모드 다루기 496.4 에뮬레이터 창 크기 조정하기 496.5 확장 제어 옵션 49 6.6 스냅샷 다루기 526.7 지문 에뮬레이션 설정하기 536.8 도구 창 모드의 에뮬레이터 556.9 정리 55CHAPTER 7 안드로이드 스튜디오 사용자 인터페이스 살펴보기 567.1 시작 화면 567.2 기본 창 577.3 도구 창 597.4 안드로이드 스튜디오 키보드 단축키 627.5 스위처 및 최근 파일 탐색 637.6 안드로이드 스튜디오 테마 변경하기 647.7 정리 65CHAPTER 8 물리적 안드로이드 기기에서 안드로이드 스튜디오 앱 테스트하기 668.1 ADB 개요 668.2 안드로이드 기기에서 USB 디버깅 ADB 활성화하기 678.3 USB 연결 문제 해결하기 708.4 안드로이드 기기의 무선 디버깅 활성화하기 718.5 adb 연결 테스트하기 738.6 정리 73CHAPTER 9 안드로이드 스튜디오 코드 편집기 기본 749.1 안드로이드 스튜디오 편집기 749.2 코드 모드 789.3 편집기 창 분리하기 789.4 코드 자동 완성 79 9.5 스테이트먼트 자동 완성 809.6 파라미터 정보 819.7 파라미터 이름 힌트 819.8 코드 생성 819.9 코드 접기 839.10 빠른 문서 탐색 849.11 코드 형식 재지정 859.12 샘플 코드 찾기 869.13 실시간 템플릿 869.14 정리 87CHAPTER 10 안드로이드 아키텍처 개요 8810.1 안드로이드 소프트웨어 스택 8810.2 리눅스 커널 8910.3 안드로이드 런타임(ART) 8910.4 안드로이드 라이브러리 8910.5 애플리케이션 프레임워크 9010.6 애플리케이션 9110.7 정리 91CHAPTER 11 코틀린 개요 9211.1 코틀린이란 무엇인가? 9211.2 코틀린과 자바 9311.3 자바에서 코틀린으로 변환하기 9311.4 코틀린과 안드로이드 스튜디오 9311.5 코틀린을 이용해 실험하기 9411.6 코틀린에서의 세미콜론 9511.7 정리 95CHAPTER 12 코틀린 데이터 타입, 변수, 널 허용 9612.1 코틀린 데이터 타입 9612.2 뮤터블 변수 10012.3 이뮤터블 변수 10012.4 뮤터블/이뮤터블 변수 선언하기 10012.5 데이터 타입은 객체다 10112.6 타입 애너테이션과 타입 추론 10212.7 널 허용 타입 10312.8 안전 호출 연산자 10412.9 not-null 어서션 10512.10 널 허용 타입과 let 함수 10512.11 초기화 지연 10712.12 엘비스 연산자 10812.13 타입 캐스팅 및 타입 확인 10812.14 정리 109CHAPTER 13 코틀린 연산자와 표현식 11013.1 코틀린의 표현식 구문 11013.2 기본 할당 연산자 11013.3 코틀린 산술 연산자 11113.4 증강 할당 연산자 11113.5 증가/감소 연산자 11213.6 등치 연산자 11313.7 부울 논리 연산자 11413.8 범위 연산자 11413.9 비트와이즈 연산자 11513.10 정리 118CHAPTER 14 코틀린 제어 흐름 11914.1 반복 제어 흐름 11914.2 조건부 제어 흐름 12414.3 정리 127CHAPTER 15 코틀린 함수와 람다 12815.1 함수란 무엇인가? 12815.2 코틀린에서의 함수 선언 12815.3 코틀린 함수 호출하기 12915.4 단일 표현식 함수 13015.5 로컬 함수 13015.6 반환값 다루기 13115.7 기본 함수 파라미터 선언하기 13115.8 가변 길이 함수 파라미터 13215.9 람다 표현식 13215.10 고차 함수 13415.11 정리 135CHAPTER 16 코틀린 객체 지향 프로그래밍 기초 13616.1 객체란 무엇인가? 13616.2 클래스란 무엇인가? 13616.3 코틀린 클래스 정의하기 13616.4 클래스에 프로퍼티 추가하기 13716.5 메서드 정의하기 13816.6 클래스 인스턴스 선언 및 초기화하기 13816.7 기본 및 보조 생성자 13816.8 초기화 블록 14116.9 메서드 호출과 프로퍼티 접근 14116.10 커스텀 접근자 14216.11 중첩된 내부 클래스 14316.12 컴패니언 객체 14416.13 정리 146CHAPTER 17 상속과 서브클래싱 14717.1 상속, 클래스, 서브클래스 14717.2 서브클래싱 구문 14717.3 코틀린 상속 예시 14917.4 서브클래스 기능 확장하기 15017.5 상속된 메서드 오버라이드하기 15017.6 커스텀 보조 생성자 추가하기 15217.7 SavingsAccount 클래스 이용하기 15317.8 정리 153CHAPTER 18 컴포즈 개요 15418.1 컴포즈 이전의 개발 15418.2 컴포즈의 선언적 구문 15518.3 컴포즈는 데이터 주도적이다 15618.4 정리 156CHAPTER 19 컴포저블 함수 개요 15719.1 컴포저블 함수란 무엇인가? 15719.2 상태 컴포저블과 비상태 컴포저블 15819.3 컴포저블 함수 구문 15819.4 파운데이션 컴포저블과 머티리얼 컴포저블 16119.5 정리 162CHAPTER 20 컴포즈 상태와 재구성 16320.1 상태 16320.2 재구성 16320.3 StateExample 프로젝트 만들기 16420.4 컴포저블에서 상태 선언하기 16420.5 단방향 데이터 흐름 16820.6 상태 호이스팅 17020.7 환경 설정 변경을 통한 상태 저장하기 17320.8 정리 174CHAPTER 21 CompositionLocal 17521.1 CompositionLocal 이해하기 17521.2 CompositionLocal 이용하기 17621.3 CompLocalDemo 프로젝트 만들기 17721.4 레이아웃 디자인하기 17821.5 CompositionLocal 상태 추가하기 17921.6 CompositionLocal 상태에 접근하기 18021.7 디자인 테스트하기 18021.8 정리 182CHAPTER 22 컴포즈 Slot API 18322.1 Slot API 이해하기 18322.2 Slot API 선언하기 18422.3 Slot API 컴포저블 호출하기 18522.4 정리 186CHAPTER 23 컴포즈 Slot API 튜토리얼 18723.1 프로젝트 개요 18723.2 SlotApiDemo 프로젝트 만들기 18723.3 MainActivity 클래스 파일 준비하기 18723.4 MainScreen 컴포저블 만들기 18823.5 ScreenContent 컴포저블 추가하기 18923.6 Checkbox 컴포저블 만들기 19023.7 ScreenContent Slot API 구현하기 19223.8 이미지 drawable 리소스 추가하기 19323.9 TitleImage 컴포저블 만들기 19523.10 MainScreen 컴포저블 완료하기 19523.11 프로젝트 미리 보기 19723.12 정리 198CHAPTER 24 모디파이어 이용하기 19924.1 모디파이어 19924.2 ModifierDemo 프로젝트 만들기 20024.3 모디파이어 만들기 20124.4 모디파이어 연결 순서 20224.5 컴포저블에 모디파이어 지원 추가하기 20324.6 공통 내장 모디파이어 20724.7 모디파이어 조합하기 20824.8 정리 209CHAPTER 25 Row/Column을 이용해 레이아웃 구성하기 21025.1 RowColDemo 프로젝트 만들기 21025.2 Row 컴포저블 21125.3 Column 컴포저블 21225.4 Row Column 컴포저블 조합하기 21225.5 레이아웃 정렬 21425.6 레이아웃 배열 위치 조정하기 21625.7 레이아웃 배열 간격 조정하기 21825.8 Row Column 스코프 모디파이어 21925.9 스코프 모디파이어 가중치 22425.10 정리 225CHAPTER 26 Box 레이아웃 22626.1 Box 컴포저블 22626.2 BoxLayout 프로젝트 만들기 22626.3 TextCell 컴포저블 추가하기 22726.4 Box 레이아웃 추가하기 22726.5 Box 정렬 22926.6 BoxScope 모디파이어 23026.7 clip() 모디파이어 이용하기 23126.8 정리 233CHAPTER 27 커스텀 레이아웃 모디파이어 23427.1 컴포즈 레이아웃 기본 23427.2 커스텀 레이아웃 23527.3 LayoutModifier 프로젝트 만들기 23527.4 ColorBox 컴포저블 추가하기 23527.5 커스텀 레이아웃 모디파이어 만들기 23627.6 기본 위치 23727.7 레이아웃 모디파이어 완성하기 23727.8 커스텀 모디파이어 이용하기 23927.9 정렬 선 다루기 23927.10 베이스라인 다루기 24227.11 정리 243CHAPTER 28 커스텀 레이아웃 구현하기 24428.1 커스텀 레이아웃 개요 24428.2 커스텀 레이아웃 구문 24428.3 커스텀 레이아웃 이용하기 24628.4 CustomLayout 프로젝트 만들기 24628.5 CascadeLayout 컴포저블 만들기 24728.6 CascadeLayout 컴포저블 이용하기 24928.7 정리 250CHAPTER 29 ConstraintLayout 25129.1 ConstraintLayout 소개 25129.2 ConstraintLayout 동작 원리 25129.3 크기 설정하기 25529.4 가이드라인 헬퍼 25629.5 배리어 헬퍼 25629.6 정리 258CHAPTER 30 ConstraintLayout 다루기 25930.1 ConstraintLayout 호출하기 25930.2 참조 만들기 25930.3 참조를 컴포저블에 할당하기 26030.4 제약 추가하기 26030.5 ConstraintLayout 프로젝트 만들기 26130.6 ConstraintLayout 라이브러리 추가하기 26230.7 커스텀 버튼 컴포저블 추가하기 26230.8 기본 제약 26330.9 반대 제약 26430.10 제약 편향 26630.11 제약 마진 26730.12 반대 제약과 편향의 중요성 26830.13 체인 만들기 27130.14 가이드라인 이용하기 27230.15 배리어 이용하기 27330.16 제약 집합을 이용해 제약 연결 끊기 27730.17 정리 279CHAPTER 31 IntrinsicSize 다루기 28031.1 내재적 측정값 28031.2 내재적 최대 및 최소 크기 측정값 28131.3 예시 프로젝트 개요 28231.4 IntrinsicSizeDemo 프로젝트 만들기 28231.5 커스텀 텍스트 필드 만들기 28231.6 Text, Box 컴포넌트 추가하기 28331.7 최상위 Column 추가하기 28431.8 프로젝트 테스트하기 28531.9 IntrinsicSize Max 측정값 적용하기 28531.10 IntrinsicSize Min 측정값 적용하기 28631.11 정리 286CHAPTER 32 코루틴과 LaunchedEffect 28732.1 코루틴이란? 28732.2 스레드와 코루틴 28832.3 코루틴 스코프 28832.4 일시 중단 함수 28932.5 코루틴 디스패처 28932.6 코루틴 빌더 29032.7 잡 29132.8 코루틴: 중지 및 재시작 29132.9 코루틴 채널 커뮤니케이션 29332.10 부작용 이해하기 29332.11 정리 295CHAPTER 33 리스트와 그리드 29633.1 표준 리스트와 지연 리스트 29633.2 Column Row 리스트 다루기 29733.3 지연 리스트 만들기 29733.4 ScrollState를 이용해 스크롤 활성화하기 29833.5 프로그래밍적 스크롤 29933.6 스티키 헤더 30133.7 스크롤 위치에 반응하기 30333.8 지연 그리드 만들기 30333.9 정리 306CHAPTER 34 컴포즈 Row/Column 리스트 튜토리얼 30734.1 ListDemo 프로젝트 만들기 30734.2 Column 기반 리스트 만들기 30734.3 리스트 스크롤 활성화하기 30934.4 수동 스크롤 31034.5 Row 리스트 예시 31234.6 정리 313CHAPTER 35 지연 리스트 튜토리얼 31435.1 LazyListDemo 프로젝트 만들기 31435.2 프로젝트에 리스트 데이터 추가하기 31535.3 XML 데이터 읽기 31635.4 이미지 로딩 처리하기 31735.5 리스트 아이템 컴포저블 디자인하기 32035.6 지연 리스트 만들기 32135.7 프로젝트 테스트하기 32235.8 리스트 아이템 클릭하기 32235.9 정리 324CHAPTER 36 지연 리스트가 제공하는 스티키 헤더와 스크롤 식별 32536.1 리스트 아이템 데이터 그룹핑하기 32536.2 헤더와 아이템 표시하기 32536.3 스티키 헤더 추가하기 32636.4 스크롤 위치에 반응하기 32836.5 스크롤 버튼 추가하기 32936.6 완성한 앱 테스트하기 33136.7 정리 331CHAPTER 37 시각적 애니메이션 33237.1 AnimateVisibility 프로젝트 만들기 33237.2 시각적 애니메이션 적용하기 33337.3 진입/이탈 애니메이션 정의하기 33637.4 애니메이션 스펙과 애니메이션 이징 33737.5 애니메이션 반복하기 33937.6 자식별로 각각 애니메이션 적용하기 33937.7 애니메이션 자동 시작하기 34137.8 교차 페이딩 구현하기 34237.9 정리 343CHAPTER 38 상태 주도 애니메이션 34438.1 상태 주도 애니메이션 이해하기 34438.2 상태 함수로서의 애니메이션 34438.3 AnimateState 프로젝트 만들기 34538.4 animateFloatAsState를 이용한 회전 애니메이션 34638.5 animateColorAsState를 이용한 색상 변경 애니메이션 처리 34938.6 animateDpAsState를 이용한 움직임 애니메이션 처리하기 35238.7 스프링 효과 추가하기 35438.8 키프레임 다루기 35638.9 여러 애니메이션 조합하기 35738.10 Animation Inspector 이용하기 35938.11 정리 361CHAPTER 39 캔버스 그래픽 그리기 36239.1 Canvas 컴포넌트 소개 36239.2 CanvasDemo 프로젝트 만들기 36239.3 선 그리기와 캔버스 크기 얻기 36339.4 점선 그리기 36439.5 사각형 그리기 36539.6 회전시키기 36939.7 원과 타원 그리기 37039.8 그레이디언트 그리기 37139.9 부채꼴 그리기 37439.10 경로 그리기 37539.11 점 그리기 37639.12 이미지 그리기 37839.13 정리 380CHAPTER 40 ViewModel 다루기 38140.1 안드로이드 젯팩이란 무엇인가? 38140.2 ‘구식’ 아키텍처 38140.3 모던 안드로이드 아키텍처 38240.4 ViewModel 컴포넌트 38240.5 상태 기반의 ViewModel 구현 38340.6 ViewModel 상태와 액티비티 연결하기 38440.7 LiveData를 이용한 ViewModel 구현 38540.8 액티비티 안에서 ViewModel의 LiveData 관찰하기 38640.9 정리 387CHAPTER 41 ViewModel 튜토리얼 38841.1 프로젝트 개요 38841.2 ViewModelDemo 프로젝트 만들기 38941.3 ViewModel 추가하기 38941.4 MainActivity에서 DemoViewModel에 접근하기 39141.5 온도 입력 컴포저블 디자인하기 39241.6 온도 입력 컴포저블 구현하기 39341.7 사용자 인터페이스 디자인 완료하기 39641.8 앱 테스트하기 39841.9 정리 398CHAPTER 42 안드로이드 SQLite 데이터베이스 개요 39942.1 데이터베이스 테이블 이해하기 39942.2 데이터베이스 스키마 소개 40042.3 열과 데이터 타입 40042.4 데이터베이스의 행 40042.5 기본 키 40042.6 SQLite 40142.7 구조화된 쿼리 언어(SQL) 40142.8 AVD에서 SQLite 이용하기 40242.9 안드로이드 Room 퍼시스턴스 라이브러리 40542.10 정리 405CHAPTER 43 Room 데이터베이스와 컴포즈 40643.1 모던 앱 아키텍처 다시보기 40643.2 Room 데이터베이스 퍼시스턴스의 핵심 요소 40743.3 엔티티 이해하기 40843.4 데이터 접근 객체 41143.5 Room 데이터베이스 41343.6 저장소 41443.7 인메모리 데이터베이스 41543.8 Database Inspector 41643.9 정리 416CHAPTER 44 Room 데이터베이스 및 저장소 튜토리얼 41744.1 RoomDemo 프로젝트 개요 41744.2 RoomDemo 프로젝트 만들기 41844.3 빌드 환경 설정 수정하기 41844.4 엔티티 구축하기 41944.5 데이터 접근 객체 만들기 42044.6 Room 데이터베이스 추가하기 42244.7 저장소 추가하기 42344.8 ViewModel 추가하기 42544.9 사용자 인터페이스 디자인하기 42744.10 ViewModelProvider Factory 클래스 작성하기 42944.11 MainScreen 함수 완료하기 43144.12 RoomDemo 앱 테스트하기 43444.13 Database Inspector 이용하기 43444.14 정리 435CHAPTER 45 내비게이션 43645.1 내비게이션 이해하기 43645.2 내비게이션 컨트롤러 선언하기 43845.3 내비게이션 호스트 선언하기 43945.4 내비게이션 그래프에 목적지 추가하기 43945.5 목적지로 이동하기 44145.6 목적지에 인수 전달하기 44245.7 하단 내비게이션 바 다루기 44445.8 정리 446CHAPTER 46 컴포즈 내비게이션 튜토리얼 44746.1 NavigationDemo 프로젝트 만들기 44746.2 NavigationDemo 프로젝트 소개 44846.3 내비게이션 경로 선언하기 44846.4 홈 화면 추가하기 44846.5 웰컴 화면 추가하기 45046.6 프로필 화면 추가하기 45146.7 내비게이션 컨트롤러와 호스트 만들기 45146.8 화면 내비게이션 구현하기 45246.9 사용자 이름 인수 전달하기 45346.10 프로젝트 테스트하기 45446.11 정리 455CHAPTER 47 하단 내비게이션 바 튜토리얼 45647.1 BottomBarDemo 프로젝트 만들기 45647.2 내비게이션 경로 추가하기 45747.3 바 아이템 디자인하기 45747.4 바 아이템 리스트 만들기 45747.5 목적지 화면 추가하기 45847.6 내비게이션 컨트롤러와 호스트 만들기 46047.7 내비게이션 바 디자인하기 46147.8 Scaffold 컴포넌트 다루기 46347.9 프로젝트 테스트하기 46347.10 정리 464CHAPTER 48 제스처 감지하기 46548.1 컴포즈 제스처 식별 46548.2 GestureDemo 프로젝트 만들기 46548.3 클릭 제스처 감지하기 46648.4 PointerInputScope를 이용해 탭 감지하기 46748.5 드래그 제스처 감지하기 46948.6 PointerInputScope를 이용해 드래그 제스처 감지하기 47148.7 scrollable 모디파이어를 이용해 스크롤하기 47248.8 스크롤 모디파이어를 이용해 스크롤하기 47348.9 꼬집기(확대/축소) 제스처 감지하기 47548.10 회전 제스처 감지하기 47748.11 변환 제스처 감지하기 47848.12 정리 479CHAPTER 49 스와이프 제스처 감지하기 48049.1 스와이프 제스처와 앵커 48049.2 스와이프 제스처 감지하기 48049.3 앵커 맵 선언하기 48149.4 임계점 선언하기 48249.5 스와이프를 따라 컴포넌트 이동하기 48249.6 SwipeDemo 프로젝트 소개 48349.7 SwipeDemo 프로젝트 만들기 48349.8 swipeable 상태 및 앵커 설정하기 48349.9 부모 박스 디자인하기 48449.10 프로젝트 테스트하기 48749.11 정리 487CHAPTER 50 코틀린 플로 48850.1 플로 이해하기 48850.2 FlowDemo 프로젝트 만들기 48950.3 프로젝트에 뷰 모델 추가하기 49050.4 플로 선언하기 49050.5 플로 데이터 방출하기 49150.6 데이터를 상태로 수집하기 49250.7 중재자를 사용해 데이터 변환하기 49350.8 플로 데이터 수집하기 49550.9 플로 버퍼 추가하기 49750.10 종단 플로 연산자 49850.11 플로 평탄화 49950.12 여러 플로 조합하기 50150.13 핫/콜드 플로 50250.14 스테이트플로 50350.15 셰어드플로 50450.16 콜드 플로를 핫 플로로 전환하기 50650.17 정리 507CHAPTER 51 젯팩 컴포즈 셰어드플로 튜토리얼 50851.1 프로젝트 소개 50851.2 SharedFlowDemo 프로젝트 만들기 50851.3 프로젝트에 뷰 모델 추가하기 50951.4 세어드플로 선언하기 51051.5 플로값 수집하기 51151.6 SharedFlowDemo 앱 테스트하기 51251.7 백그라운드에서 플로 다루기 51351.8 정리 515CHAPTER 52 컴포즈 테마 적용 다루기 51652.1 머티리얼 디자인 2와 머티리얼 디자인 3 51652.2 머티리얼 디자인 2 테마 적용 51752.3 머티리얼 디자인 3 테마 적용 52052.4 커스텀 테마 구현하기 52252.5 정리 523CHAPTER 53 머티리얼 디자인 3 테마 적용 튜토리얼 52453.1 ThemeDemo 프로젝트 만들기 52453.2 머티리얼 디자인 3 라이브러리 추가하기 52453.3 사용자 인터페이스 디자인하기 52553.4 새로운 테마 만들기 52753.5 프로젝트에 테마 추가하기 52853.6 동적 색상 활성화하기 52953.7 정리 530CHAPTER 54 안드로이드 앱 번들 생성, 테스트, 업로드 53154.1 릴리스 준비 프로세스 53154.2 안드로이드 앱 번들 53154.3 구글 플레이 개발자 콘솔 계정 등록하기 53254.4 콘솔에서 앱 설정하기 53354.5 구글 플레이 앱 서명 활성화하기 53454.6 키스토어 파일 만들기 53554.7 안드로이드 앱 번들 만들기 53754.8 테스트 APK 파일 만들기 53854.9 구글 플레이 개발자 콘솔에 앱 번들 업로드하기 54054.10 앱 번들 살펴보기 54154.11 테스터 관리하기 54354.12 테스트용 앱 배포하기 54354.13 새 앱 번들 버전 업로드하기 54454.14 앱 번들 파일 분석하기 54554.15 정리 546CHAPTER 55 안드로이드 스튜디오의 그레이들 개요 54755.1 그레이들 개요 54755.2 그레이들과 안드로이드 스튜디오 54855.2.1 합리적인 기본값 548 / 55.2.2 디펜던시 54855.2.3 빌드 변형 548 / 55.2.4 매니페스트 항목 54955.2.5 APK 서명 549 / 55.2.6 프로가드 지원 54955.3 속성 및 설정 그레이들 빌드 파일 54955.4 최상위 수준 그레이들 빌드 파일 55055.5 모듈 수준 그레이들 빌드 파일 55155.6 빌드 파일에서 서명 설정하기 55455.7 커맨드라인에서 그레이들 태스크 실행하기 55555.8 정리 556찾아보기 558