注:其中部分內容參考網上資源
1 、 Android 模擬器介紹
Android 中提供了一個模擬器來模擬 ARM 核的移動設備。 Android 的模擬器 是基於 QEMU 開發的, QEMU 是一個有名的開源虛擬機項目(詳見 http://bellard.org/qemu/ ),它可以提供一個虛擬的 ARM 移動設備。 Android 模擬器被命名爲 goldfish ,用來 模擬包括下面一些功能的 ARM SoC:
* ARM926ej-S CPU
* Thumb support
* MMC
* RTC
* Keyboard
* USB Gadget
* Framebuffer
* TTY driver
* NAND FLASH
Android 模擬器所對應的源代碼主要在 external/qemu 目錄下。如果你想將 Android 移植到其 他設備上,熟悉它目前所針對的模擬器環境可以提供一些參考。
對於應用程序的開發者,模擬器 提供了很多開發和測試時的便利。無論在 Windows 下還是 Linux 下, Android 模擬器都可以順利運行,並且 Google 提供了 Eclipse 插件,可將模擬器集成到 Eclipse 的 IDE 環境。當然,你也可以從命令行啓動 Android 模擬器。
這款模擬器功能非常齊全,電話 本、通話等功能都可正常使用(當然你沒辦法真的從這裏打電話)。甚至其內置的瀏覽器和 Google Maps 都可以聯網。用戶可以使用鍵盤輸入,鼠標點擊模擬器按鍵輸入,甚至還可以使用鼠標點擊、拖動屏幕進 行操縱。
當然模擬器畢竟是模擬器,和真 實的機子還是存在差別的,
android 模擬器和真機的不同之處:
*
不支持呼叫和接聽實際來電;但可以通過控制檯模擬電話呼叫
(
呼入和呼出
)
*
不支持
USB
連接
* 不支持相機 / 視頻捕捉
* 不支持音頻輸入 ( 捕捉 ) ;但支持輸出 ( 重放 )
* 不支持擴展耳機
* 不能確定連接狀態
* 不能確定電池電量水平和交流充電狀態
* 不能確定 SD 卡的插入 / 彈出
* 不支持藍牙
2 、創建和啓動 Android 模擬器
要玩 GPhone 的模擬器,當然需要先去 http://developer.android.com/sdk ( 如果打不開就用 http://androidappdocs.appspot.com/sdk/index.html ) 上面下載 Android 的 SDK ,解壓出來後在 SDK 的根目錄下有一個 tools 文件夾,裏面就是模擬器和一些非常有用的工具。( SDK 詳細的安裝過程請參照 http://blog.csdn.net/magicyu2/archive/2009/11/02/4755747.aspx )
要正確的啓動模擬,你必須先要 創建一個 AVD( Android Virtual Device 虛擬設備 ) ,你可以利用 AVD 創建基於不同版本 的模擬器,下面就介紹如何創建 AVD :
(1) 查看當前支持版本 ( 在列出的版本中我們需要記住 id 值,這個值在第 2 步中使用 ) :
magicyu@magicyu-desktop:~$ android list target
你可以看到幾個 Available Android targets ,比如: Name: Android 1.6 ,他們有各自的 id 號。
(2) 創建 AVD :
magicyu@magicyu-desktop:~$ android create avd -n magicyu -t 2
-n 後面接需要創建 avd 的名字, -t 後面接需要創建虛擬器的類型, 2 即爲步驟( 1 )中得到的類型 id 號。
(3) 查看是否創建成功 ( 如果成功會顯示剛纔我們創建的 avd 信息 ) :
magicyu@magicyu-desktop:~$ android list avd
(4) 啓動模擬器:
magicyu@magicyu-desktop:~$ emulator @magicyu 或 者
emulator -avd magicyu
其中 @ 和 -avd 後接的是你創建過的 avd 名字
(5) 選擇啓動的皮膚
magicyu@magicyu-desktop:~$ emulator -avd magicyu -skin QVGA
skin 後面接所要 啓動皮膚的類型,所有的類型可以在 <SDK>/ platforms/android-1.*/skins 目錄下找到, * 爲所指的版本。如在 1.6 版本的 SDK 下有 HVGA , QVGA , WVGA800 , WVGA854 幾種。按 Ctrl+F11 ,可以直接改變模擬器的橫縱擺放。
當然 AVD 也可以在 Eclipse 中創建和啓動。關於 Eclipse+ADT+SDK 的安裝請參見 http://blog.csdn.net/magicyu2/archive/2009/11/02/4755747.aspx 。
運行 Eclipse , Window->Android SDK and AVD Manager ,就能得到如下的界面,選擇新建即可新建一 個 AVD 。
3 、 Android 模擬器的一些工具
( 1 ) adb:
ADB(Android Debug Bridge) 是 Android 提供的一個通用的調試工具,藉助這個工具,我們可以管理設備或手機模擬器的狀態還可以進行以下的操 作:
a 、快速更新設備或 手機模擬器中的代碼,如應用或 Android 系統升級;
b 、在設備上運行 shell 命令;
c 、管理設備或手機 模擬器上的預定端口;
d 、在設備或手機模 擬器上覆制或粘貼文件
一些常用的操作:
進入 Shell: adb shell
通過上面的命令,就可以進入設 備或模擬器的 shell 環境中,在這個 Linux Shell 中,你可以執行各種 Linux 的命令,另外如果只想執行一條 shell 命令,可以採用以下的方式:
adb shell [command]
如: adb shell dmesg 會打印出內核的調試信息。
(Android 的 linux shell 做了大量精簡,很多 linux 常用指令都不支持 )
上傳文件 : adb push <PC 文件 > </tmp/...>
下載文件 : adb pull </tmp/...> <PC 文件 >
安裝程序 : adb install <*.apk>
卸載軟件 : adb shell rm /data/app/<*.apk>
補充一點,通過 adb 安裝的軟件 (*.apk) 都在 "/data/app/" 目錄下,所以安裝時不必制定路徑,卸載只需要簡單的執行 "rm" 就行。
結束 adb: adb kill-server
顯示 android 模擬器狀態 :
adb devices ( 端口信息 )
adb get-product ( 設備型號 )
adb get-serialno ( 序列號 )
等待正在運行的設備 : adb wait-for-device
端口轉發 : adb forward adb forward tcp:5555 tcp:1234
( 將默認端口 TCP 5555 轉發到 1234 端口上 )
查看 bug 報告 : adb bugreport
adb shell sqlite3 訪問數據庫 SQLite3
adb shell logcat -b radio 記錄無線通訊日誌: 一般來說,無線通訊的日誌非常多,在運行時 沒必要去記錄,但我們還是可以通過命令,設置記錄
應用程序配置文件 :
"AndroidManifest.xml" 中
"<category android:name="android.intent.category.LAUNCHER" />"
決定是否應用程序是否顯示在 Panel 上
( 2 ) am 指令 ( 在 shell 內使用 am 來加載 android 應用 ):
am [start|instrument]
am start [-a <ACTION>]
[-d <DATA_URI>]
[-t <MIME_TYPE>]
[-c <CATEGORY> [-c <CATEGORY>] ...]
[-e <EXTRA_KEY> <EXTRA_VALUE> [-e <EXTRA_KEY> <EXTRA_VALUE> ...]
[-n <COMPONENT>] [-D] [<URI>]
am instrument [-e <ARG_NAME> <ARG_VALUE>]
[-p <PROF_FILE>]
[-w] <COMPONENT>
啓動瀏覽器 :
am start -a android.intent.action.VIEW -d http://www.google.cn/
撥打電話 :
am start -a android.intent.action.CALL -d tel:10086
啓動 google map 直接定位到北京 :
am start -a android.intent.action.VIEW geo:0,0?q=beijing
( 3 )爲模擬器加上 SD 卡:
emulator -sdcard <path>/sdcard.img
下面我們再來說說如何創建 "sdcard.img" 文件:
“tools” 目錄 下還有另外一個很好用的工具 mksdcard ,一看名字就知 道 ——make sdcard 。對,就用它來創建一個 “SD 卡 ” 。
命令爲:
mksdcard 1024M D:/sdcard.img
OK, 這樣一個容量 爲 1G 的 SD 卡就創建完畢了。
使用 SDCard:
創建
: mksdcard <1024M> <sdcard.img>
(bytes(default)
,
K
,
M)
連接到模擬器 : emulator -sdcard <path/sdcard.img>
傳文件到 SDCard: adb push < 目錄 /audio.mp3> </sdcard/audio.mp3>
( 4 ) Android 模擬器打電話發短信
GPhone 的模擬 器有個特有的號碼: 15555218135 ,這個就類似我們 實體手機的 SIM 卡號碼啦。要實現撥號,用手機?當 然不行!
更簡單,三步:
1. 打開終端
2. 連接 : telnet localhost 5554 ( 5554 是你打開模擬器後上面顯示的數字)
3. 命令 :gsm call 15555218135
look !是不是模 擬器上顯示來電了?接聽 / 掛斷和實體手機一樣。
發短信也一樣簡單,重複上面 1 , 2 兩步,第三部命令改一下:
sms send 15555218135 Hello,this is a Message.
4 、 Android 模擬器主要命令參數介紹
emulator [-<option> [<value>]] ...
[-<qemu args>]
下面的
表總結了可用的參數
Help
-help 打印模擬 器參數列表。
-help-all 打 印所有啓動參數明細。
-help-<option> 打印指定啓動參數的信息。
-help-debug-tags 打印所有被 -debug <tags> 打開的列表。
-help-disk-images 打印正在使用的磁盤鏡像信息。
-help-environment 打印模擬器環境變量信息。
-help-keys 打 印當前的鍵盤映射。
-help-keyset-file 打印一個自定義的鍵盤映射文件的定義。
Disk Images
-cache <filepath> 使用 <filepath> 指定網絡緩存分區鏡像。
自定義,您可以指定一個當前工作 目錄的相對路徑。如果沒有指定緩存文件,模擬器會指定一個零時文件作爲緩存文件。更多信息請參考 -help-disk-images.
-data <filepath> 使用 <filepath> 作爲用戶數據磁盤鏡像。
自定義,您可以指定一個當前工作 目錄的相對路徑。如果 -data 沒有被使用,模擬器會在 <datadir> 指定的目錄下尋找名叫 "userdata-qemu.img" 的鏡像文件。默認情況下,模擬器會尋找 ~/.android (on Linux/Mac) 或者 C:/Documents and Settings/<user>/Local Settings/Application Data/Android (on Windows) 。
如果您使用了 -data <filepath> ,但是文件並不存在,模 擬器將創建同名文件。
更多信息請參見運行多個模擬器實 例和 -help-disk-images 。
-image <filepath> 使用 <filepath> 作爲系統鏡像。
自定義,您可以指定一個當前工作
目錄的相對路徑。默認爲
<system>/system.img
。
-initdata
<filepath>
重寫用戶數據鏡像時, ( 使用 -wipe-data) ,複製此文件內容到新用戶數據文件鏡像中。默認方式下,模擬器拷貝 <system>/userdata.img 。
自定義,您可以指定一個當前工作 目錄的相對路徑。參見 -wipe-data 。
更多信息請參見 -help-disk-images 。
-kernel <filepath> 使用 <filepath> 作爲模擬器內核。自定義,您可以指定一個當前工作目錄的相對路徑。
-nocache 啓 動模擬器時無緩存分區。參見 -cache <file> 。
-ramdisk <filepath> 使用 <filepath> 作爲虛擬內存鏡像。默認爲 <system>/ramdisk.img. 自定義,您可以指定一個當前工作目錄的相對路徑。更多信息請參見 -help-disk-images 。
-sdcard <filepath> 使用 <file> 作爲 SD 卡鏡像。默認爲 <system>/sdcard.img. 自定義,您可以指定一個當前工作目錄的相對路徑。更多信息請參見 -help-disk-images 。
-system <dirpath> 在指定的 <dir> 下搜索系統、虛擬內存和用戶數據鏡像文件。 <dir> 爲當前路徑的相對目錄。
-wipe-data 重 至用戶數據鏡像文件。 (that is, the file specified by -datadir and -data, or the default file). 模擬器刪除所有用戶數據, 然後複製右 -inidata 參數指定的數據到鏡像文 件,在啓動之前。參見 -initdata. 更多信息請參見 -help-disk-images 。
Debug
-debug <tags> 開啓 / 關閉指定 tag 的調試信息。
<tags> 是一個被空格 / 逗號 / 縱列所分割的調試組建名稱列表。更多信息參見 -help-debug-tags 。
-debug-<tag> 開啓 / 關閉指定 tag 的調試信息。使用 -help-debug-tags 獲得您可以指定爲 <tag> 的調試組件列表。
-debug-no-<tag> 關閉指定 tag 的調試信息。
-logcat <logtags> 打開指定 tag 的日誌輸出。如果環境變量 ANDROID_LOG_TAGS 被指定且不爲空,她的值將成爲日誌輸出的默認值。
-shell 創建一 個擁有 root 權限的命令行窗口。即使模擬器的 UI 界面無法使用了,您依然可以使用命令行窗口。按 Ctr-c 鍵中斷模擬器運行。
-shell-serial <device> 打開具有 root 權限的腳本窗口。 <device> 必須是一個 QEMU 類型的設備。參見 'serial -dev' 在 http://www.bellard.org/qemu/qemu-doc.html#SEC10 上關於設備類型的列表信息。這兒有一些例子:
· -shell-serial stdio is identical to -shell
· -shell-serial tcp::4444,server,nowait 讓您的 shell 可以通過 4444 端口通訊。
· -shell-serial fdpair:3:6 讓模擬器可以使用 3 (in) 和 6(out) 磁碟機。
· -shell-serial fdpair:0:1 uses the normal stdin and stdout fds, except that QEMU won't tty-cook the data.
-show-kernel <name> 顯示內核信息。
-trace <name>Enable code profiling (press F9 to start), written to a specified file.
-verbose 開 啓冗長輸出。 Equivalent to -debug-init. 您可以定義 ANDROID_VERBOSE 環境變量作爲冗長輸出參數。定義你想用到的參數,用逗號分割。這樣可以省略像 -debug-<tags> 這樣的參數。下面是一個設置 ANDROID_VERBOSE 的例子,它帶有 -debug-init 和 -debug-modem 參數:
ANDROID_VERBOSE=init,modem 更多信息參見 <-help-debug-tags>.
Media
-audio <backend>
使用指定的音頻後端。
-audio-in <backend> 使用指定的音頻輸入後端。
-audio-out <backend> 使用指定的音頻輸出後端。
-noaudio 在 當前虛擬機實例中關閉音頻支持。
-radio <device> 重新定向收音機接口到本地的字節設備。
-useaudio 打 開模擬器實例的音頻支持。默認爲打開。
Network
-dns-server <servers> 使用指定的 DNS 服務器。 <servers> 必須是以逗號分割,多於 4 個的服務器名或 IP 地址。
-http-proxy <proxy> 配置 TCP 連接使用 HTTP/HTTPS 代理。
<proxy> 必須符合以下格式: http://<server>:<port >
http://<username>:<password>@<server>:<port > 前綴 http:// 可以被忽略。如果 -http-proxy <proxy> 未被指定,模擬器將尋找 http_proxy 環境變量,並且自動尋找所有符號格式要求的 <proxy> 值。
-netdelay <delay> 設置網絡延遲默認值爲 none 。參見 Network Delay Emulation 中關於 <delay> 的值。
-netfast 快 捷的 -netspeed full -netdelay none
-netspeed <speed> 指定模擬器網絡速度爲 <speed>. 默認值爲 full 。參見表格 Network Speed Emulation 中的 <speed> 值。
-port <port> 指定模擬器網絡端口爲 <port>. 控制檯端口號必須介於 5554 和 5584 之間,並且 <port>+1 必須留作 ADB 使用。
-report-console <socket> 啓動前向第三方同志此模擬器實例的網絡端口。 <socket> 必須是以下幾種格式
tcp:<port>[,server][,max=<seconds>]
unix:<port>[,server][,max=<seconds>]
更多信息參見
-help-report-console
System
-cpu-delay <delay> 降低模擬器 CPU 的速度到 <delay> 。 <delay> 支持 0 到 100 的整數。注意 <delay> 與具體的時鐘或其他的絕對頻率無關。它只表現爲一種抽象的,相對於當前模擬器運行狀況的速度調節。
-gps <device> 重定向 NMEA GPS 到字節設備。
使用此參數通知模擬器模擬一個 NMEA-compatible GPS ,連接到一個擴展的設備或 socket 端口。 <device> 格式必須符合 QEMU-specific 所指定的設備格式。更多信息參見 'serial -dev' 和 http://www.bellard.org/qemu/qemu-doc.html#SEC10 .
-nojni 在 Dalvik 運行時關閉 JNI 檢查
-qemu 傳遞參數 到 qemu 。
-qemu -h 關 閉 qemu 幫助。
-radio <device> 重定向錄音機模塊到制定的字符設備。 <device> 格式必須符合 QEMU 規定的序列設備。詳情參見 http://www.bellard.org/qemu/qemu-doc.html#SEC10 .
-timezone <timezone> 設定模擬器時區爲 <timezone> ,替換爲系統時區。 <timezone> 必須按照時區格式指定。比如: "America/Los_Angeles" , "Europe/Paris"
-version 顯 示模擬器版本號。
UI
-dpi-device <dpi> 修改模擬器的分辨率適配物理設備。默認值爲 165 。參見 -scale.
-no-boot-anim 關閉模擬器啓動時的動畫。禁用啓動動畫可以加快啓動速度。
-no-window 關 閉模擬器的繪製窗口。
-scale <scale> 調整模擬器窗口。 <scale> 是介於 0.1 到 3 的數字,它是調整屏幕的比例因子。您也可以指定一個 DPI 值,在添加 dpi 前綴的情況下。 Auto 參數告訴模擬器選擇自己最合適的尺寸。
-raw-keys 關 閉 Unicode 鍵盤 reverse-mapping.
-noskin 不使 用任何模擬器皮膚。
-keyset <file> 用指定的鍵盤設置文件代替默認。指定宿主鍵盤和模擬器之間的鍵盤映射文件。更多信息參見 -help-keyset 。
-onion <image> 用圖片覆蓋屏幕。不支持 JPEG ,只支持 PNG
-onion-alpha <percent> 指定 onion 皮膚透明值(百分比) 默認爲 50.
-onion-rotation <position> 指定 onion 皮膚旋轉。 <position> 必須是 0, 1, 2, 3 中的一個。
-skin <skinID> 啓動模擬器,搭配指定皮膚。
-skindir <dir> 在指定目錄 <dir> 下搜索皮膚