「这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战」
牙叔教程 简单易懂
无线调试是什么
安卓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
参考
名人名言
思路是最重要的, 其他的百度, bing, stackoverflow, github, 安卓文档, autojs文档, 最后才是群里问问 — 牙叔教程
声明
部分内容来自网络 本教程仅用于学习, 禁止用于其他用途
微信公众号 牙叔教程
今天的文章半自动开启adb无线调试分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/17384.html