SKIP THE SHIPPING
Use code NOSHIP during checkout to save 40% on eligible eBooks, now through January 5. Shop now.
This eBook includes the following formats, accessible from your Account page after purchase:
EPUB The open industry format known for its reflowable content and usability on supported mobile devices.
PDF The popular standard, used most often with the free Acrobat® Reader® software.
This eBook requires no passwords or activation to read. We customize your eBook by discreetly watermarking it with your name, making it uniquely yours.
Also available in other formats.
Register your product to gain access to bonus material or receive a coupon.
The Complete Guide to Customizing Android for New IoT and Embedded Devices
Inside the Android OS is a comprehensive guide and reference for technical professionals who want to customize and integrate Android into embedded devices, and construct or maintain successful Android-based products. Replete with code examples, it encourages you to create your own working code as you read---whether for personal insight or a professional project in the fast-growing marketplace for smart IoT devices.
Expert Android developers G. Blake Meike and Larry Schiefer respond to the real-world needs of embedded and IoT developers moving to Android. After presenting an accessible introduction to the Android environment, they guide you through boot, subsystem startup, hardware interfaces, and application support---offering essential knowledge without ever becoming obscure or overly specialized.
Reflecting Android's continuing evolution, Meike and Schiefer help you take advantage of relevant innovations, from the ART application runtime environment to Project Treble. Throughout, a book-length project covers all you need to start implementing your own custom Android devices, one step at a time.
You will:
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