瞭解adb
adb是安卓調試橋(Android Debug Bridge),官方中文文檔:https://developer.android.google.cn/studio/command-line/adb.html
開發PC端包括client、server兩部分,手機端是一個adbd守護進程,/dev/socket/adbd,監聽手機上5555端口;
server爲adb服務fork出得子進程,監聽PC本地5037端口,接收PC本地client的命令,並負責與mobile端建立鏈接;
client提供cmd命令輸入;client啓動時檢查server是否啓動,若未啓動則先啓動server,server通過5037端口與client建立連接;
手機端與PC端可以有兩種連接方式:TCP連接,USB連接
參考:https://blog.csdn.net/ysh149216447/article/details/53334015
實現思路:
要利用同一個wifi,使得Android真機上React Native的調試可以脫離USB連接線,思路是先通過USB連接PC與手機,通過手動設置手機與PC的TCP連接,達到脫離USB連接後,手機與PC依然可以通信的效果,這樣手機就可以繼續reload RN代碼了
以上思路的實現過程:
- 打開手機開發者調試,通過USB將手機已USB調試模式連接到PC
- PC中打開命令行,"adb devices" 確認手機與PC已連接成功
- "adb tcpip 5555",設置手機與PC以TCP方式連接時的端口爲5555
- 此時已經可以斷開手機與PC的USB連接
- "adb connect 192.168.0.199:5555",將PC通過 TCP/IP 連接到手機設備,192.168.0.199爲手機的ip,使用手機5555端口、
- 跟USB連接時一樣正常執行"adb reverse tcp:8081 tcp:8081",將手機上8081端口反向轉發到PC的8081端口(第一個8081指定手機端口,第二個8081指定PC端口)(個人理解reverse含義就是將對於目標port——即手機8081端口——的請求,反向代理到PC得8081端口進行響應)
方案一初次實踐時遇到了問題,後來請教大神才發現手機端RN搖一搖手機加載出得菜單裏有"Dev Settings"-“Debugging”-"Debug server host & port for device",填入PC的ip:端口即可,此時手機端APP指定到了pc的端口請求資源,而不是手機localhost:8081
adb connect方案遇到的問題
如下:實現思路在執行"adb connect"後,再執行"adb reverse..."會產生如下報錯:
adb: error: more than one device/emulator
但實際上此時只有一個設備連接到PC,而且使用"adb forward..."命令也並不會報類似錯誤
$ adb devices
List of devices attached
192.168.0.199:5555 device
$ ./adb version
Android Debug Bridge version 1.0.41
Version 29.0.5-5949299
stackoverflow也有兩個人遇到這個問題,暫時還沒有找到問題的原因
還有一個已經有答案的問題,但圖沒加載出來不知道是否可以參考
11.7:
突然想到出問題的機器是root過的,上網搜了下也有利用adbd漏洞提升權限的操作,難道...
結果 | 成功reverse | reverse失敗 |
手機型號 | 一加7pro | 一加5t |
操作系統版本 | 9.0 | 8.1 |
root狀態 | 未root | 已使用magisk成功root |