2008年10月20日 星期一

Android 內部的祕密 - 系統目錄

Android Internal - system directories

您應該已經知道,Android 的核心作業系統是 Linux (現在用的版本是 2.6.25)。因此內部的檔案系統,與系統目錄等,也和 Linux 脫不了關係。要如何觀察這些系統目錄,到底藏了什麼秘密呢?

在 Eclipse 環境中,你可以用 DDMS 來觀察。不過這個 DDMS 在我的電腦上的執行速度,實在太慢了。我個人的偏好是,直接用 adb shell 來觀察。啟動 adb shell 的用法如下:

1. 在 Windows 中,開啟一個命令列視窗 (或執行 cmd.exe 這個程式)
2. cd <android-sdk-install_path>/tools
3. adb shell

當你看到這個 # 提示字元時,就表示你已經進入模擬器的系統。接下來,你就可以用 Linux 上的指令來瀏覽這些目錄。像是 cd, ls, pwd, cat, rm 等等。

這裡面,有幾個目錄是和 Android 相關的,我特地將他整理下來,供你參考。

/system/app

預載入應用程式執行檔 (*.apk),都是放在這。像是 Alarm Clock, Browser, Contacts, Maps,... 等等。

用 DDMS 觀察的話,目錄內的內容,就像下面這樣:

/system/framework

這會放 Android 系統的核心程式庫。像是 core.jar, framework-res.apk, com.google.android.gtalkservice.jar,...等等。疑,1.0r1 不是已經將 gtalk 等相關 APIs 移除了嗎?怎麼他的程式庫還在?雖然許多程式庫都是以 jar 結尾的,不過裡面 Java classes 還是以 dex 格式存在著。

/system/media/audio/(notification, alarms, ringtones, ui)

這裡放系統的聲音檔,像是鬧鈴聲,來電鈴聲等等。這些聲音檔,多是 ogg 格式。

/data/anr/traces.txt

當你的應用程式發生 ANR (Application is Not Responding) 錯誤時,Android 會自動將問題點的 code stack list 寫在這個檔案內,你直接用 cat 命令就可以看他的內容。

/data/app

/system/app 放的是系統預載的應用程式執行檔。而這裡放的是使用者自己安裝的應用程式執行檔 (*.apk)。

/data/data/<app-package-name>

當你在程式中用 Context.openFileOutput() 所建立的檔案,都放在這個目錄下的 files 子目錄內。而用 Context.getSharedPreferences() 所建立的 preferences 檔 (*.xml) ,則是放在 shared_pref 這個子目錄中。

/data/location/gps

這裡看起來,應該是給 GPS location provider 用的。其中的 properties 檔案的內容如下:

requiresNetwork false
requiresSatellite false
requiresCell false
hasMonetaryCost false
supportsAltitude true
supportsBearing true
supportsSpeed true
repeat true
accuracy 100
powerRequirement 1

沒猜錯的話,這應該是用來描述 GPS location provider 有那些功能的。

/data/system/location/location.gps

這個檔案也是個一般文字檔。主要是記錄最後的經緯度座標。LocationManager.getLastKnownLocation() 就在來這抓值的。

/data/property/persist.sys.timezone

這個檔案也是個一般文字檔。主要是記錄目前系統所使用的時區。在我的模擬器上,他記錄著 Asia/Taipei 這個字串。

最後,下面這兩個指令,也很好用。他可以幫你將外部檔案,複製到模擬器的系統檔案目錄內,也可以將模擬器內的檔案,複製到外部系統上。

adb push <local> <remote> - copy file/dir to device
adb pull <remote> <local> - copy file/dir from device

2 則留言:

張貼留言