what is hardware abstraction layer in android