牙叔教程 簡單易懂
無線調試是什麼
安卓11增加了無線調試開關, 也就是完全不用資料線, 隻要手機和電腦在同一個區域網路, 就可以進行adb調試,
無線調試開啟方法請參考: Wi-Fi 調試(Android 11 及更高版本,無需借助 USB)
無線調試流程
- 每次連接配接的ip基本是固定的, 但是port端口是随機的, 是以每次都要擷取最新的端口
- 在指令行中輸入 adb connect 192.168.101.31:38549
看上去隻有兩步, 但是每一步都有N步, 細分下來是這樣的步驟:
- 手機回到桌面
- 眼睛看設定圖示在哪裡
- 點選設定圖示
- 往下翻找到更多設定
- 再往下翻找到開發者選項
- 再往下翻找到無線調試
- …
是不是步驟細分之後, 特别特别的繁瑣, 凡事就怕細究,
下面我們來做成半自動的方法, 就不用每次都做這麼繁瑣的事情了
半自動無線調試流程
- 擷取ip和port, 并用機器人發送到釘釘
- 手動複制釘釘消息中的指令
- 點選bat
看上去隻有3個步驟, 實際上細究下來, 還是有些麻煩, 不過起碼比上面的繁瑣程度低一些
源碼講解
擷取ip和port
我是小米11pro, 有些代碼隻有小米才能用, 比如 .className(“miui.widget.ClearableEditText”)
擷取ip的代碼流程已經有非常詳細的注釋了, 相信使用小米手機的使用者能看懂
這是autojs執行的代碼
function getIpPort() {
// 打開設定
app.startActivity({
packageName: "com.android.settings",
className: "com.android.settings.SubSettings",
});
text("搜尋系統設定項").visibleToUser(true).boundsInside(0, 0, device.width, device.height).waitFor();
// 點選搜尋框
let view = idEndsWith("input").visibleToUser(true).boundsInside(0, 0, device.width, device.height).findOne();
view.parent().parent().click();
view = text("取消").visibleToUser(true).boundsInside(0, 0, device.width, device.height).waitFor();
// 輸入 無線調試
view = visibleToUser(true)
.className("miui.widget.ClearableEditText")
.boundsInside(0, 0, device.width, device.height)
.findOne();
view.setText("無線調試");
// 點選 無線調試
view = text("無線調試")
.className("android.widget.TextView")
.visibleToUser(true)
.boundsInside(0, 0, device.width, device.height)
.findOne();
view.parent().parent().click();
// 擷取ip和端口
view = textMatches(/192\.168.*/)
.className("android.widget.TextView")
.visibleToUser(true)
.boundsInside(0, 0, device.width, device.height)
.findOne();
return view.text();
}
用機器人發送到釘釘
添加機器人的方法, 也有詳細的注釋, 跟着操作即可.
找這個添加機器人的入口, 我都花了一些時間, 因為釘釘的界面和原來還不一樣.
注意一下發送的消息, 直接就是 adb connect 192.168.101.31:38549,
一會你複制的時候, 就是複制這條消息
這是autojs執行的代碼
function sendInfo(info) {
// 打開釘釘群聊
// 點選右上角設定
// 點選智能群助手
// 點選添加機器人
// 點選添加機器人
// 點選自定義
// 點選添加
let token = "78a6e03a7854e5xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
let url = "https://oapi.dingtalk.com/robot/send?access_token=" + token;
var temp = http.postJson(url, { msgtype: "text", text: { content: 'adb connect ' + info + " \n\n來自 牙叔教程" } });
log(temp.body.string());
}
到了這一步, 需要手動複制一下 adb connect 192.168.101.31:38549
點選bat
這段代碼的意思是
擷取剪貼闆内容, 然後cmd執行剪貼闆内容, 精華部分是第一句
這是電腦執行的代碼, 寫入一個bat檔案, 輕按兩下bat檔案即可
' 2>nul&@start wscript -e:vbs "%~f0"&goto :eof
Set objHTML=CreateObject("htmlfile")
ClipboardText=objHTML.ParentWindow.ClipboardData.GetData("text")
set fso=wscript.createobject("scripting.filesystemobject")
set file=fso.opentextfile("123.txt",2,true)
file.writeline ClipboardText
Set obj = createobject("wscript.shell")
obj.run "cmd /c " & ClipboardText
上面的代碼巧妙利用 bat 和 vbs 的文法特征,讓同一個檔案,被 cmd.exe 識别成批處理,讓 wscrpt.exe 識别成 vbs,并且同時符合兩者的文法,并且保證都沒有錯誤,保證兩者的高度相容。就叫它 bat/vbs 複合程式設計吧 (Hybrid Programming)
start wscript -e:vbs “%~f0”
cmd.exe 識别成:啟動 wscript.exe ,其參數是:
① -e:vbs 設定以vbs解析檔案自身
② “%~f0” 指這個批處理本身。
wscript.exe 把這句識别成:調用一個叫 start 的函數,函數參數是 wscript 這個變量,然後用這個函數的結果來 減去 e。接下來是又是一個 : ,分行,然後又是調用一個名叫 vbs 的函數,參數是字元: “%~f0”
這句是最為精巧的,因為它成功的讓 vbs 引擎解釋了一段批處理,而且沒有錯誤!當然這些 start()、vbs()函數是不存在的,但是會被 cmd.exe 當成指令執行。為什麼不用 wscript //e:vbs “%~f0” 來執行呢?vbs解析會出錯的,呵呵
環境
手機: Mi 11 Pro
Android版本: 11
Autojs版本: 9.0.11
電腦: win10
參考
批進行中直接執行vbs的方法
批處理儲存剪貼闆資訊
名人名言
思路是最重要的, 其他的百度, bing, stackoverflow, github, 安卓文檔, autojs文檔, 最後才是群裡問問
— 牙叔教程
聲明
部分内容來自網絡
本教程僅用于學習, 禁止用于其他用途
bilibili
牙叔教程
微信公衆号 牙叔教程
QQ群
747748653