Preface xiii Chapter 1 Why Android? 1 Adopting Android 1 Full Stack 2 Broad Acceptance 2 Beautiful UI 2 Linux Based 2 Powerful Development Environment 3 Open Source 3 AOSP and Google 5 Other Choices 6 Micro-Controllers 6 Other RTOSs 7 Summary 8 Chapter 2 Booting Acme 9 Setting Up a Build Machine 10 Downloading the Code 11 Repo 11 Forking the Source 15 Android Version Selection 16 Local Mirror 17 Hosted Git Repositories 18 Tree Snapshot 19 Repository Commit Pinning 19 Example: Local Mirror of Forked Repositories 19 Building an Image 24 Device Tools 27 fastboot 28 adb 29 Flashing the Device 30 Summary 33 Chapter 3 Getting Started 35 Putting Android in Its Place 35 Hardware 36 The Linux Kernel 36 System Libraries 37 Applications 38 The Android Framework 39 The Android Service Model 40 Exploring the Source 43 Other Sources 44 What's in the Box? 44 Summary 48 Chapter 4 The Kernel 49 The Linux Kernel 49 Kernel Process Management 50 Kernel Memory Management 51 The Android Kernel 53 Android Kernel Features 54 Building a Kernel 62 The Build System 63 Downloading the Source 63 Summary 66 Chapter 5 Platform Security 67 Types of Security 67 Verified Boot 68 Operational Security 69 Android Software Layers 70 The Process Sandbox 70 SE Linux for Android 72 SE Policy Definition 73 Android Permissions 76 File Systems 79 User Protections 82 Customizing Permissions 83 Sample Custom Permission-Protected App 83 Sample Custom Permission Client App 88 Summary 92 Chapter 6 System Startup: Installing and Booting the System 93 The Boot Process 93 Bootloader 95 Fastboot 99 Kernel 100 The File System 102 init 104 Recovery 106 Building a Daemon 107 Creating the Acme Device 107 Repo Again 110 Starting the Daemon 111 Summary 114 Chapter 7 Android Startup: Dalvik and Zygote 115 Dalvik 116 ART 120 ART Basics 120 Hybrid ART 122 Zygote 123 Zygote Memory Management 123 Zygote Startup 127 Runtime Initialization 128 System Service Startup 129 Summary 131 Citations 131 Chapter 8 Getting to Android: The HAL 133 Why a HAL? 133 Is a HAL Necessary? 135 Designing the HAL 136 Building a HAL 137 Code Structure 138 Implementing the HAL 140 Summary 151 Chapter 9 Getting to Java: The JNI 153 Code Structure 154 Using the Device 155 Using the HAL 157 Using the Java Native Interface 159 Executing Native Code 160 JNI: The Java Side 161 JNI: The Native Side 162 A Java Proximity Application 165 JNI: Some Hints 176 Summary 182 Chapter 10 Project Treble: Binderized HAL 183 HIDL Architecture 183 hwservicemanager 185 HIDL Services 185 HIDL Client Applications 186 Hardware Interface Definition Language (HIDL) 186 HIDL Types 191 HIDL Services 194 HIDL Clients 197 Summary 198 Chapter 11 Creating a Custom Binderized HAL 199 Acme Custom HIDL 199 Summary 217 Chapter 12 Clients for a Custom Binderized HAL 219 Native C++ Aproximity Client 219 SE Linux for Android Changes for aproximitycl 224 Build aproximitycl into Acme 225 Java/Kotlin Aproximity Client 226 SE Linux for Android Changes for AproximityClient 229 Build AproximityClient into Acme 229 Summary 231 Index 233.
Inside the Android OS : Building, Customizing, Managing and Operating Android System Services