自动激活Shizuku

描述

哟...好久没更新文章了.嘿嘿, 今天得空儿,更新一篇~

关于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

adb

执行阶段:

关于Autojs如何调用Termux. 原理和方法请参考上一篇发的文章

传送门: 利用Autojs调用termux的内部命令

注意这篇文章一定要看. 否则你的Termux不能从外部被调用的. 需要改包.因为Autojs没有调用Termux的权限.

这里我需要Ctrl+CV一下. 请骚等我一下...

adb

好了...代码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);
}
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分