Android手机用wifi连接adb调试的方法
https://www.jianshu.com/p/dc6898380e38
0x0 前言
Android開發(fā)肯定要連接pc的adb進(jìn)行調(diào)試,傳統(tǒng)的方法是用usb與pc進(jìn)行連接,操作簡單即插即用,缺點(diǎn)是pc上必須得有對應(yīng)手機(jī)的usb驅(qū)動程序,對于谷歌親兒子系列和三星摩托等外國品牌而言這不是什么問題,通常sdk里面就自帶了,然而想華為小米這種自帶魔改rom的國產(chǎn)貨就很難說了,通常需要安裝廠家自己出的usb驅(qū)動程序才能連接adb,然而一想到雷猴王的wps全家桶多么喪病我就不想在電腦上裝任何他家的東西。
當(dāng)然后來有了更加先進(jìn)的連接adb的方式——wifi連接。只需要敲入幾行命令開啟手機(jī)端的adb服務(wù),pc端即可根據(jù)手機(jī)的ip地址進(jìn)行adb連接,不用依賴驅(qū)動程序,所有品牌的手機(jī)都適用,唯一的前提條件是————
ROOT
我去,對Android開發(fā)者而言這也算個事?
下面就來介紹怎么使用這種連接方法。
0x1 手動輸入秘笈
首先在手機(jī)上安裝一個模擬shell的app,隨便是什么,能像linux的shell一樣執(zhí)行命令行就可以。
秘笈很簡單:
su setprop service.adb.tcp.port 5555 stop adbd start adbd第一行,和linux一樣獲取root權(quán)限,我剛才說過你的手機(jī)應(yīng)該已經(jīng)root了,否則這里會報錯。
第二行設(shè)置adb服務(wù)端口為5555,這是adb的默認(rèn)端口。
第三行第四行,重啟adb服務(wù)。
如果執(zhí)行到這里都沒有問題,那么用你覺得方便的方法獲取手機(jī)在無線網(wǎng)絡(luò)中的ip地址,比如最常見的192.168.0.100
到你的pc機(jī)上,打開cmd.exe或其他什么類似的東西,找到adb的存放的路徑,執(zhí)行以下代碼
adb connect 192.168.0.100如果你隨后看到
connected to 192.168.0.100類似的字樣,說明已經(jīng)連接成功了,你在Android Studio的Android Monitor窗口中應(yīng)該就能看到你的手機(jī)了。
0x2 讓app自動輸入秘笈
在制作粗糙的模擬shell app里用手機(jī)觸摸屏上的軟鍵盤輸入了3次這種秘笈以后,我終于不能忍了。為什么不能一鍵讓程序自動替我們輸入這些命令呢?
于是現(xiàn)在我假設(shè)在某個布局文件中我們已經(jīng)有了一個Button,名字叫btn_su,在某個Activity中我們加載了這個布局文件,并且綁定給一個Button對象btnSu
下面設(shè)置這個btnSu的點(diǎn)擊事件監(jiān)聽器
btnSu.setOnClickListener(new View.OnClickListener() {在事件監(jiān)聽器里面實(shí)現(xiàn)啟動adb服務(wù)的功能。
首先開啟一個具有root權(quán)限的進(jìn)程:
Process localProcess = Runtime.getRuntime().exec("su");打開該進(jìn)程的輸入流
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();以上代碼相當(dāng)于向一個具有root權(quán)限的shell中寫入如下命令
setprop service.adb.tcp.port 5555 stop adbd start adbd下面為了更方便的連接電腦進(jìn)行調(diào)試,順便就獲取一下手機(jī)的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方法想必誰都會寫,這里就不貼出來了。
完整的監(jiān)聽器onClick實(shí)現(xiàn)代碼如下:
0x3 吐槽
阿里的價值觀到底是什么摸不太透,不過想來我這個玩意極大的提升操作效率豈不是對那些手敲命令行的人不公平,隱約覺得說起價值觀貌似也是分分鐘藥丸。幸好不在阿里工作,否則早就被叉出去了哈哈。
0x4 other
?也可以在手機(jī)上安裝豌豆莢app設(shè)置無線連接。
?
0x5 other2
1,? 確認(rèn)本機(jī)PC 沒有任何adb 設(shè)備連接,包括模擬器和usb連接, 即 使用
“adb devices” 命令后, 列表顯示為空, 這個是為了后面敲命令容易一些
2,? 將遠(yuǎn)程android設(shè)備接入wifi, 并查看其IP地址:設(shè)置—〉無線或網(wǎng)絡(luò)---〉WLAN設(shè)置—〉按menu鍵并選擇“高級”選項---〉IP 地址? 例如192.168.2.11
3,? 本機(jī)command 命令下執(zhí)行 ping ?192.168.2.11, 如果ping成功,說明可以連接
4,? 執(zhí)行 adb connect 192.168.2.11
如果顯示連接成功,則可繼續(xù)執(zhí)行后面的操作;如果不成功,如顯示:
unable to connect to 192.168.2.11:5555
有可能是設(shè)備監(jiān)聽端口的問題,則可以在手機(jī)終端執(zhí)行如下命令:
su ?//獲取root權(quán)限
setprop service.adb.tcp.port?5555 ? //設(shè)置監(jiān)聽的端口,端口可以自定義,如5554,5555是默認(rèn)的
stop adbd ? //關(guān)閉adbd
start adbd ? //重新啟動adbd
手機(jī)終端的下載程序可以在這里下載:http://as.baidu.com/a/item?docid=437072506&f=web_alad_1
?
執(zhí)行這個的前提是你手機(jī)可以root權(quán)限,如果沒有root權(quán)限仍然不能執(zhí)行su
獲得root權(quán)限的方法很多,手機(jī)型號不同,獲取方法也有差別,網(wǎng)上很多方法,這里不再細(xì)述(對調(diào)試開發(fā)者,獲得root權(quán)限是非常必要的)
?
5, ?adb connect ip 成功以后可以執(zhí)行原來usb連接時的所有命令,如adb install, adb logcat等。
?
下面附上adb的常用命令:
?
1,? 開啟adb ?服務(wù)
adb start-server
2,? 關(guān)閉adb 服務(wù)
adb kill-server
3,? 查看設(shè)備
adb devices
4,? 安裝軟件
adb install xxx.apk
5,? 卸載軟件
adb uninstall xxx.apk
6,? 進(jìn)入設(shè)備或模擬器
adb shell ?devicename
如果當(dāng)前只有一個設(shè)備,devicename也可以為空
7,? 從電腦上發(fā)送文件到設(shè)備
adb push? PCfilepath?devicepath
8,? 從設(shè)備上copy文件到電腦
adb pull devicepath? PCpath
9,? 查看bug報告
adb bugreport
10, 獲得設(shè)備序列ID
adb get-product
11, 查看log
adb logcat
轉(zhuǎn)載于:https://www.cnblogs.com/shengs/p/10177801.html
總結(jié)
以上是生活随笔為你收集整理的Android手机用wifi连接adb调试的方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蚂蚁金服亿级并发下的移动端到端网络接入架
- 下一篇: Android 撸起袖子,自己封装 Di