Ubuntu上使用ADB(Android Debug Bridge)
安裝 adb 工具 (適用於Ubuntu 12.04 LTS及之後的版本)
sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install android-tools-adb
adb connect有時候會無法正常連線,需要adb kill-server再adb connect
停止/啟動與裝置的連線
連線到某個android裝置的ip
沒有執行過start-server這個指令也會自動start-server
中斷連線
遠端安裝app,安裝目錄由系統決定,-f強制
adb install -r local_path_of_your_app.apk是覆蓋安裝,如果你沒有改APP版本號,最好是使用這個指令安裝。
取得系統屬性/設定屬性/觀察屬性變化
列出目前服務/啟動服務/停止服務
開關某個網路裝置
觀察Android事件
送出Android事件
輸入某個建盤/輸入事件
名稱與數值得對應可以參考google
清除資料
切換使用者/確認目前使用者
模擬mediaservice的使用者與權限
adb kill-server
adb start-server
連線到某個android裝置的ip
adb connect 10.129.193.30
中斷連線
adb disconnect 10.129.193.30
如果希望adb會持續等待到裝置上線
adb wait-for-device
顯示目前連線上的裝置
adb devices
List of devices attached
emulator-5554 device
0123456789ABCDEF device
emulator-5556 device
192.168.202.79:7878 device
emulator-5554 device
0123456789ABCDEF device
emulator-5556 device
192.168.202.79:7878 device
開啟遠端adb shell
一般離開shell只要打exit即可;不過若裝置先離線,則adb shell會卡住而無法打指令,這時候要用其他的command line輸入adb kill-server來解除連線狀態
當有多台裝置連線時可以用-s來指定裝置
adb shell
adb -s 123456789123 shell
如果是用adb connect到某個IP的裝置,會需要用adb devices確認裝置名稱,這時候-s用的名稱應該是IP:5555。如果只想執行某個指令就結束adb shell,可以用adb -d來完成
如果是用adb connect到某個IP的裝置,會需要用adb devices確認裝置名稱,這時候-s用的名稱應該是IP:5555。如果只想執行某個指令就結束adb shell,可以用adb -d來完成
例如: adb -d shell cat /proc/cpuinfo
一般adb shell指令
一般adb shell指令
printenv
ps, e.g. ps
top, e.g. top -m 5
renice
rm
rmdir
rmmod
route
sleep, e.g. sleep
sync
cp
du
grep
md5
touch
vmstat
uptime
mount
umount
alias
bg
fg
cd
eval
export
getopts
hash
jobid
pwd
read, read a variable from the command line.
readonly, set an environment variable as read-only.
set
setvar
unset
type
shift
umask
unalias
wait
啟用/停用app
pm enable your.package.name
pm disable your.package.name
列出有哪些app已裝
pm list package
會顯示安裝路徑跟package name
執行某個已啟用的app
am start -n your.package.name/your.main.activity
開啟Android設定頁
am start -a android.settings.SETTINGS
用android內建的播放器開啟指定影音檔案
am start -n com.android.gallery3d/com.android.gallery3d.app.MovieActivity -d "/sdcard/Movies/test.ts"
有些裝置會限制mediaplayer
廣播訊息
am broadcast -a com.acme.coyotebirdmonitor.FAST_BIRD
am broadcast com.android.server.NetworkTimeUpdateService.action.POLL # ntp time update
adb install local_path_of_your_app.apk
如果安裝遭遇signature錯誤會需要先移除已經安裝的APP
如果想保留app資料,要加上-k選項
有些版子需要先adb root才能remount,不過Android機器上要有su指令才能用adb root
把裝置上目前所有的log抓下來存到檔案
錄製一段裝置上的log並輸出至檔案,可以用 -v 指定輸出格式(常用的格式有time、threadtime)
參考資料:
重新開機/重開到recovery/bootloader
adb uninstall {pacakage name}
通常裝置預設都會是read-only,可以直接用這個重掛載成可以寫入的狀態
adb remount
adb root
adb remount
如果adb root無效表示可能要用console,並依照mount的狀態使用mount指令重掛root和/system
例如:
推入app
adb push loca_yourapp.apk /system/app/remote_yourapp.apk
拉出app
adb pull /system/app/remote_yourapp.apk
loca_yourapp.apk
在裝置上執行指令dmseg並將輸出存到檔案
adb shell dmesg > dmesg.txt
清空log
adb logcat -c
adb logcat -d -v time > logcat.txt
-d是log輸出完畢就結束
如果想要自動命名log檔可以用下面這個指令
adb logcat -d -v time > logcat$(date +%Y-%m-%d_%T).txt錄製一段裝置上的log並輸出至檔案,可以用 -v 指定輸出格式(常用的格式有time、threadtime)
adb logcat -v threadtime > logcat.txt
由於沒有用-d選項,所以上述指令需要使用Ctrl+c 中斷
other option format:
"adb logcat -v brief" - Display priority/tag and the PID of process issuing the message (the default format).
"adb logcat -v process" - Display PID only.
"adb logcat -v tag" - Display the priority/tag only.
"adb logcat -v raw" - Display the raw log message, with no other metadata fields.
"adb logcat -v time" - Display the date, invocation time, priority/tag, and PID of the process issuing the message.
"adb logcat -v thread" - Display the priority, tag, and the PID and TID of the thread issuing the message.
"adb logcat -v threadtime" - Display the date, invocation time, priority, tag, and the PID and TID of the thread issuing the message.
"adb logcat -v long" - Display all metadata fields and separate messages with a blank lines.
adb reboot
adb reboot recovery
adb reboot bootloader
getprop
setprop
watchprops
service list
start {service name}, e.g. start media
stop
{service name}, e.g. stop medianetcfg [ {dhcp|up|down}]
getevent
sendevent /dev/input/event0 1 330 1
adb shell input keyevent 1
adb shell input keyevent KEYCODE_8
adb shell input text "http://www.google.com.tw"
重複發出info key
while [ 1==1 ]
do
input keyevent KEYCODE_INFO
sleep 3
done
wipe
su {user name} # 不輸入user name表示root
id #確認目前的使用者,不建議看shell的$和#來分辨
exit #離開使用者
模擬mediaservice的使用者與權限
su {user mame},{group name 1},{group name 2},...,{group name N}
如果猜測有權限不足的問題,可以用這個方式做測試
列出可dump的系統服務/記憶體資訊/硬碟資訊/APP intent資訊與權限
程式Crash的core dump資料
dumpsys
dumpsys meminfo
dumpsys diskstats
dumpsys package
程式Crash的core dump資料
cat /data/tombstones/tombstone_**
留言