⑴ 常用的adb命令
在平時的工作中,會經常用到adb命令,在這里稍微整理了一下。
一.概要
1.什麼是adb?
adb全稱為android Debug Bridge,就是起到調試橋的作用。顧名思義,adb就是一個debug工具。
2.adb工作原理
不是很理解?那就來看看它的工作原理吧。
上圖是一個簡單的adb工作原理圖。adb客戶端伺服器端程序,由上圖可以看出它主要三個組件組成:Client,Server,Daemon。
(1)當你啟動一個adb Client(客戶端),Client首先會選確認是否已有一個adb
Server(伺服器)進程在運行,如果沒有,則會啟動Server進程。此時,adb Server就會綁定本地的TCP埠5037,並監聽adb
Client發來的命令。
(2)接著,Server將會掃描所有5555到5585范圍內的奇數埠來定位所有的模擬器或設備,並與之建立連接。一旦Server找到
了adb
daemon(守護程序),它將建立一個到該埠的連接,這樣,我們就可以使用adb命令控制和訪問模擬器或設備了。在這里,需注意的是任何模擬器或設備實例會取得兩個連續的埠:一個偶數埠用來相應控制台的連接,和一個奇數埠用來響應adb連接。
3.adb的作用
藉助adb工具,我們可以管理設備或手機模擬器的狀態,還可以進行很多手機操作,如安裝軟體、系統升級、運行shell命令等等。簡而言之,adb就是連接Android手機和PC端的橋梁,可以讓用戶在電腦上對手機進行全面的操作。
二.常用命令
這個部分主要介紹adb的使用方法和一些常用的命令。
設置adb環境:將android sdk工作目錄添加到系統環境變數中,則可使用adb命令了。
1. adb devices
查看當前連接的設備(連接計算機的Android設備或者模擬器)。
2.adb install
adb install <apk文件路徑>,將指定的apk安裝到設備上,安裝的apk包會放在/data/app目錄下。
幾個參數:
-r 強制安裝
-d(真機,多個設備中只有一個真機時適用)
-e(模擬器,多個設備中只有一個模擬器時適用)
-s(指定設備,後接序列號)
adb –s 44a188f9 install –r test.apk(其中44a188f9即序列號,通過adb devices可獲取)
3.adb uninstall
adb uninstall <apk包名>
adb uninstall –k <apk包名>
-k參數為卸載軟體時保留配置和緩存文件
4.adb reboot
重啟android設備
5.adb shell
通過adb shell 命令,就可以進入設備或者模擬器的shell環境了,在這個linux shell中,我們就可以執行各種Linux命令了。
如果只想執行一條shell命令,就可以採用:adb shell [shell_command]
在實際使用中,經常與grep或findstr一起使用,起到過濾作用,查看自己需要的關鍵信息。
6.adb shell su
前提手機已經root。獲取adb shell的root許可權。
使用su提權,用戶命令提示符有$變成#,如果手機沒有root,會提示su:permission denied。
7.adb shell ps/top
查看當前終端中的進程信息,如pid等。
8.adb shell am/pm
am全稱為activity manager,可使用am命令模擬各種系統的行為,如去啟動一個activity,強制停止進程,發送廣播進程,修改設備屏幕屬性等。
如:adb shell am start <apk包名>/<activityName>:啟動一個activity。
pm全稱為package manager,利用pm命令可模擬android行為或查詢設備上的應用等。
如:adb shell pm list packages
列出當前設備所有已安裝的程序的包名。
說明:
管道符「|」:可以把標準的輸入流與標準的輸出流進行合並,或者把某個命令的標准輸出流作為另一個命令的標准輸入流。
exit退出shell。
由於grep為linux命令,運行單條adb shell 時並沒有進入linux
shell環境,並不能用grep等其他linux命令,只能用window cmd的命令。在這里可以用findstr來代替grep,使用方法為
findstr/grep [keyword]
更詳細的內容可查看 參考文獻3 和 參考文獻4 。
對於常用的linux命令和常用的windows 控制台命令,以後再作總結。
9.adb pull 和 adb push
adb pull <設備中的文件路徑> <本地路徑>:從模擬器或設備中復制文件到本地。
adb push <本地文件路徑> <設備中的路徑>:將本地文件或目錄復制到模擬器或設備。
這里還涉及到一個許可權的問題,在後續的博文中再作介紹。
10.adb shell mpsys
Android提供的mpsys工具用於查看感興趣的系統服務信息與狀態。
參考下表:
11.adb shell monkey
跑monkey是android自動化測試的一種手段,所謂monkey測試就是模擬用戶的按鍵輸入,觸摸屏輸入,手勢輸入等。當Monkey程序在模擬器或設備運行的時候,如果用戶比如點擊,觸摸,手勢或一些系統級別的事件的時候,它就會產生隨機脈沖,所以可以用Monkey的隨機重復的方法對apk作壓力測試,來測試android
app的穩定性。
如下為測試騰訊新聞apk的一個簡單實例:
說明:第一個-s指定設備,如果只連接了一台設備,可不用該參數。
-p <apk包名>只允許系統啟動指定的app,如果不指定,將允許系統啟動設備中的所有app,也可指定多個包。
--throttle <毫秒數> 指定用戶操作(事件)間的時延。
--ignore-crashes 指定當應用程序崩潰時,Monkey依然發送事件,直到事件計數完成。
--ignore-timeouts 當應用程序發生ANR錯誤時,Monkey依然會發送事件,直到事件計數完成。
第2個-s,用於指定偽隨機數生成器的seed值,如果seed相同,則兩次Monkey測試所產生的事件序列也相同的。
-v 用於指定反饋信息級別,總共分為level 0、level 1、level 2三個級別,級別越高,輸出的日誌越詳細。
最後的數字(這里是500):表示Monkey程序模擬500次隨機用戶操作事件。
>輸出測試結果到D:\monkeylog.txt
更詳細的參數可查看 參考文獻5 。
部分測試結果如下:
對於測試結果的分析,通過搜索關鍵詞來定位錯誤,主要包括以下四個方面:
1)ANR(Application Not
Response):程序無響應,一般主線程超過5秒沒處理就會出現ANR錯誤。通過搜索ANR關鍵詞來定位關鍵的事件信息。除了導出日誌外,還可以將/data/anr/目錄下的trace.txt文件導出,用來定位分析問題。使用>adb
pull /data/anr/trace.txt d:\ 將trace.txt文件導出到d盤。
2)ForceClosed或其他異常退出信息:通過搜索Fatal關鍵詞來定位。
3)崩潰問題:通過搜索Exception關鍵詞來定位。
4)發生異常後,通過搜索Crash關鍵詞來定位到詳細的堆棧信息。
12.kill
kill用來中止一個進程。
比如我們在跑monkey的時候,怎麼強制關閉monkey呢,可以用kill <monkey進程PID>
說明:另開啟一個cmd,找到monkey的pid號,然後殺掉即可。
參考文獻:
1.Android調試橋: http://www.iteye.com/topic/260042
2.Android性能分析工具mpsys的使用: http://www.open-open.com/lib/view/open1405061994872.html
3.adb shell 中的am pm命令: http://www.android100.org/html/201312/09/4957.html
4.adb shell 啟動應用程序的方法: http://blog.chinaunix.net/uid-26997997-id-3350449.html
5.Monkey壓力測試詳解: http://blog.csdn.net/huangbiao86/article/details/8490743
⑵ 常用的adb命令
Android Debug Bridge,我們一般簡稱為adb,主要存放在sdk安裝目錄下的platform-tools文件夾中,它是一個非常強大的命令行工具,通過這個工具你能夠與你的android設備進行交互,被稱為Android 調試橋。
它是一種客戶端-伺服器程序,包括以下三個組件:
adb shell 命令
adb shell 則是調用的 Android 系統中的命令,這些 Android 特有的命令都放在了 Android 設備的 system/bin 目錄下
monkey命令
當您啟動某個 adb 客戶端時,該客戶端會先檢查是否有 adb 伺服器進程正在運行。如果沒有,它會啟動伺服器進程。伺服器在啟動後會與本地 TCP 埠 5037 綁定,並監聽 adb 客戶端發出的命令 - 所有 adb 客戶端均通過埠 5037 與 adb 伺服器通信。
然後,伺服器會與所有正在運行的設備建立連接。它通過掃描 5555 到 5585 之間(該范圍供前 16 個模擬器使用)的奇數號埠查找模擬器。伺服器一旦發現 adb 守護程序 (adbd),便會與相應的埠建立連接。請注意,每個模擬器都使用一對按順序排列的埠 - 用於控制台連接的偶數號埠和用於 adb 連接的奇數號埠。例如:
模擬器 1,控制台:5554
模擬器 1,adb:5555
模擬器 2,控制台:5556
模擬器 2,adb:5557
依此類推
如上所示,在埠 5555 處與 adb 連接的模擬器與控制台監聽埠為 5554 的模擬器是同一個。
伺服器與所有設備均建立連接後,您便可以使用 adb 命令訪問這些設備。由於伺服器管理與設備的連接,並處理來自多個 adb 客戶端的命令,因此您可以從任意客戶端(或從某個腳本)控制任意設備。
要在通過 USB 連接的設備上使用 adb,您必須在設備的系統設置中啟用 USB 調試 (位於 開發者選項 下)。
在搭載 Android 4.2 及更高版本的設備上,「開發者選項」屏幕默認情況下處於隱藏狀態。如需將其顯示出來,請依次轉到 設置 > 關於手機 ,然後點按 版本號 七次。返回上一屏幕,在底部可以找到 開發者選項 。
在某些設備上,「開發者選項」屏幕所在的位置或名稱可能有所不同。
執行 adb devices 驗證設備是否已連接。如果已連接,您將看到設備名稱以「設備」形式列出。
一般情況下,adb 通過 USB 與設備進行通信,但您也可以在通過 USB 完成一些初始設置後,通過 WLAN 使用 adb,如下所述。
如果 adb 連接斷開:
如果有多個設備在運行,您在發出 adb 命令時必須指定目標設備。為此,請使用 devices 命令獲取目標設備的序列號。獲得序列號後,請結合使用 -s 選項與 adb 命令來指定序列號。如果您要發出很多 adb 命令,可以將 $ANDROID_SERIAL 環境變數設為包含序列號。如果您同時使用 -s 和 $ANDROID_SERIAL , -s 會替換 $ANDROID_SERIAL 。
$ adb -s emulator-5555 install helloWorld.apk
注意 :如果您在多個設備可用時發出命令但未指定目標設備,adb 會生成錯誤。
如果有多個可用設備,但只有一個是模擬器,請使用 -e 選項將命令發送至該模擬器。同樣,如果有多個設備,但只連接了一個硬體設備,請使用 -d 選項將命令發送至該硬體設備。
使用 forward 命令設置任意埠轉發,將特定主機埠上的請求轉發到設備上的其他埠。以下示例設置了主機埠 6100 到設備埠 7100 的轉發:
>adb forward tcp:6100 tcp:7100
您可以使用 pull 和 push 命令將文件復制到設備或從設備復制文件。與 install 命令(僅將 APK 文件復制到特定位置)不同,使用 pull 和 push 命令可將任意目錄和文件復制到設備中的任何位置。
如需從設備中復制某個文件或目錄(及其子目錄),請使用以下命令:
adb pull remote local
如需將某個文件或目錄(及其子目錄)復制到設備,請使用以下命令:
adb push loca remote
adb kill-server
您可以使用 shell 命令通過 adb 發出設備命令,也可以啟動互動式 shell。如需發出單個命令,請使用 shell 命令,如下所示:
adb [-d |-e | -s shell shell_command
在 adb shell 中,您可以使用 Activity 管理器 ( am ) 工具發出命令以執行各種系統操作,如啟動 Activity、強行停止進程、廣播 intent、修改設備屏幕屬性,等等。在 shell 中,相應的語法為:
您也可以直接從 adb 發出 Activity 管理器命令,無需進入遠程 shell。例如:
adb shell am start -a android.intent.action.VIEW
⑶ 踩坑adb——我的一次使用adb命令的踩坑之旅
昨晚正在測case的時候,突然冒出來一同事(我們都叫他肖總),來了一句:BUG基(同事都叫我BUG基,你懂的),我這復現了一個問題,但是開發那邊說叫我把log導出來,我這不會導,你知道怎麼導嗎?
作為一隻BUG基,我怎麼可能會放過這個裝比的機會呢,哈哈。
叫肖總導log的那個開發啥也沒說,就只在jira系統的comments最後寫了一句「導出方法:adb pull/cache/recovery/ ./」。其實當時我是崩潰的,我擦,肖總,你妹,這開發不是說了導出方法了嗎?你直接復制粘貼打上去命令不就行了嗎?然而,裝比心理作怪,我還是決定了幫他。
那麼下一步是什麼?沒錯,是時候展現裝比的技術了!
拿過Pad的第一步,那當然是先裝驅動啦。沒驅動你怎麼使用adb命令?為什麼這么說呢。驅動一般指的是設備驅動程序(Device Driver),是一種可以使 計算機 和設備通信的特殊程序。相當於 硬體 的介面, 操作系統 只有通過這個介面,才能控制 硬體 設備的工作,假如某設備的驅動程序未能正確安裝,便不能正常工作。那麼ADB又是什麼東東?Android Debug Bridge,我們一般簡稱為adb,它是一個非常強大的命令行工具,通過這個工具你能夠與你的android設備進行交互。意思也就是說,ADB命令需要通過驅動程序提供的介面來控制硬體設備,因為我們的文件是存儲在硬體設備上的呀。
那裝驅動要在什麼狀態下安裝?廢話,肯定是開機狀態啦。當然在安裝驅動前,要先開啟開發者模式的ADB調試,這里我就不說為什麼了,自己想。
那再下一步就是我們要用開發給的adb命令,導出/cache/recovery/這個文件夾的內容。或許有人會問,這開發不是已經給了文件的路勁了嗎,直接在Pad上復制粘貼到SD卡又或者直接用PC從Pad復制粘貼到PC就可以了呀。對於這個,我只想說,廢話,這么簡單的,你會想不到嗎?你以為我是豬啊。然而我並不是豬,我是BUG基。
對於上面那個想法,條件並不成立,當我們連接Pad時,windows是屏蔽部分文件的,反正我這里是這個情況,而用Pad直接復制粘貼到SD卡也是不成立,當我復制的時候,會提示「操作失敗,目標無法復制」,至於為什麼會出現這個提示,請往下看。
既然上面兩個方法都不行,那我們就只有用adb命令了。
在執行操作之前,我們要先看移動設備是否跟PC連接,那麼就需要用adb devices這個命令查看當前連接的設備,這里可能返回的狀態有三種:
I.device設備已經成功連接到了adb-server
II.offline設備並沒有連接到adb或者沒有響應
III.no device並沒有設備/模擬器連接
這里說的三種狀態顯示的可能跟顯示情況不大一樣,譬如我連接是正常的,返回的是
或許有人知道這里的意思是什麼,但是是否有想到過前面的那個daemon是什麼呢?當然有人會說,只要復制粘貼會用就可以了,對於這個回答,我默默表示不回答。
這個daemon還得要從ADB說起,ADB包含了以下三部分的cs模式的程序:
而在解釋上圖的意思之前,我想先引入兩個概念,那就是埠和通信(已理解的可以略過)。
埠
計算機"埠"是英文port的譯義,可以認為是計算機與外界通訊交流的出口。其中硬體領域的埠又稱介面,如:USB埠、串列埠等。軟體領域的埠一般指網路中面向連接服務和無連接服務的通信協議埠,是一種抽象的軟體結構,包括一些數據結構和I/O(基本輸入輸出)緩沖區。
埠最主要的作用就是通信和數據傳輸,把數據報順利的傳送到目的主機是沒有問題的。那麼問題出在哪裡呢?我們知道大多數 操作系統 都支持多程序(進程)同時運行,那麼目的主機應該把接收到的數據報傳送給眾多同時運行的進程中的哪一個呢?顯然這個問題有待解決,埠機制便由此被引入進來。
本地 操作系統 會給那些有需求的進程分配協議埠(protocal port,即我們常說的埠),每個協議埠由一個正整數標識,如:80,139,445,等等。當目的主機接收到數據報後,將根據報文首部的目的埠號,把數據發送到相應埠,而與此埠相對應的那個進程將會領取數據並等待下一組數據的到來。說到這里,埠的概念似乎仍然抽象,那麼繼續跟我來,別走開。
埠其實就是隊, 操作系統 為各個進程分配了不同的隊,數據報按照目的埠被推入相應的隊中,等待被進程取用,在極特殊的情況下,這個隊也是有可能溢出的,不過操作系統允許各進程指定和調整自己的隊的大小。
通信
通信(Communication)就是信息的傳遞,是指由一地向另一地進行信息的傳輸與交換,其目的是傳輸消息。其實這里的通信,意思就是說用特定的邏輯信號,實現雙方的互相信息傳輸,譬如說在命令行輸入adb devices命令,意思就是說我想要對方輸出設備列表給我看,這里的輸入」adb devices」就是發送給對方的信號,而輸出的設備列表就是對方反饋回來的信號,這個整個過程就是通信的過程。
說了這么多,其目的就在於掃盲,下面我們來說上面提到的ADB三部分的cs模式的程序(我把上面的圖拉下來,防止大家看不到):
1) adb client
從圖中,我們知道client是運行在PC端的,每當我們發起一個adb命令的時候,就會開啟一個client程序。當然,當我們開啟DDMS或者ADT的時候,也會自動創建client。
當我們開啟一個client的時候,它首先會去檢測後台是否已經有一個server程序在運行著,否則會開啟一個adb-server進程。
所有的client都是通過5037埠與adb-server進行通信的。
2 ) adb daemon ( adbd )
從圖中,我們知道daemon是作為一個後台進程運行在模擬器/真實Android設備中的。
daemon使用埠的范圍是5554-5585,每個模擬器/設備連接到PC端時,總會開啟這么一個後台進程,並且為其分配了兩個連續的埠,比如:
Emulator 1,console: 5554
Emulator 1, adb:5555
也正因為每個設備都分一組兩個埠,也已adb連接手機的最大數量為16。
說回埠的作用,在這兩個埠中,其中偶數埠是用於server與設備進行交互的,可以讓server直接從設備中讀取數據,而奇數埠是用來與設備的adbd進行連接通信的。
3) adb server
從圖中,我們同樣可以知道,server也是作為一個後台的程序運行在PC端的,他負責管理client進程以及adb daemon之間的通信。
當一個server開啟的時候,他會自動綁定並且監聽5037埠,接收client通過該埠發送過來的命令。同時server還會對5555-5585間的奇數埠進行掃描,進行對已連接設備的定位。
完成了上面一大堆吧啦吧啦的掃盲,大家應該知道了圖1的意思了吧,那麼我們就要解決問題了。
我們來看開發給我們的adb命令
不知大家是否看到使用adb命令都要在前面輸入adb,譬如開發給的「adb pull /cache/recovery/ ./」這個命令就有adb在前面。那麼為什麼要在命令前面加上一個adb呢,原因在於如果我們不加adb,windows系統會默認為對windows執行命令,而不是通過ADB命令行工具對手機執行操作命令。後面的「pull /cache/recovery/ ./」通過前面學習Linux命令結構(linux命令結構為command [options] [arguments...])大概可知道pull指的是命令動作,後面那兩個,指的其實就是參數,/cache/recovery/指的是Pad設備的文件路徑,而./指的是當前運行命令行的路勁,譬如下面的提到的C:\Users\301001958這個路徑。
好了,繼續回到我們的裝比之路,剛開始的時候,我不小心把」 adb pull /cache/recovery/ ./ 」打成了「adb pull /cache/recovery/./」,也就是,我沒有把中間的空格打上,結果彈出了這樣的提示,啊,真是瞎了我的眼……
於是,我馬上改過來,修改成了「adb pull /cache/recovery/ ./」,結果還是彈出了一樣的提示。
我擦,這怎麼辦怎麼辦,難道真的要裝比不成,反遭雷劈?別急,我們先來看看這里提示的意思,這里的這個remote的意思是指的遠端設備,在這指的就是Pad,而object '/cache/recovery/' does not exist的意思就是說Pad的/cache/recovery/這個文件夾對象不存在。
這咋回事啊?怎麼會就不存在呢?於是乎,我再進入Recovery mode查看,得到的結果如下:
我擦,這怎麼回事?明明有這個文件夾的存在,於是我再次開機在命令行輸入adb -help,驗證一下這個adb命令的用法,結果吧啦吧啦的出現了一大坨黑色的字,看著都頭暈啊,不過還是讓我找到了想要的信息,如下圖:
看到了這里,我瞬間臉黑了,我靠,這完全就是跟我想的那樣沒錯嘛,怎麼就說文件夾對象不存在呢。
於是我還是找上了大家最喜歡的——度娘。找了一番,找到了一個似乎有用的信息,如下圖:
正如上面所說,難道是因為沒有文件夾沒有讀寫許可權?於是,我又輸入了adb remount,得出結果如下:
額,看到這里,我不想說話了,不過這里,已經算是弄出了點端倪,大家應該也知道了前面直接在Pad的系統裡面復制提示無法復制了吧,最主要就是不夠許可權的原因,因為一旦系統運行文件隨便被更改,系統就有可能出現運行錯誤或者崩潰。只是我竟天真的以為這里的root,指的是我們經常用的那個一鍵root軟體,只要用軟體一鍵root了,就可以快樂的解決問題了,可想而知,得到的結果依然是像是碰到了蜜蜂窩一樣,被蟄著千瘡百孔啊,面目全非……這些什麼鳥一鍵root軟體,根本就無法root得了我們這些開發中的Pad嘛,還試了一大堆都不行,至於為什麼,暫時我沒有深究,大家有空可以去研究研究。
到了這里,我只想說:蓋倫,請給我一把大寶劍……
無奈,問題最終還是得要解決,於是我繼續再找度娘玩去了。
經過了一番查找,我似乎終於找到了答案如何獲得root許可權了,就是僅僅只需要用「adb root」這個命令就可以讓adb獲得root許可權,二話不說,趕緊開干啊,輸入adb root,得出的結果是:adbd restart as root,我擦,藍瘦香菇,明明只需要幾個命令……就可以獲得root許可權,我為什麼能搞得那麼復雜,我不行了,蓋倫,借你的大寶劍扶我起來……
但是似乎有一件很重要的事是,正因為我前面用了一鍵root軟體,我才能在adb命令使用root許可權,前面的功夫也並不是全是無用功,來到這里,我們就只需執行最後一步就是用開發給的命令,把文件拖出來,不過,我把開發給的最後一個參數改了,也就是「./」這個參數,改成了我自己電腦桌面的一個文件夾路徑,如我在桌面起了個叫做FileLog的文件夾,如我FileLog的文件夾路徑為C:\Users\301001958\Desktop\FileLog,那麼我執行的就是adb pull /cache/recovery/ C:\Users\301001958\Desktop\FileLog,然後按Enter執行命令,文件就巴拉拉的復制到了我的FileLog文件夾裡面,到這里問題解決完畢。
回顧整個過程,踩的坑著實不少,一個簡簡單單的命令,一個簡簡單單的操作,都能把自己搞死,不過在這整個過程裡面,也是一個不斷擴展知識的過程,也是一個不斷挑戰自我的過程,到最後的解決,是滿心的舒暢。
這整個過程里,給我最大的感悟是,樂於助人,助的有時候不僅僅是別人,助的也是自己,因為在這個過程中,我的知識獲得了拓展,獲得了成長,也獲得了成就感,獲得了興趣,用此文,希望能助正在踩坑的你,走出這個坑,不管是大坑還是小坑,又或者是神坑,在這個寫作分享的過程中,也讓我對整個知識面理解更全面更深了一步。
文章寫得不是那麼好,太長了點,請輕噴。
致正在踩坑的你我。 2017.02.26 By BUG基
⑷ linux下怎麼樣啟動adb命令
同 Windows 。不過 Linux 默認不搜索當前目錄。所以需要用相對地址 ./ 來讓 Linux 搜索當前目錄裡面的 adb 。
⑸ 常用adb命令總結
前言
很早就想整理一下自己平時常用的一些adb命令,不僅為了便於以後查找,而且整理的過程自己又重新復習了一遍,但是當我開始在度娘一搜的時候,發現很多人已經寫的非常詳細了,尤其是當我發現了 這篇adb概括
心中一句NND,怎麼可以寫的這么詳細,瞬間沒了想寫這篇文章的慾望,如果你點了鏈接發現確實很全,那麼恭喜你可以關掉這篇了,哈哈哈。
我就不這么想的,雖然很全,但不是我常用的,因人而異,所以我就權當記筆記+替這哥們宣傳了。
設備的狀態有 3 種
常見的錯誤情況
-查看前台 Activity
最常用的就是啟動指定的activity和發送指定的廣播
操作指令 adb shell am start -n 包名/類名
啟動默認瀏覽器打開一個網頁
adb shell am start -a android.intent.action.VIEW -d http://testerhome.com
先停止目標應用,再啟動
adb shell am start -s com.android.camera/.Camera
啟動相機
adb shell am start -n com.android.camera/.Camera
啟動設置
adb shell am start -n com.android.settings/com.android.settings.Settings
啟動Wifi設置
adb shell am start -n com.android.settings/com.android.settings.wifi.WifiSettings
啟動藍牙設置
adb shell am start -n com.android.settings/com.android.settings.bluetooth.BluetoothSettings
其它的類似只要你能在manifest中找到配置的,都可以通過這種方法來調用
操作指令 adb shell am broadcast -a 廣播名 --ei/es/ez 參數名 參數值 --ei/es/ez 參數名 參數值
--ei integer 值
--es String 值
--ez boolean 值
--ef float 值
--el long 值
例如之前寫的
Android6.0 源碼修改之Setting列表配置項動態添加和靜態添加 , 當中就通過發送廣播來接收增加配置列表項
adb shell am broadcast -a cn.dynamic.add.settingcategoryitem --es location "0-2" --es title "紅" --es intent "com.android.settings.SCHEDULE_POWER_ON_OFF_SETTING"
命令:
adb shell settings put global policy_control <key-values>
<key-values> 可由如下幾種鍵及其對應的值組成,格式為 key1=value1:key2=value2。
key 含義
這些鍵對應的值可則如下值用逗號組合:
value 含義
例如:
adb shell settings put global policy_control immersive.full=*
表示設置在所有界面下都同時隱藏狀態欄和導航欄。(重啟也不會失效,恢復需調用下面的命令)
adb shell settings put global policy_control immersive.preconfirms=*
表示恢復顯示
adb shell settings put global policy_control immersive.status=com.package1,com.package2:immersive.navigation=apps,-com.package3
表示設置在包名為 com.package1 和 com.package2 的應用里隱藏狀態欄,在除了包名為 com.package3 的所有應用里隱藏導航欄。
參考鏈接
Android 常用 adb 命令總結
ADB命令大全
⑹ ADB是什麼 ADB常用命令介紹
adb是windows系統通過usb或者無線連接Android手機的一個介面
adb 常用命令大全
1. 顯示系統中全部Android平台:
android list targets
2. 顯示系統中全部AVD(模擬器):
android list avd
3. 創建AVD(模擬器):
android create avd --name 名稱 --target 平台編號
4. 啟動模擬器:
emulator -avd 名稱 -sdcard ~/名稱.img (-skin 1280x800)
5. 刪除AVD(模擬器):
android delete avd --name 名稱
6. 創建SDCard:
mksdcard 1024M ~/名稱.img
7. AVD(模擬器)所在位置:
Linux(~/.android/avd) Windows(C:\Documents and Settings\Administrator\.android\avd)
8. 啟動DDMS:
ddms
9. 顯示當前運行的全部模擬器:
adb devices
10. 對某一模擬器執行命令:
abd -s 模擬器編號 命令
11. 安裝應用程序:
adb install -r 應用程序.apk
12. 獲取模擬器中的文件:
adb pull <remote> <local>
13. 向模擬器中寫文件:
adb push <local> <remote>
14. 進入模擬器的shell模式:
adb shell
15. 啟動SDK,文檔,實例下載管理器:
android
16. 缷載apk包:
adb shell
cd data/app
rm apk包
exit
adb uninstall apk包的主包名
adb install -r apk包
17. 查看adb命令幫助信息:
adb help
18. 在命令行中查看LOG信息:
adb logcat -s 標簽名
19. adb shell後面跟的命令主要來自:
源碼\system\core\toolbox目錄和源碼\frameworks\base\cmds目錄。
20. 刪除系統應用:
adb remount (重新掛載系統分區,使系統分區重新可寫)。
adb shell
cd system/app
rm *.apk
21. 獲取管理員許可權:
adb root
22. 啟動Activity:
adb shell am start -n 包名/包名+類名(-n 類名,-a action,-d date,-m MIME-TYPE,-c category,-e 擴展數據,等)。
23、發布埠:
你可以設置任意的埠號,做為主機向模擬器或設備的請求埠。如:
adb forward tcp:5555 tcp:8000
24、復制文件:
你可向一個設備或從一個設備中復制文件,
復制一個文件或目錄到設備或模擬器上:
adb push
<source>
<destination></destination></source>
如:adb
push test.txt /tmp/test.txt
從設備或模擬器上復制一個文件或目錄:
adb
pull <source>
<destination></destination></source>
如:adb
pull /addroid/lib/libwebcore.so .
25、搜索模擬器/設備的實例:
取得當前運行的模擬器/設備的實例的列表及每個實例的狀態:
adb devices
26、查看bug報告:
adb bugreport
27、記錄無線通訊日誌:
一般來說,無線通訊的日誌非常多,在運行時沒必要去記錄,但我們還是可以通過命令,設置記錄:
adb shell
logcat -b radio
28、獲取設備的ID和序列號:
adb get-proct
adb get-serialno
29、訪問資料庫SQLite3
adb shell
sqlite3
#cd system/sd/data //進入系統內指定文件夾
#ls //列表顯示當前文件夾內容
#rm -r xxx //刪除名字為xxx的文件夾及其裡面的所有文件
#rm xxx //刪除文件xxx
#rmdir xxx //刪除xxx的文件夾
⑺ linux下關於adb命令的一些知識
Android Debug Bridge,一般簡稱為adb,主要存放在sdk安裝目錄下的platform-tools文件夾中,它是一個非常強大的命令行工具,通過這個工具你能夠與你的android設備進行交互。同時這是一個包含了以下三部分的cs模式的程序:
1) adb client
從圖中,我們知道client是運行在PC端的,每當我們發起一個adb命令的時候,就會開啟一個client程序。當然,當我們開啟DDMS或者ADT的時候,也會自動創建client。
當我們開啟一個client的時候,它首先會去檢測後台是否已經有一個server程序在運行著,否則會開啟一個adb-server進程。
所有的client都是通過5037埠與adb-server進行通信的。
2)adb daemon(adbd)
從圖中,我們知道daemon是作為一個後台進程運行在模擬器/真實Android設備中的。
daemon使用埠的范圍是5554-5585,每個模擬器/設備連接到PC端時,總會開啟這么一個後台進程,並且為其分配了兩個連續的埠,比如:
Emulator 1, console: 5554
Emulator 1, adb: 5555
也正因為每個設備都分一組兩個埠,也已adb連接手機的最大數量為16。
說回埠的作用,在這兩個埠中,其中偶數埠是用於server 與設備進行交互的,可以讓server直接從設備中讀取數據,而奇數埠是用來與設備的adbd進行連接通信的。
2) adb server
從圖中,我們同樣可以知道,server也是作為一個後台的程序運行在PC端的,他負責管理client進程以及adb daemon之間的通信。
當一個server開啟的時候,他會自動綁定並且監聽5037埠,接收client通過該埠發送過來的命令。同時server還會對5555-5585間的奇數埠進行掃描,進行對已連接設備的定位。
1.2 常用的adb命令
首先我們先來介紹一下,adb命令的使用格式吧:
adb [-d|-e|-s ]
adb是必須的,接下來方括弧[]裡面的內容不是必須的,最後才是我們需要執行的命令操作,例如 adb -s emulator-5554 install UCBrowser.apk (這是安裝UC瀏覽器的意思)
下面先介紹下,前面幾個參數的含義吧:
-d: 讓唯一連接到該PC端的真實安卓設備執行命令,如果發現USB中連接有多部設備,將會報錯
-e: 讓唯一連接到該PC端的模擬器執行命令,如果發現開啟了多個模擬器,將會報錯
-s:通過設備的序列號進行指定設備執行命令
如果設備只連接有一個設備或者一個模擬器的時候,可以不用聲明這三個參數,adb默認會讓這部唯一連接到的設備進行命令執行。
ok,下面開始講解常用的命令吧:
1) 查看當前PC端連接有多少設備:
adb devices
終端中的執行結果為:
從上圖中,我們看到了設備有的兩種狀態,其實執行該命令,可能返回的狀態有三種:
I. device 設備已經成功連接到了adb-server
II. offline 設備並沒有連接到adb或者沒有響應
III. no device 並沒有設備/模擬器連接
2) 查看adb的版本
adbversion
終端中的執行結果為:
3) 給設備進行軟體的安裝
adb -s install
eg:
adb -s 99eb07a9 install D://Test.apk
終端中的執行結果為:
除了上面這種方法,我們還有另外一個命令:
adb -s shell pm install [options]
其中[options]中最常用的選項是-r,代表著本次安裝是重新安裝,會保留用戶數據。
4) 卸載設備中已經安裝的軟體
adb -s uninstall
eg:
adb -s 99eb07a9 uninstall cn.uc.test
終端中的執行結果為:
除了上面這種方法,我們還有另外一個命令:
adb -s uninstall [options]
這里的options是-k,加上該參數表明卸載軟體後依舊保留用戶數據
5) 將數據從設備復制到PC中
adb -s pull
eg:
adb -s 99eb07a9 pull /sdcard/stericson-ls D://
終端的執行結果:
在D://盤中我們也可以發現stericson-ls文件
6) 講數據從PC端復制到設備中
adb -s push
eg:
adb -s 99eb07a9 push d://stericson-ls /sdcard/
終端的執行結果:
7) 獲取連接到的手機的序列號
adb get-serialno
終端的執行結果:
8)獲取設備的連接狀態
adb -s get-state
eg:
adb -s 99eb07a9 get-stat
終端的執行結果:
9) 等待設備連接成功
adb wait-for-device
該命令將會阻塞一直到默認連接的那部機器狀態變為device,也就是連接成功。
10) adb-server 的開啟與關閉
adb kill-server
adb start-server
終端的執行結果:
有時候我們開啟server會失敗,這是因為我們裝了的手機助手,豌豆莢或者其他軟體自帶有自己的adb,導致埠沖突開啟失敗。主要關掉那些軟體並且殺掉那些軟體自帶的adb進程重來即可。
1.2 手機執行Shell命令
眾所周知,Android的內核本身就是Linux,所以Android本身也支持Linux命令,但是因為是手機系統,所以進行了一定的刪減,部分命令不支持,而不支持的部分,我們可以通過安裝busybox這個軟體進行
填補。
下面我們講解下如何在手機中執行Shell命令:
1) 每次都加上adb shell來進行命令的發送與執行
adb shell
2) 先通過adb shell進入手機Shell執行狀態,然後直接輸入Linux命令,如圖:
1.3 Activity Manager 常用命令與參數說明
一般情況下,我們最常用它來進行app的開啟,並且傳遞一定的參數過去,比如:
adb shell am start -a android.intent.action.VIEW -n cn.uc.test/.MainActivity -d
在這里就不做太過詳細和重復的說明了
1.4 Package Manager 常用命令與參數說明
1) 使一個apk處於禁用狀態,相當於卸載了:
disable
其中 PACKAGE_OR_COMPONENT的格式是 package/class, 如 com.UCMobile/.main.UCMobile
eg:
adb shell su disable com.UCMobile/.main.UCMobile
終端執行結果:
同時我們在手機上發現,UC瀏覽器的圖標不見了
2) 讓一個apk從禁用狀態恢復過來
enable
其中 PACKAGE_OR_COMPONENT的格式是 package/class, 如 com.UCMobile/.main.UCMobile
eg:
adb shell su enable com.UCMobile/.main.UCMobile
終端執行結果:
同時我們從手機上發現,UC瀏覽器的圖標又回來啦。
3) 查看一個apk所在的路徑
pm path
eg:
adb shell pm path com.UCMobile
終端執行結果:
4) 查看手機中裝的所有的包
pm list packages
再次不做過多的說明
1.5其他常用的adb命令
1) 屏幕錄像
例如,屏幕開始錄像並且儲存到/sdcard中,同時名字為demo.mp4
adb shell screenrecord /sdcard/demo.mp4
2) 關閉設備請求,開啟設備
adb shell stop
adb shell start
3)設備關機以及重啟
adb reboot
adb shutdown
⑻ 使用adb查看別人家APP的數據
1.說明
2.使用adb命令獲取指定應用的包名和Activity名稱
3.使用adb命令啟動/關閉APP
4.使用adb命令把手機中的apk導到電腦上
5.查看apk中的AndroidManifest.xml文件
6.使用adb命令進行數據備份
7.查看數據
8.結語
查看其它APP數據的前提是該APP默認開啟數據備份,也就是allowBackup屬性。
想問一下大家在平時的開發中對應用的安全性有很在意么?有可能大家會想到加密、混淆、apk加固,但還有一些其他細節的東西需要大家去了解。今天就介紹一下android:allowBackup屬性。這個屬性在開發的過程中通常是默認開啟的,Google起初是為了防止數據丟失,留下了這個功能,但是這個屬性也容易造成一些隱私數據的泄露。如果你想關閉可以把它設置為false。那麼這個屬性在哪裡設置呢,就在AndroidManifest.xml文件中的application標簽中。
要備份APP的數據,首先我們要知道這個APP的包名才可以進行備份。
在手機或模擬器上面運行APP,然後輸入命令: adb shell mpsys activity top #
這時會輸出很多東西,你可以用查找功能Ctrl+F,找到TASK,下圖紅框中就是要找的包名
命令: adb logcat| findstr START
然後在手機或模擬器上點擊你想要獲取的應用,這時就會在cmd中出現相應的包名和類名了。
啟動APP的命令: adb shell am start -W -n package/activity
命令窗口通過adb shell 進入android 的Linux命令界面,輸入am help看到如下信息:
它會展示出在不同場景下(比如start-activity、start-service等)不同參數代表的意義一些參數的意義,情況太多了這里就不細說了。
回到正題,後面的package和activity就是上面獲取包名第二種方法中提到的cmp,比如我們要啟動谷歌地圖: adb shell am start -W -n com.google.android.apps.maps/com.google.android.maps.MapsActivity
在這里我們再做一個延伸, 用命令做APP的冷啟動和熱啟動操作,然後記錄啟動的時間
我們看到上圖中有三個數字ThisTime、TotalTime和WaitTime,這三個數字就是本次啟動APP所花費的時間。
熱啟動時退出退出APP的命令: adb shell input keyevent 3 ,這就相當於按了手機的home鍵,然後我們再執行啟動APP的命令,這樣就完成了熱啟動。
我們看到熱啟動花費的時間比冷啟動少了很多,一套冷、熱啟動的流程我們就走完了。接下來就看我們怎麼去優化了,讓它們變的更少。所以我們在平時做啟動優化的時候可以把自己的APP和一些優秀的APP做一下對比看看還差多少。
上面已經說過了一種退出APP的方法了,接下來這個命令是相當於殺掉當前的APP進程。
命令: adb shell am force-stop package
這時候再使用啟動命令,就相當於冷啟動了。
有的時候我們在手機上查看和操作apk不是特別方便,而且通過文件管理找apk也很難找。接下來就介紹怎麼用adb命令把手機中的apk導到電腦上。
通過包名獲取apk在手機中的存儲路徑,命令 adb shell pm path package
導出apk文件,到當前目錄下
命令: adb pull 路徑
這一步就要看一下apk中有哪些東西了,主要還是看一下AndroidManifest.xml文件當中的allowBackup設置。
我平常用的方法就是吧apk文件的後綴該成zip,然後就可以看到裡面的東西了。下面的是谷歌地圖的apk的構成。
下面來看一下AndroidManifest.xml文件,會看到都是亂碼,但是關鍵的信息還是可以獲取的,我們目前想要的就是下圖紅框中的allowBackup屬性,像谷歌的APP肯定是把它設置成false的,所以我們沒辦法備份它的信息的。
那麼我們怎麼看一個應用的allowBackup屬性設置成true還是false呢,我的觀察和實踐出來的方法是看allowBackup後面有沒有小方框,有就代表設置了true。如果有哪位大神知道好的可靠的方法還請留言告知。
下面是其他apk中的AndroidManifest.xml文件,後面帶了個小方框。
在了解到APP可以備份之後,我們就可以開始做壞事了,哈哈。
備份的命令: adb backup -nosystem -all -noapk -noshared -f data.ab package
[-system | -nosystem] 是否備份系統
[-apk | -noapk] 是否備份apk安裝文件
[-shared | -noshared] 是否備份手機存儲空間
-f *.ab 存檔格式一定要是.ab
package:包名
在運行命令之後,手機或模擬器會出現一個頁面要求你輸入備份密碼,這個密碼你可以隨便輸入,但你要記住,在後面查看ab文件的時候會用到。
輸入密碼,點擊【備份我的數據】之後就開始備份了,備份完成之後會有提示,這時就是生產一個ab文件了。
ab文件大家很少接觸,這里使用abe工具(鏈接: https://pan..com/s/1NPbhtF1fyJcHOm1CXwi9Dg
寫這篇文章還是提醒大家在平時的開發中要注重APP數據的安全問題,畢竟數據還是相當重要的。
如果有哪裡寫的不對的地方,請指出,我會及時改正。
⑼ 什麼是adb命令行
adb命令行是androidsdk里的一個工具,用這個工具可以直接操作管理android模擬器或者真實的android設備(如G1手機),它的主要功能有:
1、運行設備的shell(命令行)
2、管理模擬器或設備的埠映射
3、計算機和設備之間上傳/下載文件
4、將本地apk軟體安裝至模擬器或android設備
ADB是一個客戶端-伺服器端程序,其中客戶端是你用來操作的電腦,伺服器端是android設備。
(9)linuxadb命令大全擴展閱讀:
常用命令
1. 查看設備 *adbdevices
這個命令是查看當前連接的設備, 連接到計算機的android設備或者模擬器將會列出顯示
2. 安裝軟體
*adbinstall <apk文件路徑>
這個命令將指定的apk文件安裝到設備上
3. 卸載軟體
*adbuninstall <軟體名>
*adbuninstall -k <軟體名>
如果加 -k 參數,為卸載軟體但是保留配置和緩存文件。
4. 登錄設備shell
*adbshell
*adbshell <command命令>
這個命令將登錄設備的shell。
後面加<command命令>將是直接運行設備命令,相當於執行遠程命令。
5. 從電腦上發送文件到設備
*adbpush <本地路徑> <遠程路徑>
用push命令可以把本機電腦上的文件或者文件夾復制到設備(手機)。
⑽ Ubuntu下adb的使用及常見問題處理
Ubuntu下adb的使用及常見問題處理
方案一:使用ubuntu系統自帶的安裝包
sudo apt-get install android-tools-adb
或者
sudo apt-get install adb
方案二:使用Android源碼編譯生成的adb文件
Android源碼編譯完成之後,會在編譯過的項目目錄下./out/host/linux-x86/bin/生成adb文件,需要將其拷貝到系統的/usr/bin目錄下,並更改許可權。
sudo cp /home/apuser/code/out/host/linux-x86/bin/adb /usr/bin
sudo chmod a+x /usr/bin/adb
說明:這個adb文件也可以在android-sdk-linux下的platform-tools目錄下找到。
在終端運行 adb help或者adb查看adb是否安裝成功。
adb help
或者
adb
正常情況下,可看到adb的版本信息,以及adb支持的相關指令和說明。
mkdir~/.android
echo 0x1782 > ~/.android/adb_usb.ini
可以查看/home/apuser/.android/adb_usb.ini是否生成成功,且內容為0x1782
這個0x1782是設備的VID號,可以使用lsusb指令查詢自己設備的VID號是多少,如果是調試多個設備,可依次將設備的VID號添加到adb_usb.ini中
備註:展訊為0x1782,MTK為0x0e8d,高通為0x056c
到:/etc/udev/rules.d/51-android.rules命令:
cd /etc/udev/rules.d
sudo gedit/etc/udev/rules.d/51-android.rules
添加
SUBSYSTEM=="usb",SYSFS{idVendor}=="1782", MODE="0666",GROUP="plugdev"
其中 1782 為展訊設備號,也可以通過lsusb 來查看所有 usb 設備。
說明:
1、展訊的設備號是1782,MTK的設備號是0e8d,高通660的設備號是056c,
其他平台的可查找確認後,填寫到這里。
2、如果沒有/etc/udev/rules.d/51-android.rules 文件,需要自己創建一下。
3、修改/etc/udev/rules.d/51-android.rules不需要重啟Linux機器,重新插拔一下設備就可以了。再次運行adb devices就可以看到你的設備已經連接。
在命令窗口執行adb shell; adb devices
可以shell登錄手機,也可以出 log, logcate 具體命令還需要學習。
使用上文的步驟操作之後,大多數系統里adb都可以使用,但在有些版本的adb或者系統中仍會報如下問題:
apuser@ubuntu2:~/adbtools$ adb devices
List of devices attached
faf80ac1 no permissions (user in plugdev group; areyour udev rules wrong?); see [http://developer.android.com/tools/device.html]
可使用一下解決方案,進行解決
解決方案:
setp 1: lsusb 找到你手機的usb 地址
apuser@ ubuntu2:~/adbtools$ lsusb
Bus 002 Device 002: ID 1f75:0621 Innostor Technology Corporation
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 006: ID 0bda:58db Realtek Semiconctor Corp.
Bus 001 Device 005: ID 8087:0a2b Intel Corp.
Bus 001 Device 004: ID 138a:0097 Validity Sensors, Inc.
Bus 001 Device 003: ID18f8:0f99
Bus 001 Device 014: ID 19d2:ffb0 ZTE WCDMA Technologies MSM
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
他會列出來所有的usb 設備。如果試下找不到,那麼拔掉設備看下,哪了沒有了就是哪個。
setp2: 配置規則文件
apuser@ ubuntu2:~/adbtools$ sudo gedit /etc/udev/rules.d/51-android.rules
[sudo] password for apuser:
之後把這些文本 到編輯器裡面:
ATTR{idProct}=="ffb0",SYMLINK+="android_adb", MODE="0660",GROUP="plugdev", TAG+="uaccess", SYMLINK+="android"
注意:ffb0 是查找到的手機設備的usb 的地址。
Bus 001 Device 014: ID 19d2:ffb0 ZTE WCDMATechnologies MSM
改成你的地址。
如果沒有/etc/udev/rules.d/51-android.rules 文件,麻煩自己創建一下。
setp3: 之後執行命令:
apuser@ ubuntu2:~/adbtools$ sudo usermod -a -G plugdev $(id -u -n)
apuser@ ubuntu2:~/adbtools$ sudo udevadm control --reload-rules
apuser@ ubuntu2:~/adbtools$ sudo service udev restart
apuser@ ubuntu2:~/adbtools$ sudo udevadm trigger
setp4: 之後重啟adb
apuser@ ubuntu2:~/adbtools$ adb kill-server
apuser@ ubuntu2:~/adbtools$ adb start-server
apuser@ ubuntu2:~/adbtools$ adb devices
List of devices attached
faf80ac1 unauthorized
apuser @ ubuntu2:~$adb devices
List of devices attached
???????????? no permissions
提示很明確,就是adb許可權有問題,而且
???????????? no permissions
這樣的提示,說明使用的adb版本較低,最好使用高版本的adb,安裝Ubuntu系統自帶的adb可能會出現這種現象。如果adb版本比較高,就會出現如下提示:
faf80ac1no permissions……
使用adb shell 也會提示許可權error
apuser@ ubuntu2:~$adb shell
error:insufficient permissions for device
根本原因是: adb server 需要以 root 的許可權啟動
臨時方法 如下:
apuser@ubuntu2:~$sudo -s
[sudo]password for apuser:
root@ ubuntu2:~#adb kill-server; adb start-server
* daemon not running. starting it now *
* daemon started successfully *
apuser@ ubuntu2:~# exit
apuser @ ubuntu2:~$
再次執行adb shell就可以了。
該許可權問題,可使用sudo啟動adb來解決,但不是根本解決之道,因為每次都要sudo來提高許可權,太麻煩,而且如果使用的eclpse,或者idle來調試時還是要面對該該問題。
最好按本文第一部分的方法安裝adb。如果按本文第一部分安裝了adb,但還出現改問題,可使用which adb查看,當前使用的adb那個路徑下的adb.以確保使用正確的adb
3、如果需要調試多個設備,以下的添加方法可能更為合適
這個方案對於不出現user in plugdev group; are your udev rules wrong?問題的系統來說是可行,的,如果出現user in plugdev group; are your udev rules wrong?問題,就不用考慮了。
清空51-android.rules,添加如下一行,一勞永逸(需要測試好幾種設備,每次都添加一個會很麻煩)。
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666", GROUP="plugdev"
我並不是很清楚具體的含義,只是模仿10-vboxdrv.rules來寫的,這個是virtualbox的udev規則文件,因為名字開頭數字大文件中記錄的規則會覆蓋名字開頭數字小的文件中的規則,所以你需要盡可能設置的文件名大一些,51已經夠用了(我原來想寫在10-vboxdrv.rules,讓他們用一個文件,但是失敗了)
adb kill-server
sudo udevadmcontrol --reload-rules
sudo service udevrestart
sudo udevadmtrigger
lsusb
可將這些指令寫入一個sh腳本中,配置完規則,或者要檢查USB設備時,直接執行該腳本,以提高效率。