AiWork、autojs、easyclick等获取并杀死后台正在运行的应用,不用无障碍清理后台应用

业务需求

获取安卓后台正在运行的应用,不依赖无障碍服务,将白名单之外的应用全部杀掉。
主要分以下步骤:
1、获取后台应用列表,得到总的数组
2、定义一个白名单列表,白名单中的应用不处理
3、对比总表和白名单表,白名单之外的应用逐个杀掉。

如果应用有无障碍权限,杀掉别的应用是很容易的。
没有无障碍的话,就要麻烦一些。需要进行一些模拟操作。

获取后台的应用列表

编写一个获取后台应用列表的方法getBackstageAppList()
该方法在AiWork、autojs、easyclick等基于JavaScript的脚本框架中,都可以使用。

Android 系统从5.1以后,通过getRunningTask或getRunningService的方式已经无法获得应用进程了(只能获得自己的进程),之后出现了以AndroidProcess库为首的一种通过读取/proc/ 进程信息的库。
但是从android 7.0开始,系统已经不支持读取/proc/

注意:有用户反馈说有的不在后台运行的应用,也拿到了。
这可能是由于安卓不同版本,以及厂商魔改的安卓版本,存在一些API差异导致的。
此问题需要自行处理。如果拿到了没在后台运行的应用,杀死应用的方法会提前结束,并不影响程序的继续执行。

获取后台应用列表

已有1人支付

在手机上打开一些应用用作测试。调用该方法,返回一个应用信息数组。

[{
    "appName": "美团",
    "packageName": "com.sankuai.meituan",
    "isSystemApp": false,
    "versionName": "12.24.406",
    "versionCode": 1200240406,
    "firstInstallTime": 1721627433000,
    "lastUpdateTime": 1725615187225
}, {
    "appName": "微信",
    "packageName": "com.tencent.mm",
    "isSystemApp": false,
    "versionName": "8.0.50",
    "versionCode": 2701,
    "firstInstallTime": 1722076544619,
    "lastUpdateTime": 1722076544619
}, {
    "appName": "微信输入法",
    "packageName": "com.tencent.wetype",
    "isSystemApp": false,
    "versionName": "1.3.2",
    "versionCode": 32201,
    "firstInstallTime": 1722136097957,
    "lastUpdateTime": 1725614828215
}, {
    "appName": "AIWork",
    "packageName": "com.autoapp.autoapp",
    "isSystemApp": false,
    "versionName": "3.0.8",
    "versionCode": 89,
    "firstInstallTime": 1722097567801,
    "lastUpdateTime": 1725441855656
}, {
    "appName": "苏宁易购",
    "packageName": "com.suning.mobile.ebuy",
    "isSystemApp": false,
    "versionName": "9.5.170",
    "versionCode": 556,
    "firstInstallTime": 1721627433000,
    "lastUpdateTime": 1726361185885
}, {
    "appName": "携程旅行",
    "packageName": "ctrip.android.view",
    "isSystemApp": false,
    "versionName": "8.74.0",
    "versionCode": 1842,
    "firstInstallTime": 1721627433000,
    "lastUpdateTime": 1726433273987
}, {
    "appName": "淘宝",
    "packageName": "com.taobao.taobao",
    "isSystemApp": false,
    "versionName": "10.40.11",
    "versionCode": 661,
    "firstInstallTime": 1721627433000,
    "lastUpdateTime": 1726342858236
}]

定义一个白名单列表

白名单中的应用,不做任何处理。

let appWhiteList = [
   {
      'appName': 'AIWork',
      'packageName': 'com.autoapp.autoapp',
   },
   {
      'appName': '微信',
      'packageName': 'com.tencent.mm',
   },
]

列表对比

获取到全部的后台应用后,和白名单列表做对比。
遇到白名单,则跳过。
不在白名单列表的,进行进程清理。

// 获取后台应用列表
let totalList = getBackstageAppList()
printl(JSON.stringify(totalList))

// 遍历总表
totalList.forEach(app => {
   // 检查packageName是否在白名单中
   let isWhiteListed = appWhiteList.some(whiteApp => whiteApp.packageName == app.packageName);

   // 如果不在白名单中,则执行一些动作
   if (!isWhiteListed) {
      console.log(`执行动作:${app.appName}`);
      // 在这里添加你的动作代码
      let packageName = app.packageName;  // 得到包名
      // 执行清理操作

   }
});

清理指定应用的进程

自己封装一个ocr找字点击的方法ocrFindEx,调用这个方法进行HID点击


/**
 * 杀死应用进程
 * @author 飞云
 * @wechat imfeiyun
 * @link  http://www.feiyunjs.com
 */
function killApp(packageName) {
   let result = false;
   let clickNum = 0;

   // 进入应用设置页面
   app.openAppSeting(packageName);
   sleep.millisecond(3 * 1000);

   while (clickNum < 3) {
      let OCRResult = screen.MLKitOcr('zh', 1);

      if (ocrFindEx(OCRResult, [
         '/.*(强行|停止|结束|运行).*/',
         '强行停止',
         '结束运行',
      ], true, 1 * 1000, [0.5, 0.5, 1, 1, '右下角'], 0.8)) {
         printl('点击:确认停止');

         result = true;
         break;
      } else if (ocrFindEx(OCRResult, [
         '/.*(强行|停止|结束|运行).*/',
         '强行停止',
         '结束运行',
      ], true, 1 * 1000, [0.5, 0, 1, 0.5, '右上角'], 0.8)) {
         printl('点击:停止');
         clickNum++;
         // } else if (ocrFindEx(OCRResult, appName, true, 1 * 1000, [0, 0, 0.5, 0.5], 0.8)) {
         //    printl('已打开应用设置');
      } else {
         printl('无法识别');
         clickNum++;
      }

      sleep.millisecond(1 * 1000);
   }

   hid.back();

   return result;
}

此外,还可以使用无障碍的节点、代理模式等方法来实现特征的查找和点击。

AiWork简介

AIWork是一款安卓和IOS手机的自动化测试开发引擎,采用免root技术,自研IDE代码编辑器,自研图色引擎2.0,自研agent adb代理模式,自研hid硬件自动化,脚本代码采用javascript脚本代码(rhino引擎),提供了众多的工具,方便自动生成js代码。

AiWork开发文档

在官方文档的基础上,进行重新排版和优化。
一个优雅的文档,对于开发体验的提升,是效果显著的。
永久域名:aiwork.wiki

1. 官方交流QQ群,添加多个不批。建议使用安卓手机或电脑申请。
飞云脚本圈: 586333520飞云脚本圈
Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » AiWork、autojs、easyclick等获取并杀死后台正在运行的应用,不用无障碍清理后台应用

企业级大数据智能营销管理系统

了解详情