Android手機用wifi鏈接adb調試的方法

https://www.jianshu.com/p/dc6898380e38

0x0 前言

Android開發確定要鏈接pc的adb進行調試,傳統的方法是用usb與pc進行鏈接,操做簡單即插即用,缺點是pc上必須得有對應手機的usb驅動程序,對於谷歌親兒子系列和三星摩托等外國品牌而言這不是什麼問題,一般sdk裏面就自帶了,然而想華爲小米這種自帶魔改rom的國產貨就很難說了,一般須要安裝廠家本身出的usb驅動程序才能鏈接adb,然而一想到雷猴王的wps全家桶多麼喪病我就不想在電腦上裝任何他家的東西。css

固然後來有了更加先進的鏈接adb的方式——wifi鏈接。只須要敲入幾行命令開啓手機端的adb服務,pc端便可根據手機的ip地址進行adb鏈接,不用依賴驅動程序,全部品牌的手機都適用,惟一的前提條件是————java

ROOTlinux

我去,對Android開發者而言這也算個事?android

下面就來介紹怎麼使用這種鏈接方法。web

0x1 手動輸入祕笈

首先在手機上安裝一個模擬shell的app,隨即是什麼,能像linux的shell同樣執行命令行就能夠。shell

祕笈很簡單:網絡

su setprop service.adb.tcp.port 5555 stop adbd start adbd 

第一行,和linux同樣獲取root權限,我剛纔說過你的手機應該已經root了,不然這裏會報錯。app

第二行設置adb服務端口爲5555,這是adb的默認端口。tcp

第三行第四行,重啓adb服務。ide

若是執行到這裏都沒有問題,那麼用你以爲方便的方法獲取手機在無線網絡中的ip地址,好比最多見的192.168.0.100

到你的pc機上,打開cmd.exe或其餘什麼相似的東西,找到adb的存放的路徑,執行如下代碼

adb connect 192.168.0.100 

若是你隨後看到

connected to 192.168.0.100 

相似的字樣,說明已經鏈接成功了,你在Android Studio的Android Monitor窗口中應該就能看到你的手機了。

 
 

0x2 讓app自動輸入祕笈

在製做粗糙的模擬shell app裏用手機觸摸屏上的軟鍵盤輸入了3次這種祕笈之後,我終於不能忍了。爲何不能一鍵讓程序自動替咱們輸入這些命令呢?

因而如今我假設在某個佈局文件中咱們已經有了一個Button,名字叫btn_su,在某個Activity中咱們加載了這個佈局文件,而且綁定給一個Button對象btnSu

下面設置這個btnSu的點擊事件監聽器

btnSu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO } }); 

在事件監聽器裏面實現啓動adb服務的功能。

首先開啓一個具備root權限的進程:

Process localProcess = Runtime.getRuntime().exec("su"); 

打開該進程的輸入流

DataOutputStream os = new DataOutputStream(localProcess.getOutputStream()); 

向該輸入流中寫入以下字符串

os.writeBytes("setprop service.adb.tcp.port 5555\n"); os.writeBytes("stop adbd\n"); os.writeBytes("start adbd\n"); os.flush(); 

以上代碼至關於向一個具備root權限的shell中寫入以下命令

setprop service.adb.tcp.port 5555 stop adbd start adbd 

下面爲了更方便的鏈接電腦進行調試,順便就獲取一下手機的ip地址顯示在屏幕上:

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
//判斷wifi是否開啓 WifiInfo wifiInfo = wifiManager.getConnectionInfo(); int ipAddress = wifiInfo.getIpAddress(); String ip = intToIp(ipAddress); Toast.makeText(MainActivity.this, ip, Toast.LENGTH_LONG).show(); 

其中intToIp方法想必誰都會寫,這裏就不貼出來了。

完整的監聽器onClick實現代碼以下:

@Override public void onClick(View v) { DataOutputStream os = null; try { Process localProcess = Runtime.getRuntime().exec("su"); os = new DataOutputStream(localProcess.getOutputStream()); os.writeBytes("setprop service.adb.tcp.port 5555\n"); os.writeBytes("stop adbd\n"); os.writeBytes("start adbd\n"); os.flush(); WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); //判斷wifi是否開啓 WifiInfo wifiInfo = wifiManager.getConnectionInfo(); int ipAddress = wifiInfo.getIpAddress(); String ip = intToIp(ipAddress); Toast.makeText(MainActivity.this, ip, Toast.LENGTH_LONG).show(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (os != null) { os.close(); } } catch (IOException e) { } } } 

0x3 吐槽

阿里的價值觀究竟是什麼摸不太透,不過想來我這個玩意極大的提高操做效率豈不是對那些手敲命令行的人不公平,隱約以爲提及價值觀貌似也是分分鐘藥丸。幸虧不在阿里工做,不然早就被叉出去了哈哈。




0x4 other

 也能夠在手機上安裝豌豆莢app設置無線鏈接。

 

0x5 other2

1,  確認本機PC 沒有任何adb 設備鏈接,包括模擬器和usb鏈接, 即 使用

「adb devices」 命令後, 列表顯示爲空, 這個是爲了後面敲命令容易一些

2,  將遠程android設備接入wifi, 並查看其IP地址:設置—〉無線或網絡---〉WLAN設置—〉按menu鍵並選擇「高級」選項---〉IP 地址  例如192.168.2.11

3,  本機command 命令下執行 ping  192.168.2.11, 若是ping成功,說明能夠鏈接

4,  執行 adb connect 192.168.2.11

若是顯示鏈接成功,則可繼續執行後面的操做;若是不成功,如顯示:

unable to connect to 192.168.2.11:5555

有多是設備監聽端口的問題,則能夠在手機終端執行以下命令:

su  //獲取root權限

setprop service.adb.tcp.port 5555   //設置監聽的端口,端口能夠自定義,如5554,5555是默認的

stop adbd   //關閉adbd

start adbd   //從新啓動adbd

手機終端的下載程序能夠在這裏下載:http://as.baidu.com/a/item?docid=437072506&f=web_alad_1

 

執行這個的前提是你手機能夠root權限,若是沒有root權限仍然不能執行su

得到root權限的方法不少,手機型號不一樣,獲取方法也有差異,網上不少方法,這裏再也不細述(對調試開發者,得到root權限是很是必要的)

 

5,  adb connect ip 成功之後能夠執行原來usb鏈接時的全部命令,如adb install, adb logcat等。

 

下面附上adb的經常使用命令:

 

1,  開啓adb  服務

adb start-server

2,  關閉adb 服務

adb kill-server

3,  查看設備

adb devices

4,  安裝軟件

adb install xxx.apk

5,  卸載軟件

adb uninstall xxx.apk

6,  進入設備或模擬器

adb shell  devicename

若是當前只有一個設備,devicename也能夠爲空

7,  從電腦上發送文件到設備

adb push  PCfilepath devicepath

8,  從設備上copy文件到電腦

adb pull devicepath  PCpath

9,  查看bug報告

adb bugreport

10, 得到設備序列ID

adb get-product

11, 查看log

adb logcat

相關文章
相關標籤/搜索