Directory Opus 13.6 可用的apk文件右键菜单脚本

// apk文件的右键经过adb安装的脚本,可以在多个设备中选择

function OnClick(clickData) {
    try {
      
 		// 检查是否选中了文件
        if (clickData.func.sourcetab.selected_files.count == 0) {
            DOpus.Output("没有选中任何文件");
            return;
        }
        // 获取选中的文件名
        var selectedFile = clickData.func.sourcetab.selected_files(0).realpath;
        DOpus.Output("选中的文件: " + selectedFile);
        // 创建 WScript.Shell 对象
        var WshShell = new ActiveXObject("WScript.Shell");
        // 调试输出,确认 WshShell 对象是否创建成功
        DOpus.Output("WshShell 对象创建成功");

        // 使用完整路径或确保 adb 在环境变量路径中
        var adbPath = "adb"; // 如果 adb 在环境变量中
        var adbExec = WshShell.Exec(adbPath + " devices -l");
        // 调试输出,确认命令是否成功执行
        DOpus.Output("adb 命令已执行");

        // 等待命令执行完成
        while (adbExec.Status == 0) {
            DOpus.Output("等待 adb 命令完成...");
            DOpus.Delay(500);
        }

        // 输出命令的退出代码
        DOpus.Output("adb 命令退出代码: " + adbExec.ExitCode);
        // 输出命令的标准输出
        var output = adbExec.StdOut.ReadAll();
        DOpus.Output("adb 命令输出: " + output);
        // 输出命令的错误输出
        var errorOutput = adbExec.StdErr.ReadAll();
        if (errorOutput) {
            DOpus.Output("adb 命令错误输出: " + errorOutput);
        }

        // 解析 adb 命令的输出,提取设备信息
        var deviceList = [];
        var lines = output.split('\n');
        for (var i = 1; i < lines.length; i++) {
            var line = lines[i];
            if (line) {
                var parts = line.split(/\s+/);
                if (parts.length > 2) {
                    var deviceId = parts[0];
                    var model = "";
                    for (var j = 0; j < parts.length; j++) {
                        if (parts[j].indexOf("model:") === 0) {
                            model = parts[j].split(':')[1];
                            break;
                        }
                    }
					DOpus.Output("deviceId "+deviceId+" model  "+model);
                    deviceList.push({id: deviceId, model: model});
                }
            }
        }
        // 如果没有设备,输出提示信息
        if (deviceList.length === 0) {
            DOpus.Output("没有检测到设备"+deviceList);
            return;
        }

        // 创建选择对话框
        var dlg = clickData.func.dlg;
        dlg.title = "选择设备";
        dlg.message = "请选择一个设备进行安装:";
        var buttons = "";
       for (var k = deviceList.length - 1; k >= 0; k--) {
            if (buttons.length > 0) {
                buttons += "|";
            }
            buttons += deviceList[k].model;
        }
        dlg.buttons = buttons;
        dlg.Show();

         var selectedIndex = dlg.result;
		 DOpus.Output("selectedIndex = "+selectedIndex);
        if (selectedIndex < 0) {
            DOpus.Output("用户未选择任何设备");
            return;
        }
        // 根据选择的索引获取设备ID
        var deviceId = deviceList[selectedIndex].id;
        // 执行 adb install 命令
        var apkPath = selectedFile; // 使用选中的 APK 文件路径
        var installCmd = adbPath + " -s " + deviceId + " install " + apkPath;
        DOpus.Output("执行命令: " + installCmd);
        var installExec = WshShell.Exec(installCmd);
        // 等待安装命令完成
        while (installExec.Status == 0) {
            DOpus.Output("等待 adb install 命令完成...");
            DOpus.Delay(500);
        }

        // 输出安装命令的退出代码
        DOpus.Output("adb install 命令退出代码: " + installExec.ExitCode);
         // 输出安装命令的标准输出
        var installOutput = installExec.StdOut.ReadAll();
        DOpus.Output("adb install 命令输出: " + installOutput);
        // 输出安装命令的错误输出
        var installErrorOutput = installExec.StdErr.ReadAll();
        if (installErrorOutput) {
            DOpus.Output("adb install 命令错误输出: " + installErrorOutput);
        }
    } catch (e) {
        // 捕获并输出错误信息
        DOpus.Output("发生错误: " + e.message);
    }
}

安装方法

  1. Directory Opus 13.6 设置->文件类型:

  2. 搜索apk

在这里插入图片描述

  1. 选择新建

在这里插入图片描述

使用

在这里插入图片描述

在这里插入图片描述

选择对应的设备就可以了,存在的问题是会弹出命令行的黑框.但是比输序号还是要方便,优雅一些

另有双击安装的版本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/689792.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

聆思CSK6大模型开发板英语评测类开源SDK详解

离线英文评测算法SDK 能力简介 CSK6 大模型开发套件可以对用户通过语音输入的英文单词进行精准识别&#xff0c;并对单词的发音、错读、漏读、多读等方面进行评估&#xff0c;进行音素级的识别&#xff0c;根据用户的发音给出相应的建议和纠正&#xff0c;帮助用户更好地掌握单…

Java学习书籍推荐

本文推荐了Java基础&#xff0c;并发&#xff0c;虚拟机学习过程中&#xff0c;比较好的书籍&#xff0c;如果大家需要视频教程&#xff0c;可参考【软件开发】Java学习路线 或者B站文件夹同时会收藏其他Java视频&#xff0c;感谢关注。 指路&#xff1a;Java学习-创建者&…

全光网络与传统网络架构的对比分析

随着信息技术的飞速发展&#xff0c;网络已经成为我们日常生活中不可或缺的一部分。在这个信息爆炸的时代&#xff0c;全光网络和传统网络架构作为两种主流的网络技术&#xff0c;各有其特点和适用范围。本文将对这两种网络架构进行详细的对比分析&#xff0c;帮助读者更好地了…

【TB作品】MSP430F5529 单片机,简单电子琴

使用MSP430制作一个简单电子琴 作品功能 这个项目基于MSP430单片机&#xff0c;实现了一个简单的电子琴。通过按键输入&#xff0c;电子琴可以发出对应的音符声音。具体功能包括&#xff1a; 按下按键时发出对应音符的声音。松开按键时停止发声。支持C调低音、中音和高音。 …

nomachine使用记录以及录包

录包命令&#xff1a; rosbag record 话题名字&#xff08;可以是原相机话题和执行程序的话题&#xff09;rosbag play 包名&#xff08;可以离线播放包的数据&#xff09; rqt_image_view 话题可视化

从VS Code源码看清晰代码之美

VS Code的产品做的很优秀&#xff0c;其源码也质量颇高&#xff0c;清晰、整洁、富有美感。 下面是 src\vs\workbench\common\notifications.ts 文件中的两段代码&#xff0c;大家感受一下&#xff1a; get sticky(): boolean {if (this._sticky) {return true; // explicitl…

2024上海初中生古诗文大会倒计时4个多月:单选题真题和独家解析

现在距离2024年初中生古诗文大会还有4个多月时间&#xff0c;我们继续来看10道选择题真题和详细解析&#xff0c;以下题目截取自我独家制作的在线真题集&#xff0c;都是来自于历届真题&#xff0c;去重、合并后&#xff0c;每道题都有参考答案和解析。 为帮助孩子自测和练习&…

Redis到底支不支持事务?

文章目录 一、概述二、使用1、正常执行&#xff1a;2、主动放弃事务3、全部回滚:4、部分支持事务:5、WATCH: 三、事务三阶段四、小结 redis是支持事务的&#xff0c;但是它与传统的关系型数据库中的事务是有所不同的 一、概述 概念: 可以一次执行多个命令&#xff0c;本质是一…

STM32项目分享:智能家居安防系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板及元器件图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片&#xff1a; 哔哩哔哩视频链接&#xff1a; https://www.bilibili.c…

【数据分析基础】实验numpy、pandas和matplolib

文件score.xlsx 中存放了学生的各个科目的考试成绩&#xff08;如下图&#xff09;&#xff0c; 1. 编程实现&#xff1a;输入任意一个学号&#xff0c;将该学号对应的成绩&#xff0c;通过雷达图显示。 &#xff08;1&#xff09;程序代码&#xff1a; import pandas as pd…

9.1 Go 接口的定义

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

JavaScript 动态网页实例 —— 图像显示

图像是网页设计中必不可少的内容之一,而图像的显示方式更是关系到网站的第一印象。本章介绍图像的显示,主要包括:图片的随机显示、图像的显示和隐藏、图像的滚动显示、图像的探照灯扫描显示、多幅图像的翻页显示、图像的水纹效果显示、全景图效果显示手电照射效果显示以及雷达…

16_ Vue.js高级指南:条件渲染、列表渲染与数据双向绑定

文章目录 1. 条件渲染v-if2. 列表渲染v-for3. 数据双项绑定v-model4. 计算属性Appendix 1. 条件渲染v-if v-if标签直接接收函数或boolean类型变量 v-if 为true&#xff0c;则当前元素会进入到dom树v-else会自动执行 前方v-if的取反操作 v-show v-show值为true则值展示值不展示…

【Python】解决Python报错:TypeError: ‘int‘ object is not callable

​​​​ 文章目录 引言1. 错误详解2. 常见的出错场景2.1 误用变量名2.2 混淆函数与结果 3. 解决方案3.1 明确变量类型3.2 使用函数调用() 4. 预防措施4.1 代码审查4.2 单元测试 结语 引言 在Python开发中&#xff0c;TypeError 是一种常见的错误类型&#xff0c;尤其是在尝试…

kafka-重试和死信主题(SpringBoot整合Kafka)

文章目录 1、重试和死信主题2、死信队列3、代码演示3.1、appication.yml3.2、引入spring-kafka依赖3.3、创建SpringBoot启动类3.4、创建生产者发送消息3.5、创建消费者消费消息 1、重试和死信主题 kafka默认支持重试和死信主题 重试主题&#xff1a;当消费者消费消息异常时&…

C++基础7:STL六大组件

目录 一、标准容器 1、顺序容器 vector ​编辑 deque list 容器适配器 stack queue prority_queue: 关联容器 有序关联容器set、mutiset、map、mutimap 增删查O(log n) 无序关联容 unordered_set、unordered_mutiset、unordered_map、unordered_mutimap 增删…

C语言实现map数据结构 key—value对应

1.首先43行 createKeyValuePair(char*key ,int value)这个函数就是给一个keyValuePair *pair的指针来通过内存分配将数据key和value存入这个pair指针所对应的内存空间 2.52行freeKeyValuePair这个函数是释放内存空间 3.头文件 struct结构体KeyValuePair就是一个指针一个值 4…

个人博客的未来出路在哪里?

说起个人博客的未来这就是个悲伤的话题,估计不少个人博客站长们都在苦苦的坚持和挣扎着吧,反正明月这两年感受最深刻的就是又有不少个人博客站点停更和 404 了都。自从坚持写博客这近十来年这种情况也都见怪不怪了,但这两年最突出的就是很多站长都是迷茫和悲观。 明月去年在…

Vue CLI 环境变量使用指南

一、简介 Vue CLI 是一个强大的前端工程化工具&#xff0c;它提供了丰富的配置选项&#xff0c;包括环境变量的管理。环境变量允许开发者根据不同的运行环境&#xff08;如开发、测试和生产&#xff09;应用不同的配置&#xff0c;而无需更改代码。本文将详细介绍如何在 Vue C…

AI图书推荐:用ChatGPT来写非虚构类书籍

这本书《用ChatGPT来写非虚构类书籍 》&#xff08;ChatGPT For KDP_ A manual from an experienced self-publisher to nonfiction authors for writing the book you were born to write with ChatGPT prompts mastering&#xff09;是一本专为非虚构类书籍作者编写的指南&am…