Android 架構設計的思想與原則是什麼? | 知乎問答精選

 

A-A+

Android 架構設計的思想與原則是什麼?

2018年07月12日 GOOGLE, 知乎問答精選 暫無評論 閱讀 3 ℃ 次

最近工作中遇到了android中的權限問題,發現Android確實是開源的,但並不開放,比如權限控管就相當嚴格,限制做很多事情,這一點得意於linux內核。這也勾起來對其架構研究的興趣,不知到哪位能夠深度剖析下android架構設計的思想與原則?

【rlei的回答(24票)】:

理解好Intent,就可以理解Android哲學("所有應用生來平等")的一部分。舉個簡單的例子,iOS裡面應用要集成SNS如facebook/twitter/sina weibo等,都需要應用自己實現(iOS5也只是集成twitter一家);Android上只需要廣播一個share內容的intent。從理解Intent如何工作開始,你就在慢慢理解Activity Manager, Package Manager, services這些Android的重要組件是如何工作的。

另外Binder是Android架構裡非常核心的一塊。Android基於Intent的消息傳遞和組件/應用解耦,下面的基礎都是Binder IPC。在這一點上,Android實際上是光榮的傳承了BeOS和Palm OS 6(悲催的OS6...)未能發揚光大的一部分。關於binder的前世今生,可參考osnews.com/story,?angryredplanet.com/~hackbod?以及angryredplanet.com/~hackbod。文中提到的Dianne Hackborn即為前BeOS和PalmSource員工,Android的核心架構人員之一。Content Provider這一部分基本上也是她實現的。是的,如果你找到她的個人主頁,你會發現這是一位愛好SM的女性工程師。

MVC(Content Provider, Activity, Layout, Adapters)這個比較基礎,也不算Android特有的。

Content Provider對數據訪問的抽像也是比較有意思的一塊。理想情況下,content provider可以讓客戶端用URI以語義化的方式訪問數據(URI本身即表示數據層次結構和查詢條件),而下面數據庫表的結構可以任意變動,不影響客戶端代碼。當然實做的時候content provider還是會被各種複雜的where子句暴露出SQL的實現細節……

至於Android的權限管理,其實比較簡單,主要是利用現成的Linux安全模型,進程之間相互隔離。API級別的權限管理和JVM類似。

【Billy Cui的回答(7票)】:

Android的權限系統是基於Linux,但又增加了很多自己的控制模塊。

總體上來說,其分為以下幾部分權限系統:

1. userid : 繼承於linux,對於多個app,通過shareuid的方式可以使用同一個userid,主要承擔一些目錄訪問權限之類的工作,比如私有目錄只能由同一uid應用訪問

2. 安裝level:system level or app level,這個是根據應用的安裝位置決定的,在system/app下安裝的應用就是system level,在權限訪問中會得到更多的權限,比如靜默安裝應用的權限等

3. permission : 這個是最主要的權限控制,一般開發者開發應用主要是接觸這個部分,在這部分中,會根據應用在AndroidManifest.xml中聲明的use-permission而在訪問相應api或資源時判斷其是否有訪問權限,比如常用的android.permission.INTERNET等

4. signature: 簽名,是Android權限系統中的重要組成部分,對於系統簽名的應用,會有一些特殊的功能,而shareuid等特性也是需要同一簽名作為基礎。此外,permission在設置/自定義其權限時也經常會使用到簽名,比如控制只有我自己的應用才可以訪問我自己定義的公開api

除此以外,其實Android在uid的裡面設置了一些預定義有特殊功能的uid,比如system/media等,在配置其system level的services的時候會用到。

【董兆輝的回答(1票)】:

有人邀請就來回答一下。

這個問題實在是太大了,就算夠深度的人來回答,也回答不了這個廣度,何況我也沒啥深度,只能隨便說說了,如果問題小一點或許還能多說點。

Android是開源的,不過開源不意味著可以亂來,開源只是告訴你我是怎麼做的,至於為什麼這麼做,就是另外一個問題了。任何一個系統如果沒有權限管理,那不是亂套了麼?我倒是覺得Android的權限管理設計的還不錯,有些地方比iOS好,也較靈活,不過同樣是因為這一點,容易被利用。

說到Android架構的設計思想和原則,按我的理解主要是組件搭配,即在應用人或者用戶開來,所有的module或者組件,都是可以重複利用和簡單組合的。想法是好的,不過有得必有失,或者說android現在做的還不夠好,在性能方面是很低的,否則的話Android也不會推出補丁(NDK之類的,dalvik的不斷升級)。

我覺得所有framework或者平台或者語言都想給應用開發者最方便使用的接口,最人性化的體驗,同時又要爭取最大的性能,兩者權衡折中吧。不過隨著硬件速度的飛速增長,性能的權重會變低。

【范懷宇的回答(1票)】:

Android架設在Linux之上,因此,繼承了Linux可移植性、用戶管理機制、文件系統,等等。

Android的核心在framework層,本質上,這是一個基於組件的應用開發系統,組件間通過消息(Intent)進行通信。一方面,Intent是通信信息的載體,另一方面,Intent也定義了Android組件的通信協議。

Android可以對組件所運行的進程做托管,在Android中,進程概念相當薄弱。依賴於進程托管,Android可以輕鬆支撐多任務多進程的應用模型。

除了組件,資源體系也是Android中比較特色的一塊,它提供了完整的資源支持,可以用來描述一切與UI相關的內容,並實現多設備的適配。

標籤:-Android -rlei -Android-設計思想


相關資源:





給我留言