根据上个月欧洲嵌入式Linux大会 上Matt Porter的展示 ,从嵌入式开发者的角度出发,Android并不是那么友好,大量的使用了特有的系统,可以说是一个糟糕和难以移植 的系统!
首先在C/C++运行库 方面,Android并没有采用被广泛使用的GLibC,而是采用了Bionic。虽然相对GLibC而言,这个Bionic库体积小、速度快,且采用了BSD协议,但不可避免的面临一系列的问题。例如在构架方面,Bionic只支持ARM ,对X86的支持不够,也不支持其他CPU构架。在C++语言方面,Bionic不支持C++异常处理 ,也没有提供STL库 。在多线程方面,Bionic并未对POSIX进行完整实现 ,例如没有提供pthread_cancel()、pthread_atfork()等函数,并且使用常量标识TLS映射。此外,Bionic不支持System V IPC和异步IO操作 ,也没有提供用于native开发的Linux头文件 。
此外,Android很奇怪的取消了一些配置文件 ,也试图自行解决设备管理问题 。例如,Android试图用自己的init/vold替代udev/hal进行设备管理,并对设备访问规则进行硬编码。在热插拔方面,Android目前仅提供了对MMC设备的支持,却不支持USB设备。
在触摸屏 上,Android没有使用tslib(现在有了添加tslib支持的补丁),触摸屏事件也是未经任何处理就直接从驱动直接传递给系统的按键事件队列。由于Android的堆管理器使用了硬编码 ,当在FB上使用超过1024*768的分辨率 时会导致内存分配失败和系统重启。
事实上,Android在很多地方都放弃了配置文件,而是一味的采用硬编码 。除了前面提到的几处,在3G和WiFi信号指示器、DNS服务器配置、电源管理等大量场合下都莫名其妙的采用了硬编码,导致系统可移植性极差。
Android面临的其他技术问题包括Pixelflinger可移植性低、电源管理设计混乱、无法通过测试官方提供的部分单元测试,等等。
除了上面提到的和一些没有提及的技术方面的问题,Android开发社区也存在很多问题 。例如,OHA成员和开发社区的代码不同步、Google参与性不高、代码接收缓慢,等等。