▣ 01장: 왜 안드로이드인가? 안드로이드 채택하기 ___풀스택(Full Stack) 제공 ___폭넓은 수용성 ___미려한 사용자 인터페이스 ___리눅스 기반 ___막강한 개발 환경 ___오픈 소스 AOSP와 구글 다른 선택지 ___마이크로 컨트롤러 ___기타 RTOS 요약 ▣ 02장: Acme 부팅하기 빌드 머신 구축하기 소스 코드 다운로드하기 Repo 소스 포크하기 ___안드로이드 버전 선택하기 ___로컬 미러 ___호스팅 서비스 Git 저장소 ___트리 스냅숏 저장소 커밋 고정하기 예: 포크된 저장소를 위한 로컬 미러 이미지 빌드하기 디바이스 툴 ___fastboot ___adb 디바이스 플래싱하기 요약 ▣ 03장: 시작하기 안드로이드 계층 배치 ___하드웨어 ___리눅스 커널 ___시스템 라이브러리 ___애플리케이션 ___안드로이드 프레임워크 안드로이드 서비스 모델 소스 탐험하기 ___다른 소스들 ___박스에 뭐가 들어 있나? 요약 ▣ 04장: 커널 리눅스 커널 ___커널 프로세스 관리 ___커널 메모리 관리 안드로이드 커널 ___안드로이드 커널 기능 커널 빌드하기 ___빌드 시스템 ___소스 다운로드하기 요약 ▣ 05장: 플랫폼 보안 보안의 종류 자체 검사 부팅 (Verified Boot) 운영 보안 ___안드로이드 소프트웨어 계층 ___프로세스 샌드박스 ___안드로이드용 SE 리눅스 ___SE 정책 정의 ___안드로이드 권한 ___파일 시스템 사용자 보호 권한 커스터마이징 ___사용자 정의 권한에 의해 보호받는 샘플 앱 ___사용자 정의 권한을 사용하는 샘플 클라이언트 앱 요약 ▣ 06장: 시스템 초기화: 시스템 설치와 부팅 부팅 절차 ___부트로더 ___Fastboot ___커널 ___파일 시스템 ___init 복구 데몬 빌드하기 Acme 디바이스 생성하기 Repo 다시 살펴보기 ___데몬 시작하기 요약 ▣ 07장: 안드로이드의 시작: Dalvik과 Zygote Dalvik ART ___기본 ART ___하이브리드 ART Zygote ___Zygote 메모리 관리 ___Zygote 시작 ___런타임 초기화 ___시스템 서비스 시작 요약 인용 ▣ 08장: 안드로이드와 통신하기: HAL 왜 HAL인가? HAL이 필요한가? HAL 설계하기 HAL 빌드하기 ___코드 구조 ___HAL 구현하기 요약 ▣ 09장: 자바와 통신하기: JNI 코드 구조 하드웨어 사용하기 HAL 사용하기 자바 네이티브 인터페이스 사용하기 ___네이티브 코드 실행하기 ___JNI: 자바 측면 ___JNI: 네이티브 측면 ___자바 근접 센서 애플리케이션 ___JNI: 몇 가지 팁 요약 ▣ 10장: 프로젝트 트레블: 바인더화된 HAL HIDL 아키텍처 ___hwservicemanager ___HIDL 서비스 ___HIDL 클라이언트 서비스 하드웨어 인터페이스 정의 언어 (HIDL) ___HIDL 타입 HIDL 서비스 HIDL 클라이언트 요약 ▣ 11장: 바인더화된 HAL 만들기 Acme 커스텀 HIDL 요약 ▣ 12장: 바인더화된 HAL의 클라이언트 네이티브 C++ Aproximity 클라이언트 ___aproximitycl을 위한 안드로이드 SE 리눅스 수정 항목 ___Aproximitycl을 Acme로 빌드하기 자바/코틀린 Aproximity 클라이언트 ___AproximityClient를 위한 안드로이드 SE 리눅스 수정 ___Acme 플랫폼에 AproximityClient 빌드하기 요약 ▣ 부록 A. Khadas VIM3 하드웨어 소개 B. 안드로이드 9.0 포크 소스 ___소스 다운로드 ___이미지 빌드 ___이미지 플래싱 C. 안드로이드 11.0 정규 AOSP 소스 ___소스 다운로드 ___이미지 빌드 ___이미지 플래싱