Android13 串口控制是能wifi adb實現
文章目錄
- 一、前言
- 二、Android 串口控制是能wifi adb實現
- 1、通過Settings屬性控制
- 2、通過prop屬性控制
- 3、wifi adb 對應的Settings屬性和prop屬性關系
- (1)屬性監聽
- (2)相關代碼位置
- (3)wif_adb Settings屬性到prop屬性變化
- 三、其他
- 1、wifi adb 使能小結
- 2、設置usb debug模式開啟
- 3、wifi adb 的Settings和prop屬性使用技巧
- (1)通過prop屬性關鍵字adb查看和設置 wifi adb 使能
- (2)通過Settings屬性關鍵字adb查看和設置 wifi adb 使能
- 4、Android 13 wifi adb設置固定端口解決
- 5、Android13 網絡 Adb 默認開啟
一、前言
Android 系統開發初期調試,一般有串口功能調試,但是可能沒有adb功能。
adb功能比串口調試方便一些,比如可以直接傳輸文件,定向打印日志到電腦,投屏,安裝電腦中的apk等功能。
分析還是比較詳細的,有需要的可以收藏看看。目前網上是沒有詳細分析的文章的。
二、Android 串口控制是能wifi adb實現
adb 功能,必須要開啟usb 模式,我這里開發的項目都是默認開啟usb模式的。
1、通過Settings屬性控制
settings put global adb_wifi_enabled 1//獲取adb屬性,1 表示開啟,0表示關閉
settings get global adb_wifi_enabled
這個方式有一定的限制,wifi未連接的情況,設置這個屬性會失敗;
其實是代碼中檢測到屬性變化后,還好判斷wifi是否在連接狀態,
如果沒有連接wifi,就會設置屬性為0,并且關閉adb。
2、通過prop屬性控制
控制wifi adb 的端口屬性:
setprop persist.adb.tls_server.enable 1
//查詢當前adb prop屬性,1表示開啟,0 表示關閉
getprop persist.adb.tls_server.enable
通過這個方法不僅可以是能wifi adb,并且還可以是能 有線網adb,
設置這個屬性后,即使是能了adb,但是wifi adb settings屬性還是 0,Settings設置界面顯示wifi adb 還是關閉的
Android 13 以后,wifi adb的端口后默認是隨機生成的,可以使用命令查詢端口號:
//查詢wifi adb 端口號
getprop service.adb.tls.port//查詢示例,獲取到5位隨機數:
130|console:/dev # getprop service.adb.tls.port
42963
console:/dev #
連接wifi adb 命令: adb connect 192.168.XXX.XXX:12345
3、wifi adb 對應的Settings屬性和prop屬性關系
(1)屬性監聽
不管是Settings屬性還是prop屬性,系統代碼中都有進行監聽。
adb_wifi Settings 屬性是在 AdbService.java里面有監聽
adb_wifi prop屬性是在adb_wifi.cpp代碼里面監聽。
(2)相關代碼位置
//AdbService.java 代碼位置
framework\base\services\core\java\com\android\server\adb\AdbService.java
//adb_wifi.cpp 代碼位置
packages\modules\adb\daemon\adb_wifi.cpp
(3)wif_adb Settings屬性到prop屬性變化
過程:
AdbService --> IAdbManager--> adb_wifi.cpp
上層AdbService 中wifi_adb情況改變,是會調用到底層adb_wifi.cpp;
但是如果底層adb_wifi.cpp中 wifi_adb情況改變,是不會通知到AdbService;
所以具體是能wifi adb的其實是在 adb_wifi.cpp 代碼或者再往下的邏輯。
這個也是為啥直接設置prop屬性就能wifi adb生效的原因。
三、其他
1、wifi adb 使能小結
相關屬性和命令:
//Settings 設置wifi adb 使能
settings put global adb_wifi_enabled 1//獲取adb屬性,1 表示開啟,0表示關閉
settings get global adb_wifi_enabled //prop 設置wifi adb 使能
setprop persist.adb.tls_server.enable 1
//查詢當前adb prop屬性,1表示開啟,0 表示關閉
getprop persist.adb.tls_server.enable//獲取wifi adb端口號,
getprop service.adb.tls.port
wifi adb 使能的前提是需要usb開啟的,也就是要開啟usb debug模式。
2、設置usb debug模式開啟
settings put global adb_enabled 1
//查看usb debug 模式
settings get global adb_enabled
prop相關屬性,沒研究過,不做介紹。
3、wifi adb 的Settings和prop屬性使用技巧
Settings和prop屬性不想記憶,或者記不住怎么辦?
其實這wifi adb 屬性,只要記住 “adb” 這三個字母關鍵字就行了,如果這三個字母都記不住,那么耶穌也幫不了你
(1)通過prop屬性關鍵字adb查看和設置 wifi adb 使能
console:/dev #
console:/dev # getprop | grep adb //1、查詢adb prop相關屬性
[init.svc.adbd]: [running]
[init.svc_debug_pid.adbd]: [646]
[persist.adb.tls_server.enable]: [0] //2、wifi adb 開啟標識,默認為關閉,沒有端口號值
[persist.adb.wifi.guid]: [adb-f098ca85666478d6-7W3OgQ]
[persist.skg.adb.open]: [1]
[persist.sys.usb.config]: [adb]
[ro.boottime.adbd]: [8656585754]
[sys.rkadb.root]: [0]
[sys.usb.config]: [adb]
[sys.usb.state]: [adb]
console:/dev # setprop persist.adb.tls_server.enable 1 //3、設置adb 開啟的prop屬性
console:/dev #
console:/dev #
console:/dev # getprop | grep adb //4、查詢adb prop相關屬性
[init.svc.adbd]: [running]
[init.svc_debug_pid.adbd]: [646]
[persist.adb.tls_server.enable]: [1] //5、wifi adb 開啟標識
[persist.adb.wifi.guid]: [adb-f098ca85666478d6-7W3OgQ]
[persist.skg.adb.open]: [1]
[persist.sys.usb.config]: [adb]
[ro.boottime.adbd]: [8656585754]
[service.adb.tls.port]: [42963] //6、wifi adb 端口號
[sys.rkadb.root]: [0]
[sys.usb.config]: [adb]
[sys.usb.state]: [adb]
上面命令的關鍵字就是:getprop、setprop、adb、enable、port
這些關鍵字還是比較好記憶的。
(2)通過Settings屬性關鍵字adb查看和設置 wifi adb 使能
Settings 屬性其實也是可以模糊搜索的
130|console:/ # settings list global | grep adb //1、查詢adb Settings相關屬性
adb_enabled=1 //adb debug模式
adb_wifi_enabled=0 //wifi adb模式
console:/ #
console:/ # settings put global adb_wifi_enabled 1 //2、設置 adb Settings相關屬性
console:/ #
console:/ #
console:/ # settings list global | grep adb //3、查詢adb Settings相關屬性
adb_enabled=1
adb_wifi_enabled=1
console:/ #
上面命令的關鍵字就是:settings、 list 、global、adb。
如果是Android13 或者更新的版本,還需要查看adb 端口號的prop屬性的值。
值得注意的是Settings 使能adb ,前提是wifi必須要連接成功,并且是在adb debug模式。
2024-07-01更正一下:
系統燒錄后,未設置過wifi adb 的情況,是無法通過 getprop | grep adb 和 settings list global | grep adb 查詢到wifi adb 關鍵字的,默認是未設置的值,所以看不到默認值,如果是系統第一次使用adb還是要查詢或者記憶一下關鍵屬性。
4、Android 13 wifi adb設置固定端口解決
詳細內容:
https://blog.csdn.net/wenzhi20102321/article/details/131056174
上面的文章寫得比較早,對過程了解不是很熟悉,其實port屬性是沒必要設置的。
下面這個文章寫得詳細一些。
5、Android13 網絡 Adb 默認開啟
主要修改:
packages\modules\adb\daemon\adb_wifi.cpp
framework\base\services\core\java\com\android\server\adb\AdbDebuggingManager.java//修改前面兩個文件就可以實現adb了,后面的文件試輔助分析的。//雖然 SettingsProvider 也有加載 Settings屬性 Settings.Global.ADB_WIFI_ENABLED ,
//但是 prop那個屬性更優先,所以可以不用考慮這里默認情況
framework\base\packages\SettingsProvider\src\com\android\providers\settings\SettingsProvider.java//增加分析定位文件,系統服務啟動后會判斷 屬性persist.adb.tls_server.enable 進行相關操作
//如果屬性設置不生效,可以在這里添加打印日志查看過程
framework\base\services\core\java\com\android\server\adb\AdbService.java
詳細內容:
https://blog.csdn.net/wenzhi20102321/article/details/132382549