一、脚本功能说明
本教程将教你如何编写一个自动化关闭应用的 Hamibot 脚本。该脚本支持通过应用名称或包名定位目标应用,并模拟用户操作完成应用的强制关闭。
二、核心代码解析
function closeApp(appName) {
// 1. 获取应用包名
var name = getPackageName(appName); // 尝试通过应用名称获取包名
if (!name) {
// 如果未找到包名
if (getAppName(appName)) {
// 检查参数是否为包名
name = appName; // 确认参数是包名
} else {
return false; // 应用不存在返回失败
}
}
// 2. 进入应用设置页
app.openAppSetting(name); // 打开应用详情页
text(app.getAppName(name)).waitFor(); // 等待应用名称出现确认界面跳转
sleep(500); // 界面加载延迟(可选)
// 3. 查找关闭控件
let is_sure = textMatches(/(.*强.*|.*停.*|.*结.*)/).findOne(); // 匹配包含"强/停/结"字样的控件
if (is_sure.enabled()) {
// 检查控件是否可用
is_sure.parent().click(); // 点击父控件(解决控件不可点击问题)
// 4. 处理确认弹窗
textMatches(/(.*确.*|.*定.*)/)
.findOne()
.click(); // 确认关闭操作
log(app.getAppName(name) + ' 已关闭');
sleep(1000);
back(); // 返回上级界面
} else {
log('无法关闭 ' + app.getAppName(name));
back();
}
}
// 使用示例
closeApp('微信');
三、关键函数详解
- 应用信息获取
var name = getPackageName('微信'); // 通过应用名称获取包名(返回:com.tencent.mm)
var appName = getAppName('com.tencent.mm'); // 通过包名获取应用名称(返回:微信)
getPackageName():将应用名称转换为对应包名
getAppName():将包名转换为应用名称
app.getInstalledPackages():获取所有已安装应用的包名列表
- 应用操作函数
app.openAppSetting('com.tencent.mm'); // 打开微信的设置页
launchApp('微信'); // 通过名称启动应用
launch('com.tencent.mm'); // 通过包名启动应用
- 界面操作函数
text('微信').waitFor(); // 等待"微信"文字出现
textMatches(/微信/).findOne(); // 正则匹配查找控件
click(100, 200); // 点击坐标(示例)
四、核心逻辑流程图
开始
│
├─ 输入应用名称/包名 → 获取包名(name)
│
├─ 打开应用设置页 → 等待界面跳转
│
├─ 查找"强制/停止/结束"控件
│
├─ 如果控件可用:
│ ├─ 点击父控件 → 确认关闭 → 返回成功
│
└─ 否则 → 返回错误信息
五、使用示例
// 方式1:通过应用名称关闭
closeApp('微信');
// 方式2:通过包名关闭
closeApp('com.tencent.mm');
// 批量关闭多个应用
var apps = ['QQ', '支付宝', 'com.example.test'];
apps.forEach((app) => closeApp(app));
六、注意事项
界面差异处理:
不同系统/应用的设置界面可能不同,需调整正则表达式:
// 可修改为精确匹配
text('结束进程').findOne();
部分控件需要多级父元素点击:
is_sure.parent().parent().click();
权限要求:
需要设备已授权 Hamibot 的「无障碍服务权限」