哟...好久没更新文章了.嘿嘿, 今天得空儿,更新一篇~
关于adb权限老生常谈的问题,Shizuku的激活状态莫名其妙掉了再次激活很麻烦,所以啊在执行需要用到ADB权限的脚本时,在脚本代码前加上我今天讲的知识,就无须担心这个问题.检测如果没有adb权限.就自动去激活一下Shizuku. 首先说一下整个流程的原理.
关于无线ADB:
无线ADB就是在手机上打开一个adb的端口. 默认是 5555, 但是开这个端口的前提是.需要手机连接电脑打开手机的adb调试之后,在电脑的终端上执行一条命令
adb tcpip 5555
执行之后无线ADB算是开放了.此时拔掉数据线. 在终端输入
adb connect 192.168.1.80 #自己替换成自己手机的IP
connected to 192.168.1.80:5555 #出现这个提示,说明连接成功了
这就是无线的方式连接adb调试, 但是它有一个弊端.就是每次重启后这个adb的端口就会被重置了,需要重新连接数据线进行开启
关于Termux:
Termux之前讲过是一个Android端的终端仿真器,有很多的软件可安装.这里面就需要用到adb工具了, adb这个可执行程序在android-tools这个软件包中,需要在Termux里面先安装它,安装命令如下:
pkg install -y android-tools
加-y参数会直接跳过确认提醒直接一步安装完毕.我就不截图了,你们自己执行一下就好.安装完毕后Termux的准备也就完成了.
Shizuku激活命令:
adb shell sh /storage/emulated/0/Android/data/moe.shizuku.privileged.api/start.sh
执行阶段:
关于Autojs如何调用Termux. 原理和方法请参考上一篇发的文章
注意这篇文章一定要看. 否则你的Termux不能从外部被调用的. 需要改包.因为Autojs没有调用Termux的权限.
这里我需要Ctrl+CV一下. 请骚等我一下...
好了...代码copy完成了
//判断autojs是否有adb权限
let adbCheck = $shell.checkAccess("adb");
if (!adbCheck) {
console.log("没有adb权限");
app.launchApp("Termux");
let szkCommand = "adb shell sh /storage/emulated/0/Android/data/moe.shizuku.privileged.api/start.sh";
runShellToTermux(szkCommand);
} else {
console.log("已有adb权限");
}
//将autojs的shell切换到adb权限
$shell.setDefaultOptions({adb: true});
//在此之后执行你需要的操作
/**
* 使用termux终端执行shell命令
* @param {string} cmd 需要执行的命令
* @param {string} workdir shell的工作目录 不填则默认 "/sdcard/脚本/"
* @param {boolean} backgound 是否前台运行 不填则默认后台运行
* @return {void} 没有返回值
*/
function runShellToTermux(cmd, workdir, backgound) {
let shellStr = cmd;
let workDir = workdir || "/sdcard/脚本/";
let bg = backgound || true;
let strArry = shellStr.split(" ");
let strArryLength = strArry.length - 1;
let command = strArry[0];
let per = util.java.array('string', strArryLength);
for (let i = 0; i < strArryLength; i++) {
per[i] = strArry[i+1];
}
let intent = new Intent();
intent.setClassName("com.termux", "com.termux.app.RunCommandService");
intent.setAction("com.termux.RUN_COMMAND");
intent.putExtra("com.termux.RUN_COMMAND_PATH", "/data/data/com.termux/files/usr/bin/" + command);
intent.putExtra("com.termux.RUN_COMMAND_ARGUMENTS", per);
intent.putExtra("com.termux.RUN_COMMAND_WORKDIR", workDir); //工作目录
intent.putExtra("com.termux.RUN_COMMAND_BACKGROUND", bg); //是否后台运行
intent.putExtra("com.termux.RUN_COMMAND_SESSION_ACTION", "0");
context.startService(intent);
}
全部0条评论
快来发表一下你的评论吧 !