2014年2月23日 星期日

[Android]ADB指令操作模擬器

首先必須先架好android開發環境,之後可使用命令提示字元進入到Android/platform-tools,利用adb.exe連接模擬器並進行操作,adb功能如下

#ADB 連結工具:
adb devices (顯示目前有多少個模擬器正在執行)
adb shell (Android 模擬器啟動命令列模式)
adb -s <serialNumber> <command> (指定模擬器來操作)(有多台機器的話需要指定端口號)
     -ex:adb -s emulator-5554 install email.apk

# 使用 adb+push 上載檔案到SD記憶卡:
使用push指令需將檔案移到Android\platform-tools資料夾下
adb push <target_file> /<destination_path>/<filename> (<filename>可以隨意取名)       
    -ex:adb push test.apk /sdcard/rename.apk (複製檔案到 /sdcard目錄下,可重新命名)

# 使用 adb+pull 從 SD 記憶卡下載檔案
使用pull指令會將檔案複製到到Android\platform-tools資料夾下,並可重新命名
adb pull /<target_path/filename> <destination_filename> (<destination_filename>可以隨意取名)

# 安裝 APK 應用程式 
adb install <test.apk> (安裝test.apk) 
adb install -r <test.apk> (保留已設定資料,重新安裝filename.apk)
adb -s emulator-5554 (指定安裝 APK 套件在 5554 的 Android 模擬器中)

# 移除 APK 應用程式
adb uninstall <package_name>  (需要知道package的名稱)
adb uninstall -k <package_name> (移除程式時,保留資料) 此package名稱不是安裝APK套裝時的檔名或顯示在模擬器中的應用程式名稱 可以先到/data/data目錄下,查詢想移除的package名稱,指令如下
  1. adb shell ls /data/data (查詢 Package 名稱) 
  2. exit adb 
  3. uninstall package (移除查詢到的 Package)
# 啟動APP程式
利用指令啟動APP需要知道package_name和activity_name
所以需要先用aapt dump APP的資料,指令如下
$aapt dump badging <path-to-apk>
      -ex:aapt dump badging com.google.android.apps.maps-1.apk      
之後會獲得以下資訊
package: name='com.google.android.apps.maps' versionCode='704001112' versionName='7.4.0' sdkVersion:'17' targetSdkVersion:'17' uses-permission:'android.permission.INTERNET' uses-permission:'com.google.android.providers.gsf.permission.READ_GSERVICES' ... launchable-activity: name='com.google.android.maps.MapsActivity'  label='Maps' icon=''

把剛剛的 package_name 還有 launchable-activity 搭配以下指令
# adb shell am start -n <package_name>/<launchable-activity>
      -ex:$ adb shell am start -n com.google.android.apps.maps/com.google.android.maps.MapsActivity
#模擬 Keyevent
基本的使用如下此為模擬按 Home 鍵
# adb shell input <keycode>
    -ex:$ adb shell input 3
keycode 的對應如下表
0 -> "KEYCODE_UNKNOWN"
1 -> "KEYCODE_MENU"
2 -> "KEYCODE_SOFT_RIGHT"
3 -> "KEYCODE_HOME"
4 -> "KEYCODE_BACK"
5 -> "KEYCODE_CALL"
6 -> "KEYCODE_ENDCALL"
7 -> "KEYCODE_0"
8 -> "KEYCODE_1"
9 -> "KEYCODE_2"
10 -> "KEYCODE_3"
11 -> "KEYCODE_4"
12 -> "KEYCODE_5"
13 -> "KEYCODE_6"
14 -> "KEYCODE_7"
15 -> "KEYCODE_8"
16 -> "KEYCODE_9"
17 -> "KEYCODE_STAR"
18 -> "KEYCODE_POUND"
19 -> "KEYCODE_DPAD_UP"
20 -> "KEYCODE_DPAD_DOWN"
21 -> "KEYCODE_DPAD_LEFT"
22 -> "KEYCODE_DPAD_RIGHT"
23 -> "KEYCODE_DPAD_CENTER"
24 -> "KEYCODE_VOLUME_UP"
25 -> "KEYCODE_VOLUME_DOWN"
26 -> "KEYCODE_POWER"
27 -> "KEYCODE_CAMERA"
28 -> "KEYCODE_CLEAR"
29 -> "KEYCODE_A"
30 -> "KEYCODE_B"
31 -> "KEYCODE_C"
32 -> "KEYCODE_D"
33 -> "KEYCODE_E"
34 -> "KEYCODE_F"
35 -> "KEYCODE_G"
36 -> "KEYCODE_H"
37 -> "KEYCODE_I"
38 -> "KEYCODE_J"
39 -> "KEYCODE_K"
40 -> "KEYCODE_L"
41 -> "KEYCODE_M"
42 -> "KEYCODE_N"
43 -> "KEYCODE_O"
44 -> "KEYCODE_P"
45 -> "KEYCODE_Q"
46 -> "KEYCODE_R"
47 -> "KEYCODE_S"
48 -> "KEYCODE_T"
49 -> "KEYCODE_U"
50 -> "KEYCODE_V"
51 -> "KEYCODE_W"
52 -> "KEYCODE_X"
53 -> "KEYCODE_Y"
54 -> "KEYCODE_Z"
55 -> "KEYCODE_COMMA"
56 -> "KEYCODE_PERIOD"
57 -> "KEYCODE_ALT_LEFT"
58 -> "KEYCODE_ALT_RIGHT"
59 -> "KEYCODE_SHIFT_LEFT"
60 -> "KEYCODE_SHIFT_RIGHT"
61 -> "KEYCODE_TAB"
62 -> "KEYCODE_SPACE"
63 -> "KEYCODE_SYM"
64 -> "KEYCODE_EXPLORER"
65 -> "KEYCODE_ENVELOPE"
66 -> "KEYCODE_ENTER"
67 -> "KEYCODE_DEL"
68 -> "KEYCODE_GRAVE"
69 -> "KEYCODE_MINUS"
70 -> "KEYCODE_EQUALS"
71 -> "KEYCODE_LEFT_BRACKET"
72 -> "KEYCODE_RIGHT_BRACKET"
73 -> "KEYCODE_BACKSLASH"
74 -> "KEYCODE_SEMICOLON"
75 -> "KEYCODE_APOSTROPHE"
76 -> "KEYCODE_SLASH"
77 -> "KEYCODE_AT"
78 -> "KEYCODE_NUM"
79 -> "KEYCODE_HEADSETHOOK"
80 -> "KEYCODE_FOCUS"
81 -> "KEYCODE_PLUS"
82 -> "KEYCODE_MENU"
83 -> "KEYCODE_NOTIFICATION"
84 -> "KEYCODE_SEARCH"
85 -> "TAG_LAST_KEYCODE"

如果想要模擬 click 或是 swipe 的手勢
可以使用以下的指令
$ adb shell input tap <x> <y>       # 模擬 click 
$ adb shell input swipe <x1> <y1> <x2> <y2>     # 模擬 swipe
#其他指令
$ls
$dmesg (查看 Android Linux Kernel 運作訊息)
ls - 顯示檔案目錄
cd - 進入目錄
rm - 刪除檔案
mv - 移動檔案
mkdir - 產生目錄
rmdir - 刪除目錄
$adb logcat (監控模擬器運作紀錄,以Ctrl + c 離開監控模式)
$adb bugreport (產生 adb 除錯報告)
$adb get-state (獲得 adb 伺服器運作狀態)
$adb start-server (啟動 adb 伺服器)
$adb kill-server (關掉 adb 伺服器)
$adb forward tcp:6100 tcp:7100 (更改模擬器網路 TCP 通訊埠)
$adb shell ps -x (顯示 Android 上所有正在執行的行程)
$adb version (顯示 adb 版本)
$adb help (顯示 adb 指令參數)

沒有留言:

張貼留言