2012年12月11日 星期二

知識篇:簡單剖析我所知道的Android系統:

知識篇:
===============================
1.簡單剖析我所知道的Android系統:
-----------------------------------------------------------------------
這裡先講講我們使用的三星Android OS結構
稍有涉獵到電腦作業系統(OS)的人,一定清楚Linux OS是屬於開放程式碼(或稱:開源,Open Sources)
涉及到Android系統之使用者介面(UI:User Interface)的架構時,就要提及以下幾個重要的App
這裡以三星Android系統為例:
- framework-res:放在/system/framework。例如電量顯示、種種的icon圖示之類
- twframework:放在/system/framework。例如下拉式快捷鍵
- TouchWiz30Launcher:放在/system/app。桌面程式
-> 在S3/Note II 則改成:SecLauncher2
- Settings:放在/system/app。設定
-> 在S3/Note II 則改成:SecSettings
- SystemUI:放在/system/app。這是在2.3以後新增的,後來的下拉式快捷鍵就從twframework改到這裡。

至於,4.1.1/4.1.2 for S3/Note II之類,則新增了一些架構上的功能,這有空再來補充。
-----------------------------------------------------------------------
接著,談談Linux/Android OS與大多數人熟悉的Wintel OS,有什麼基本差異
會寫這一段,是有感而發的。首先在Wintel OS的世界裡,你我都是這樣被Microsoft Windows & Intel 架構引領進入電腦、網路的世界,從而有了應對這樣世界的邏輯觀。
- 例如,硬體規格如CPU,GPU,RAM都要足夠,才能享受最新、最絢麗的Windows XX版
-> 如果你無法使用上最新的OS,那肯定是你的硬體規格不夠用:請升級你的電腦硬體(這就是資訊產業成長的驅動所在)
-> 如果你的程式跑起來,會有延遲或者是當機的現象,那就是你的記憶體不夠、或者是你的記憶體沒有清除(在Win7以前都是這樣)導致CPU無法順暢運行:請定時清除你的記憶體,保持記憶體乾淨。但不要將系統記憶體清除掉,那會導致當機。
-> 如果你的OS容易中毒的話,那就是你的使用習慣不好,導致你暴露在駭客的威脅:請安裝目前防毒能力最強的XX防毒軟體!
-> 如果你是使用NB的話,那電池的容量大小、螢幕背光源、待機能力等等,加上最重要的品牌&外型:長時間外出的,不可避免就是要加買大容量備用電池!

諸如此類種種的使用體驗與邏輯,深植在你我的使用習慣中,讓你興高采烈地購入你的第一支Android 手機時,不由得地套用相同的體驗與邏輯,來對待你的新手機
-> 追逐最新版本的OS:不管是Odin/CWM刷機、或是OTA線上升級,還是Kies網路升級,總是要最新的OS,才是最潮的啦!
-> 一定要最快的CPU:多核心> 四核心 > 雙核心 > 單核心,而且還要超頻(OC)+降壓(uV),這樣才是又快又猛!
-> RAM記憶體一定要夠多,而且要隨時保持最多的Free RAM:這樣隨時要叫用最耗RAM的遊戲,才能順暢無比!
-> 觸控螢幕要夠滑順、多點觸控、要絢麗但要夠省電,還要耐撞擊、耐磨:最好還是能防水!至於LCD、AMOLED whatever,都行。
-> 電池更簡單,就是要夠大顆、可以抽換:一天備用電池準備兩、三顆,才是真正portable 達人!

很好!撇開Linux艱深的指令列,以及Linux OS是如何進化至如Android OS之類的友善人機互動介面(UI)之歷史不談。Android OS的運作邏輯,就是與Wintel不一樣!
- OS徹底模組化:
- Kernel(核心):在此核心的指令,基本上都與linux相通,在xda的高手們之所以能發展出較原廠更激進、更多樣化的核心以及相關的功能,也是這樣來的。有空會再詳細解說。
- I/O(Input / Output):舉凡通訊、觸控、磁碟機掛載等等,都是透過這一類的模組化來進行的。有空會再詳細解說。
- ROM:作為存放包括/data,/data/app等在內的區域。以目前三星主流機種,均是規劃為2G的容量。有空會再詳細解說,個別目錄裡的東西。
- 內建SD(/sdcard):也就是扣除ROM區域之後,剩餘容量的儲存空間容量,被系統所定義之路徑。以三星目前機種均是扣除上述2G ROM之後剩餘的空間。
- 外接SD(/sdcard/external_sd/):也就是你自購的外接SD 記憶卡在系統裡的路徑。
- 檔案格式:i9000是rfs格式,而自i9100以後的格式都是採取ext4。有關rfs/ext2/ext4格式之間的差異,以後會在補充說明。


- RAM記憶體管理:Android OS的作法
-> 快取記憶體管理,這是從Android 2.0/2.1開始使用的新方法:dalvik-cache,提高了App載入的速度並節省了系統讀寫所要耗掉的電力,當然也包括了開機速度的提升。
-> 所以OS本身已經具備基礎的記憶體管理,勝過Wintel OS只知道依照最先進、最後退出的stock模式、而且沒有Wintel OS被RAM位址編碼導致有4G上限之類的限制等。
-> 是故,在Android OS的記憶體管理,就是透過Kernel接受指令之方式,依據系統&I/O等狀況動態調整即可順暢地執行記憶體管理。

- Dalvik-cache:
- 你在檢查「正在運行的服務」時,除了會顯示目前在RAM裡的App以外,還可以點選顯示出目前在背景Dalvik-cache裡的App
-> 兩者你都可以個別點選要求該App退出,不過當系統登錄時是允許該App自動載入時,過一會兒該App還是會自動載入的。

- 那RAM記憶體是不是更多更好呢?
-> 要先釐清的一件事,就是RAM的工作是什麼?RAM的工作是提供CPU/GPU運算時所需的buffer(註:運算堆疊的暫存區),以及維持OS所有I/O正常運行所需的buffer。
-> 所以基於系統運行之穩定所需要的RAM空間,是必要而不能任意清除掉的。

- 那RAM記憶體更多,對於大螢幕或高像素的螢幕是不是更好呢?
-> 有關螢幕顯示的掃描速度,影響最大的是繪圖晶片GPU,再來就是CPU處理速度,至於RAM記憶體的工作如前段所說的,是提供CPU/GPU運算時所需的buffer(註:運算堆疊的暫存區),以及維持OS所有I/O正常運行所需的buffer。
-> 所以RAM多一些,是對於OS與App的運行影響較大,對於螢幕處理反而無太大關係。常見會有執行某些App時的顯示lag,則多半是因為CPU/GPU運算負荷(Loading)過重,加上多工(MulitiTask)運算的原因。

- 那系統一開機時,會自動載入的所有App,也會自動佔去RAM的空間嗎?
-> 當然!所以請在安裝完你的所有App後,要使用工具App檢查是否有哪些App是未經你許可就自動要求在開機時載入的,然後取消其自動載入之權限即可。
-> 同樣方法,也適用於檢查哪些App是未經你許可就自動要求上網的,然後取消其自動上網之權限即可。

- 那怎麼判斷哪些可以限制?哪些不能限制?
-> 以下是我的建議:
不能限制自動載入的有
- Email
- Dialer
- Service mode
- SNS
- DRM content
- Settings
- com.sec.android.providers.downloads.CDDownloadReceiver
- Messaging
- Media Storage
- Google Service Framwork -> 這與google服務息息相關,例如Google Map。
- Google Partner Set Up -> 這與google服務息息相關,例如Google Map。
- Gmail-> 這與google服務息息相關,例如通訊錄等等。
- EncryptApp
- Download Manager
- Clock -> 這關掉的話,鬧鐘就不會響了。
- CSC

不能限制自動上網的有
- com.sec.android.providers.downloads.CDDownloadReceiver
- Google Service Framwork -> 這與google服務息息相關,例如Google Map。
- Market Feedback Agent -> 這與google服務息息相關,例如Market下載與更新之類。在後來,Google則將原本的Market改成Google Play,以兼容更多元的雲端內容。
- Gmail
- Download Manager -> 這與google服務息息相關,例如Google Play下載與更新之類。


- RAM記憶體管理:使用工具App來執行記憶體管理,是怎麼回事?
-> 坊間的所謂記憶體管理App,其實沿用的邏輯就是從Wintel OS體驗而來的,基於市場需求所衍生的產品:
-> 但這樣的App,對系統是加分還是減分呢?
-> 如同我前段所說的,Linux/Android OS已經具備了記憶體管理的指令集
-> 而不需要相對更為繁複、更外層的App來呼叫核心,依照該App所設定之名單(List)執行保留或退出名單上的Apps
-> 而這樣的程序可想而知,除了要常駐在系統RAM之外,還要消耗系統資源執行指令。
-> 當然就導致背景App持續會有耗電的情形發生。
(1211)補充說明:坊間一些號稱能「管理系統」的App,其實有些是採用鑽漏洞的程式寫法,會造成系統不穩,不建議安裝此類App。

- Root:根目錄的所在
- 也就是所有檔案與目錄的根源所在,所有資料包括系統程式、你的內建SD或外接SD都是被編列在根目錄之下。
- 取得Root:就是取得Root讀與寫的最高權限在,此你如果獲得讀寫此區域的權限時,是可以增加或刪除包括系統在內的所有檔案,當然也包括電信系統商安裝在你手機裡的「預設App」

- Root權限機制之於病毒活動:
- 簡單的說,在Linux/Android OS,連掌控系統運行的OS,都只在/system目錄裡運行,就算是高超的駭客要透過偽裝的App來盜取你的資料,也只能在/system及/data以及/sdcard裡遊走
而無法取得Root權限,也就是說一旦你得悉某一個App是異常行徑時,只要移除掉該App,就會終止駭客的陰謀。
-> 當然這一切還取決於身為使用者的決定,如果你決定讓某一個App獲得他應有的權限以外的許可時,資料被盜取就是自己要負起的責任了。
-> 所以我對於有異常舉動的App,都是採取斷然移除的手段。

- Root與Superuser.apk:
- 安裝了Superuser.apk,不代表你獲得了Root權限,因為Superuser.apk只是一個管理Root權限的介面程式,而是否允許個別App獲得Root權限,就是回到使用者本身的決定。
-> 而在Wintel OS過去的模式裡,就是賦予administrator最高的權限,等同於Root的權限。但大家安裝Wintel OS時,基於方便的理由,除了安裝程式以外的時間,也常常是使用這樣的權限在活動。
-> 加上Wintel OS允許在根目錄(/,Root)裡,自由增加或刪除目錄與檔案,導致了病毒得以輕易獲得權限進行破壞。
-> 試想,當root區域已經不設防了,那要如何防堵病毒入侵呢?只好安裝即時線上病毒掃描的程式,從所有的I/O活動中,進行Scan。這卻導致系統運行變慢。
-> 因此如你沿襲著Wintel OS的習慣與邏輯,就會想要安裝Android防毒App。但代價就是讓你的Android手機效能大幅度降低。
-------------------------------------------------------------
2.淺談:桌面程式(Launcher)與作業系統(OS)之間的界線:
當許多人仍以為Android OS的強項,就是在硬體規格上強過包括iOS在內的競爭對手時,而誤以為買Android產品就是如同以前的Wintel 方式,直接套用「價格/規格性能」之C/P值,就能買到最划算的Android 產品。其實是錯的。
-> 因為Android ,並非Wintel。
而攸關使用者與Android 裝置之間的UI(User Interface),就扮演了很重要的使用者體驗,這也就是桌面程式(Launcher)的關鍵角色所在。
從2007年起,Android的UI發展從原本陽春的介面、貧乏的功能,一直到現在許多手機廠商百花齊放、功能繁多的榮景,卻也造成了部分手機廠商踰越了UI與OS之間的界線,提供的UI佔用了過多的系統資源,如RAM、CPU、甚至是寶貴的電池續航力。
到底是要耗用多少的系統資源,來成就桌面程式與作業系統之間的平衡,這一直是考驗著站在第一線的手機廠商本事與能耐。以我自己一直以來玩這些ROM的一點粗淺心得來看,這些是深入到UI與OS之間,底層的資源運行設計,是其中功力高下之所在。

而對於使用者而言,其實只要基於工作溫度、電池續航力、UI反應、3G/Wifi上網效能等等,都能輕易地辨別出兼具華麗酷炫介面與優異性能表現的UI,是否能在前述基本要件上,一樣有稱職的表現。

-------------------------------------------------------------

沒有留言:

張貼留言