1. 程式人生 > >Android雙系統之基本問題研究

Android雙系統之基本問題研究

序:近年來Android智慧手機已成為人們生活的一部分,隨著Android手機功能的日益豐富,它正在改變不少行業的辦公模式。尤其是在警察、海關、銀行等行業,移動辦公顯得尤為迫切。如通過手機接入專有網路,進行各正資訊的上傳和下載。這樣在工作和生活中,至少各需一個手機,放兩個手機在身上似乎有點顯得不夠便捷。因此,Android雙系統得以應運而生。

一、雙系統所面臨的問題

上邊提的雙系統,是指在一個手機內,同時執行兩個作業系統,並支援自由切換。對於這兩個作業系統,暫且稱為生活系統和工作系統。這和一個手機內安裝兩種作業系統是有區別的,主要表現在是否快速切換上。

雙系統面臨的問題總體分為硬體和軟體。從硬體上來說,記憶體ram應該足夠大,以同時執行兩個系統。各種外設如螢幕、wifi、藍芽、GPS、Camera、NFC、感測器、usb等只有一個,如何被兩個系統有序使用,都是設計上要重點考慮的。

從軟體上來說,兩個系統完全隔離、核心隔離、框架層隔離或者僅launcher隔離。不同的隔離對應著不同的修改難度,能否達到預期目的,也是未知數。幸好Android是基於Linux核心,許多Linux相關的解決方案和開源軟體,可以借鑑或直接引用過來,完成這一設想。

此外還應關注安全問題,對於一些特殊行業,對安全是極為敏感的,如何讓一個Android系統變得安全,也是要不斷探索與試驗。最後就是使用者感知,不能低於單系統的感知滿意度,比如apk執行流暢性,先機功耗等。

二、可行的解決方案

美國紐約市曼哈頓的哥倫比亞大學(Columbia University)對此進行了長期研究,衡量了軟硬問題和現有技術,得出從Android框架層隔離兩個系統是一個較好的選擇。即共用一個Linux核心,兩個系統分為前臺域和後臺域,同一時刻,只有一個前臺域,並且獨佔每些硬體裝置。


圖1 哥倫比亞雙系統架構

從圖1可以看出,在Linux核心之上,有兩個虛擬Phone:vp1和vp2,這是在使用者空間上存在的兩個Android系統。同時還有一個Root Namesapce,裡面有CellD、NAT、Ril這些是什麼?目前暫時不分析。再看下Kernel,有不少驅動,還包括Android特有的Binder,底下是一個Device Namespace,那這和雙系統有什麼關係?

看了上圖,只能初步瞭解雙系統的架構,對於其如何實現,想必是很複雜的。涉及到核心和眾多模組的改動,如果直通實現上圖的框架,可以推測再加一個vp3應該不會太難。

三、雙系統技術難點

雖然不清楚具體實現細節,但還是可以從圖1梳理下雙系統需要的技術。
  • 雙系統開機啟動
  • Device Namespace
  • CellD
  • vp1\vp2\root如何產生
  • vp1、vp2、root之間的IPC
  • 核心中相關驅動如何適配vp1、vp2
  • vp1、vp2如何切換
  • ...
當然,還要分割槽問題,system、data、cache、boot分割槽如何規劃、日誌如何輸出、adb如何除錯等,想想都頭大,不過如果把這些都理清楚了,應該可以得到一次較大的提升。