2012年10月17日 星期三

Android 與 Linux 的執行命令


序:

Android的系統架構在Linux上,是一個Java基礎的作業系統。如同以下的圖示,Google提出的架構可了解。


Android的工作區域是在上方圖的淡藍色(Applications&Application Framework)與深綠色(Android Runtime) 的部分。Java所設計的程式必須利用深綠色的Android Runtime裡的Dalvik虛擬機器來執行,若需要與Linux這層做溝通,由Android Runtime這部份來做國境遷移(Native Code)的技術來做訊息交遞。Linux的工作區域是位於上方架構圖的淡綠色 (Libraries) 與粉紅色 (Linux Kernel)。

這樣的架構可以用在Android系統做參考,但實際的產品會因產品功能不同而有不同的架構物件的增減或是修改。

介紹

Android提供一個工具,稱作ADB. ADB的全名是Android Debug Bridge,就是Android除錯橋樑。在Android的裝置內有ADB的伺服端,以供放置於電腦上的ADB用戶端連線。

Android與Linux中有很多好用的執行命令工具可以用來控制Android系統與取得Android系統訊息。使用這些控制命令有個簡單的方法就是透過ADB來執行。

探索Android JB版本的模擬器裡的資料夾,於/system/bin的資料夾就可找到不少可用的執行命令。可使用adb shell "ls /system/bin"去觀察有多少命令在這個資料夾。

Android系統架構於Linux上,Android本身提供一些一些控制命令。在Linux端,其命令有許多是來自於原來的Linux Kernel。但或多或少為了配合嵌入式的裝置,還是有微幅修改。大多的原生Linux命令用法是相當類似的。因此可以先查詢Android系統中的Linux提供多少命令,對照Linux系統的使用方法,就可以獲得許多的資訊。

範例
am - Activity Manager, Java 語言設計的執行命令,可控制Android的四大元件,原始碼可參考 platform_frameworks_base/blob/master/cmds/am/src/com/android/commands/am/Am.java

monkey - 穩定性的工具,工具執行會不斷發出隨機事件,Java 語言設計的執行命令,原始碼可參考 platform_development/blob/master/cmds/monkey/src/com/android/commands/monkey/Monkey.java

pm - Package Manager 可以對Package做相關的操作,Java 設計的執行命令,原始碼可參考 platform_frameworks_base/blob/master/cmds/pm/src/com/android/commands/pm/Pm.java

dmesg - Linux Debug Message, 輸出Linux相關的訊息,C語言設計的執行命令,,與原生的Linux系統有相同的用法。原始碼可參考 platform_system_core/blob/master/toolbox/dmesg.c

ps - Process State, 輸出程序的id與記憶體使用情形等,C語言設計的執行命令,與原生的Linux系統有相同的用法。原始碼可參考 android/platform_system_core/blob/master/toolbox/ps.c

以上的範例我們可以看到Android系統的控制命令主要有分為Java語言與C語言生成的控制程式。但基於Linux的強大功能,還能執行例如Python與Perl等語言。

Reference
Android Architecture, http://source.android.com/tech/security/
Android Source Code Mirror Site, https://github.com/android/
Package Manager, http://developer.android.com/reference/android/content/pm/PackageManager.html

沒有留言:

張貼留言