天天看點

半自動開啟adb無線調試

牙叔教程 簡單易懂

無線調試是什麼

安卓11增加了無線調試開關, 也就是完全不用資料線, 隻要手機和電腦在同一個區域網路, 就可以進行adb調試,

無線調試開啟方法請參考: Wi-Fi 調試(Android 11 及更高版本,無需借助 USB)

無線調試流程

  1. 每次連接配接的ip基本是固定的, 但是port端口是随機的, 是以每次都要擷取最新的端口
  2. 在指令行中輸入 adb connect 192.168.101.31:38549

看上去隻有兩步, 但是每一步都有N步, 細分下來是這樣的步驟:

  1. 手機回到桌面
  2. 眼睛看設定圖示在哪裡
  3. 點選設定圖示
  4. 往下翻找到更多設定
  5. 再往下翻找到開發者選項
  6. 再往下翻找到無線調試

是不是步驟細分之後, 特别特别的繁瑣, 凡事就怕細究,

下面我們來做成半自動的方法, 就不用每次都做這麼繁瑣的事情了

半自動無線調試流程

  1. 擷取ip和port, 并用機器人發送到釘釘
  2. 手動複制釘釘消息中的指令
  3. 點選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

牙叔教程

微信公衆号 牙叔教程

半自動開啟adb無線調試

QQ群

747748653

半自動開啟adb無線調試