整個AOSP代碼,包天包地,從kernel,libc,gui,net……簡直包括了絕大多普通程序員職業生涯涉及的整個領域。其實,開源界早已經遇到而且解決了Android的不少問題,不過google討厭GPL提及,或者說,google爲了照顧更多的商業公司,以一已之力,重造了不少輪子。下面縮縮。linux
glibc <---->bionicandroid
首先標準c的api必不可少。另外android構建於linux之上,linux實現的那套posix api,linux專有的系統調用,也得封裝一套出來。gnu開發了glibc,google開發bionic。c++
glib<---->system/core/libcutils+libsparse程序員
c語言缺少標準的數據結構實現,相似鏈表,哈希表,動態數組之類的數據結構在並無在標準c中作任何規則。gtk組織開發了glib作爲本身的圖形庫的支持,android天然也不能落後,也要來一套,而且增長了,稀疏矩陣這種數據結構。shell
stl/boost<--->system/core/libutilsapi
android的framework底層是用c++實現的,要用c++,什麼智能指針,thread,string,vector,hashmap,list等基礎數據結構,得首先準備好。stl/boost實現的那套,android此次沒有原樣來一套,原則是,用多少實現多少,實現精簡的stl/boost。數組
busybox<--->system/core/sh + toolbox + rootdir網絡
有了linux os,終端(shell)一樣是必不可少的組件。咱們須要shell腳本解釋器,各類經常使用cmd,以及文件系統構建。busybox的工做,一樣要再作一遍。數據結構
udev<--->system/volddom
要處理設備的熱插拔,好比sd卡,u盤等。咱們要處理用戶空間也內核的通訊,咱們有netlink socket。開源界給出的選擇是udev,google給出的選擇是void。
xinetd<--->system/netd
xinetd linux下的網絡守護進程,處理各類網絡服務。android給了另一套netd.
com/dbus/cobra<--->binder
其實idl來描述接口,都是long long ago的事了。好比微軟的com組件,unix的cobra,進程間通訊的組件何其多也,不管你是用內核虛擬設備驅動,仍是socket domain,前撲後繼,你們爲了跨越進程,作了太多努力了。