原文鏈接?
玩轉Android adb命令(adb降級)
1.adb簡介
adb具有安裝卸載apk、拷貝推送檔案、查看設備硬體資訊、查看應用程式占用資源、在設備執行shell命令等功能,

在Android SDK安裝目錄的platform-tools目錄下找到adb工具,

adb在某種程度上有很大權限的,因為adb的設計初衷是為了方便開發人員除錯,因此必然需要暴露一些權限以外的介面,利用這個特性可以繞開權限機制在非Root非定制機上做一些操作,
2.adb架構
adb是一個C/S架構的應用程式,由三部分組成
(1).運行在pc端的adb client
命令列程式”adb”用于從shell或腳本中運行adb命令,首先,“adb”程式嘗試定位主機上的adb服務器,如果找不到adb服務器,“adb”程式自動啟動一個adb服務器,接下來,當設備的adbd和pc端的adb server建立連接后,adb client就可以向adb servcer發送服務請求;
(2).運行在pc端的adb server
adb Server是運行在主機上的一個后臺行程,它的作用在于檢測USB埠感知設備的連接和拔除,以及模擬器實體的啟動或停止,adb Server還需要將adb client的請求通過usb或者tcp的方式發送到對應的adbd上;
(3)運行在設備端的常駐行程adb demon(adbd)
程式“adbd”作為一個后臺行程在Android設備或模擬器系統中運行,它的作用是連接adb服務器,并且為運行在主機上的客戶端提供一些服務;
3.adb埠被占用
5037為adb默認埠,若5037埠被占用的解決方法
(1).找到使用該埠的行程pid
netstat -aon|findstr 5037
(2).通過pid找到對應的行程名(便于定位,可以跳過)
tasklist /fi "pid eq 5162"
(3).使用命令終止該命令的運行
taskkill /pid 5162 /f
4.基本用法
為命令指定目標設備
如果有多個設備/模擬器連接,則需要為命令指定目標設備

adb devicesadb -s 10.92.164.26:5555 install test.apk
啟動adb server命令
adb start-server
停止adb server命令
adb kill-server
查看adb版本
adb version
以root權限運行adbd
adb的運行原理是PC端的adb server與手機端的守護行程adbd建立連接,然后PC端的adb client通過adb server轉發命令,adbd接收命令后決議運行,
如果adbd以普通權限執行,有些需要root權限才能執行的命令無法直接用adb xxx執行,這時可以adb shell然后su后執行命令,也可以讓adbd以root權限執行,就能隨意執行高權限命令,
adb root
有些手機root后也無法通過adb root命令讓adbd以root權限執行
adbd cannot run as root in production builds
先安裝
adbd Insecure
然后
adb root
指定adb server的網路埠
adb -P <port> start-server
讓設備在5555埠監聽TCP/IP連接
adb tcpip 5555
通過IP地址連接設備
adb connect <device-ip-address>
斷開無線連接
adb disconnect <device-ip-address>
無線連接(無需借助USB線)
需要root權限
susetprop service.adb.tcp.port 5555
找到Android設備的IP地址
restart adbdstop adbdstart adbd
5.應用管理
查看應用串列
adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]
在adb shell pm list packages的基礎上可以加一些引數進行過濾查看不同的串列,支持的過濾引數,如下所示:

所有應用
adb shell pm list packages
系統應用
adb shell pm list packages -s
第三方應用
adb shell pm list packages -3
安裝apk
adb install [-lrtsdg] <path_to_apk>
adb install后面可以跟一些可選引數來控制安裝apk的行為,可用引數及含義,如下所示:




常見安裝失敗輸出代碼、含義及可能的解決辦法,如下所示:




卸載應用
adb uninstall [-k] <packagename>
清除應用資料與快取
adb shell pm clear <packagename>
查看前臺Activity
adb shell dumpsys activity activities | grep mFocusedActivity
查看正在運行的Services
adb shell dumpsys activity services [<packagename>]
查看應用詳細資訊
adb shell dumpsys package <packagename>
6.與應用互動
主要是使用am <command>命令,常用的<command>

<INTENT>引數很靈活,和寫Android程式時代碼里的Intent相對應,
用于決定intent物件的選項如下:

<INTENT>里還能帶資料,就像寫代碼時的Bundle一樣

調起Activity
adb shell am start [options] <INTENT>adb shell am start -n com.tx.mm/.ui.LauncherUIadb shell am start -n org.mazhuang.boottimemeasure/.MainActivity --es "toast" "hello, world"
調起Service???????
adb shell am startservice [options] <INTENT>adb shell am startservice -n com.tx.mm/.plugin.accountsync.model.AccountAuthenticatorService
發送廣播???????
adb shell am broadcast -a android.intent.action.BOOT_COMPLETEDadb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n org.mazhuang.boottimemeasure/.BootCompletedReceiver


強制停止應用???????
adb shell am force-stop <packagename>adb shell am force-stop com.tx.mobilesafe
禁用應用和啟動???????
adb shell pm disable-user <packagename>adb shell pm disable <packagename>adb shell pm enable <packagename>
撤消應用程式的權限
(1).向應用授予權限,只能授予應用程式宣告的可選權限???????
adb shell pm grant <packagename> <PACKAGE_PERMISSION>adb -d shell pm grant packageName android.permission.BATTERY_STATS
(2).取消應用授權
adb shell pm revoke <packagename> <PACKAGE_PERMISSION>
選項--user user_id要禁用的用戶
滑動解鎖
adb shell input swipe 300 1000 300 500
7.查看日志
Android系統的日志分為兩部分,底層的Linux內核日志輸出到/proc/kmsg,Android的日志輸出到/dev/log,

按tag和級別過濾日志???????
adb logcat ActivityManager:I MyApp:D *:Sadb logcat -v long ActivityManager:I *:S
清空日志
adb logcat -c
內核日志
adb shell dmesg
8.查看設備資訊
型號
adb shell getprop ro.product.model
電池狀況
adb shell dumpsys battery
螢屏解析度
adb shell wm size
螢屏密度
adb shell wm density
顯示屏引數
adb shell dumpsys window displays
android_id
adb shell settings get secure android_id
IMEI
adb shell dumpsys iphonesubinfo
Android系統版本
adb shell getprop ro.build.version.release
IP地址
adb shell ifconfig "| grep Mask"
Mac地址
adb shell cat /sys/class/net/wlan0/address
CPU資訊
adb shell cat /proc/cpuinfo
記憶體資訊
adb shell cat /proc/meminfo
更多硬體與系統屬性
adb shell cat /system/build.prop
可通過adb shell getprop <屬性名>命令單獨查看

adb shell cat /system/build.prop | grep ro.product.cpu.abi
修改設定
修改設定之后,運行恢復命令有可能顯示仍然不太正常,可以運行adb reboot重啟設備,或手動重啟,
修改設定的原理主要是通過settings命令修改如下路徑里存放的設定值
/data/data/com.android.providers.settings/databases/settings.db
關閉USB除錯模式
adb shell settings put global adb_enabled 0
狀態欄和導航欄的顯示隱藏
adb shell settings put global policy_control <key-values>

表示設定在所有界面下都同時隱藏狀態欄和導航欄
adb shell settings put global policy_control immersive.full=*
表示設定在包名為com.package1和com.package2的應用里隱藏狀態欄,在除了包名為com.package3的所有應用里隱藏導航欄
adb shell settings put global policy_control immersive.status=com.package1,com.package2:immersive.navigation=apps,-com.package3
恢復正常模式
adb shell settings put global policy_control null
螢屏截圖
adb shell screencap -p /sdcard/sc.png
Linux和Windows
adb shell screencap -p | sed "s/\r$//" > sc.png
Mac OS X
adb shell screencap -p | gsed "s/\r$//" > sc.png
錄制螢屏
adb shell screenrecord /sdcard/filename.mp4
重新掛載system磁區為可寫???????
adb shellsumount
重新掛載
mount -o remount,rw -t yaffs2 /dev/block/platform/msm_sdcc.1/by-name/system /system
查看連接過的WiFi密碼???????
adb shellsucat /data/misc/wifi/*.conf
重啟手機
adb reboot
檢測設備是否已root???????
adb shellsu
使用Monkey進行壓力測驗
adb shell monkey -p <packagename> -v 500
開啟WiFi???????
adb rootadb shell svc wifi enable
關閉WiFi???????
adb rootadb shell svc wifi disable
設定wifi優先,有網路和wifi情況下優先使用wifi
adb shell svc wifi prefer
開啟/關閉資料流量???????
svc data disableadb shell svc data enableadb shell svc data prefer
9.刷機相關命令
重啟到Recovery模式
adb reboot recovery
從Recovery重啟到Android
adb reboot
重啟到Fastboot模式
adb reboot bootloader
查看行程
adb shell ps

查看實時資源占用情況
adb shell top

查看行程UID
adb shell dumpsys package <packagename> | grep userId=

10.安全相關
啟用SELinux???????
adb rootadb shell setenforce 1
禁用SELinux???????
adb rootadb shell setenforce 0
啟用dm_verity???????
adb rootadb enable-verity
禁用dm_verity???????
adb rootadb disable-verity
11.常見問題
啟動adb server失敗
adb server行程想使用的5037埠被占用???????
netstat -ano | findstr LISTENINGtaskkill /PID 12418
重啟adb
推薦文章
Android系統run-as命令原理(權限訪問)
Android系統中run-as和su命令的原始碼決議(升降權限)

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/352257.html
標籤:其他
上一篇:反編譯獲取apk安裝包源代碼步驟
