標籤:android io ar os sp 檔案 資料 on 問題
整個AOSP代碼,包天包地,從kernel,libc,gui,net……簡直包括了絕大多普通程式員職業生涯涉及的整個領域。其實,開源界早已經遇到並且解決了Android的很多問題,不過google討厭GPL說起,或者說,google為了照顧更多的商業公司,以一已之力,重造了很多輪子。下面縮縮。
glibc <---->bionic
首先標準c的api必不可少。另外android構建於linux之上,linux實現的那套posix api,linux專有的系統調用,也得封裝一套出來。gnu開發了glibc,google開發bionic。
glib<---->system/core/libcutils+libsparse
c語言缺乏標準的資料結構實現,類似鏈表,雜湊表,動態數組之類的資料結構在並沒有在標準c中做任何規則。gtk組織開發了glib做為自己的圖形庫的支援,android自然也不能落後,也要來一套,並且增加了,疏鬆陣列這種資料結構。
stl/boost<--->system/core/libutils
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/vold
要處理裝置的熱插拔,比如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,前撲後繼,大家為了跨越進程,做了太多努力了。
Android的那些輪子