喲...好久沒更新文章了.嘿嘿, 今天得空兒,更新一篇~
關于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);
}
-
代碼
+關注
關注
30文章
4788瀏覽量
68612 -
腳本
+關注
關注
1文章
389瀏覽量
14865 -
adb
+關注
關注
1文章
35瀏覽量
10425
發布評論請先 登錄
相關推薦
評論