Android System Programming: Porting, customizing, and debugging Android HAL