Android系統為什麼要設計得那麼“臃腫”?

用戶3708573291


因為安卓的高級編程語言是JAVA

因為Java簡單,能讓龐大數量的Java程序員很容易轉到Android開發上,進而豐富Android生態,以此跟iOS生態抗衡。

同樣,在選擇了Java語言後,接下來就是虛擬機,由於官方的HotSpot 是基於棧結構的虛擬機,而Android的CPU指令集一開始就選擇的是ARM,ARM的特點就是寄存器多,所以就開發了Dalvik,Dalvik相對於HotSpot的最大區別就是改成基於寄存器的了,這樣可以提高性能,也最大化發揮ARM的優勢。至於ART,其實就是優化後的Dalvik。

那為什麼不直接用Linux 內核+驅動+服務

這個其實很簡單,因為Linux是GPL協議,如果按照這個模式,那芯片商像高通/MTK的驅動都得開源,而他們是很不願意開源的。

谷歌為了解決這個問題,就在Linux 上層添加了一個HAL層(Hardware Abstract Layer),以此把內核跟驅動程序隔離了,這樣驅動那裡就可以不用開源了。也是因為這個原因,Linux 社區也不再認為Android是Linux的一個分支版本。

除了協議的原因之外,Android還面臨的一個問題就是兼容的廠商超級多,每家廠商的驅動都不一樣,這也是HAL層的另一個好處,就是隔離驅動,要不然把驅動都放進來,系統要升級可就麻煩了。

為什麼不是直接編譯機器碼來運行?

這個原因主要原因其實是為了安全性。手機設備跟電腦有個很大的不同,手機上有很多的用戶隱私數據,為了這個考慮就做成了每一個App都是一個獨立的沙盒環境,互相之間隔離,每一個這個東西就是Runtime做的。直接編譯成機器碼App能做的事情很多,就會有安全隱患。而Runtime能夠限制到App能做的事情是有限的,而且還能做權限的控制。


分享到:


相關文章: