2013年3月18日 星期一

[Android] Android Developer App Components Note 1

接下來應該會有一段時間是讀Android Developer。
我會一邊讀一邊整理,加上打字和複製貼上當然遠遠比起用筆寫快,
所以這樣也比較方便XD。

主軸會以API Guides的內容為準,
每天讀多少就打多少,我會把自己認為的重點特別標起來。

Topic 1. App Fundamentals
1. Application Fundamentals
Android是以Java為基礎,所使用的SDK Tools可以將app包起來成為一個.apk檔,
一旦被安裝到裝置上以後,每一個Android app都"住在"自己的沙盒(security sandbox)裡。
特性:
    a. Android系統是多使用者的Linux系統且每個app被視為是不同的使用者
    b. 預設而言系統會指派給每個app一個獨特的(unique)Linux user ID,
    (且app自己是無從得知ID的,哪個user是什麼ID,只有系統自己知道)
    系統會為該ID設定所有這個app含的檔案的權限(permission),
    所以app可以存取這些檔案。
    c. 每個程序(process)自己擁有自己的VM(virtual machine),
    所以一個app的code會在孤立於其他app的狀況下跑
    d. 預設來說,每個app是在自己擁有的Linux程序下跑的。
    Android會開始process當任何app內的組成需要被執行,
    然後會關掉他們: 當狀況變成不再被需要使用,或者
    當系統必須要從其他的app身上拿回記憶體的時候。

在這種狀況下,
Android系統是使用最起碼的優先權(the principle of least privilege)的方式。
也就是說所有的app預設就是存取基本所需的組件(component)來工作並且不要求更多(XD)
這使單支app若未被授權,就不能存取部分的系統,令整個環境非常安全。
(這個嘛......但是審核又不嚴謹很多app權限都亂開阿,哪知道哪個有問題XD)

不過,還是有方法可以讓一支app可以和別的apps分享程式,
以及讓app能存取系統服務:
    a. 是有辦法可以讓兩個app共用同個Linux user ID
      這樣他們就可以互相存取對方的資料。為了保存系統資源,
      同user ID的apps也可以安排在同程序跑且共用同個VM
      (但apps也要被簽署相同的認證)
    b. 一支app可以去要求授權存取裝置的資料,
      比如通訊錄、SMS、SD Card、相機、藍芽及其他等等。
      所有的app的授權必須在使用者安裝時讓使用者允許。
     (也就是大家在載app的時候會出現的那個同意......
      仔細看吧,很多app其實要的權限很詭異的......)

上面大概概述了一個Android app是以什麼樣的狀況存在在系統。
接下來的部分會介紹:
    a. 一個app的核心的架構
    b. 記載著對於app所定義的組件以及所需的裝置特性(device features)的manifest檔案
    c. 資源如何和程式碼分開,由此能優雅地(XDDDDDD)對於多種不同的裝置設定,
        來做到最佳化的行為。


沒有留言:

張貼留言