B2B网络软件

标题: AIWROK软件代理模式一键删除桌面所有APP版示例 [打印本页]

作者: YYPOST群发软件    时间: 1 小时前
标题: AIWROK软件代理模式一键删除桌面所有APP版示例

AIWROK软件代理模式一键删除桌面所有APP版示例


AIWROK软件代理模式一键删除桌面所有APP版示例 B2B网络软件
  1. //// AIWROK软件代理模式一键删除桌面所有APP版示例
  2. // 使用pm uninstall命令批量卸载第三方应用

  3. print.log("===== agent 代理 API 一键删除所有应用版 =====");
  4. print.log("📌 重要提示:请确保手机屏幕当前显示桌面!");

  5. var 屏幕宽 = screen.getScreenWidth();
  6. var 屏幕高 = screen.getScreenHeight();
  7. print.log("当前屏幕:" + 屏幕宽 + " x " + 屏幕高);

  8. var 排除包名列表 = [
  9.     "com.android.launcher3",
  10.     "com.android.settings",
  11.     "com.android.systemui",
  12.     "com.android.phone",
  13.     "com.android.mms",
  14.     "com.android.camera",
  15.     "com.android.contacts",
  16.     "com.android.dialer",
  17.     "com.android.email",
  18.     "com.android.calendar",
  19.     "com.android.gallery",
  20.     "com.android.filemanager",
  21.     "com.android.browser",
  22.     "com.android.inputmethod",
  23.     "com.google.android",
  24.     "com.android.webview",
  25.     "com.android.fallback",
  26.     "com.android.providers",
  27.     "com.android.server",
  28.     "com.android.internal",
  29.     "com.android.location",
  30.     "com.android.wifi",
  31.     "com.android.bluetooth",
  32.     "com.android.nfc",
  33.     "com.android.usb",
  34.     "com.android.media",
  35.     "com.android.audio",
  36.     "com.android.soundrecorder",
  37.     "com.android.packageinstaller",
  38.     "com.android.vending",
  39.     "com.android.market",
  40.     "com.android.keychain",
  41.     "com.android.print",
  42.     "com.android.dreams",
  43.     "com.android.externalstorage",
  44.     "com.android.sharedstoragebackup",
  45.     "com.android.backup",
  46.     "com.android.proxyhandler",
  47.     "com.android.captiveportallogin",
  48.     "com.android.documentsui",
  49.     "com.android.pacprocessor",
  50.     "com.android.storagemanager",
  51.     "com.android.managedprovisioning",
  52.     "com.android.cts",
  53.     "com.android.flags",
  54.     "com.android.egg",
  55.     "com.android.framework",
  56.     "com.android.settings.intelligence",
  57.     "com.android.shell",
  58.     "com.android.system",
  59.     "com.android.traceur",
  60.     "com.android.uirenderer",
  61.     "com.android.wallpaper",
  62.     "com.android.wallpaper.livepicker",
  63.     "com.android.launcher",
  64.     "com.android.inputmethod.latin",
  65.     "com.android.inputmethod.pinyin",
  66.     "com.android.inputmethod.sogou",
  67.     "com.baidu.input",
  68.     "com.tencent.input",
  69.     "io.aiwork",
  70.     "com.aiwork",
  71.     "aiwork",
  72.     "com.layernet.launcher",
  73.     "com.autoapp"
  74. ];

  75. function 是否排除包名(pkg) {
  76.     for (var i = 0; i < 排除包名列表.length; i++) {
  77.         var exclude = 排除包名列表[i];
  78.         if (pkg === exclude || pkg.indexOf(exclude) === 0) {
  79.             return true;
  80.         }
  81.     }
  82.     if (pkg.indexOf("com.android.") === 0) {
  83.         return true;
  84.     }
  85.     if (pkg.indexOf("android.") === 0) {
  86.         return true;
  87.     }
  88.     return false;
  89. }

  90. function 执行Shell(cmd) {
  91.     var 结果 = agent.shell(cmd);
  92.     if (!结果) return "";
  93.    
  94.     var 结果字符串 = "";
  95.     if (typeof 结果 === "string") {
  96.         结果字符串 = 结果;
  97.     } else if (结果.toString) {
  98.         结果字符串 = 结果.toString();
  99.     } else {
  100.         结果字符串 = "" + 结果;
  101.     }
  102.    
  103.     var startIdx = -1;
  104.     if (typeof 结果字符串.indexOf === "function") {
  105.         startIdx = 结果字符串.indexOf("successMsg:");
  106.     }
  107.    
  108.     var content = "";
  109.     if (startIdx !== -1) {
  110.         var afterSuccess = 结果字符串.substring(startIdx + 11);
  111.         var errorIdx = afterSuccess.indexOf(",errorMsg:");
  112.         if (errorIdx !== -1) {
  113.             content = afterSuccess.substring(0, errorIdx);
  114.         } else {
  115.             content = afterSuccess;
  116.         }
  117.         content = content.trim();
  118.     } else {
  119.         content = 结果字符串;
  120.     }
  121.    
  122.     return "" + content;
  123. }

  124. function 获取UI() {
  125.     var 临时文件 = "/sdcard/ui_dump.xml";
  126.     agent.shell("uiautomator dump --compressed " + 临时文件 + " 2>/dev/null");
  127.     return 执行Shell("cat " + 临时文件);
  128. }

  129. function 解析包名列表(结果) {
  130.     var packages = [];
  131.     var pkgParts = 结果.split("package:");
  132.     for (var i = 0; i < pkgParts.length; i++) {
  133.         var pkg = pkgParts[i].trim();
  134.         if (pkg !== "") {
  135.             var endIdx = pkg.indexOf("\n");
  136.             if (endIdx !== -1) {
  137.                 pkg = pkg.substring(0, endIdx).trim();
  138.             }
  139.             endIdx = pkg.indexOf("package:");
  140.             if (endIdx !== -1) {
  141.                 pkg = pkg.substring(0, endIdx).trim();
  142.             }
  143.             if (pkg !== "" && !是否排除包名(pkg) && packages.indexOf(pkg) === -1) {
  144.                 packages.push(pkg);
  145.             }
  146.         }
  147.     }
  148.     return packages;
  149. }

  150. function 获取所有应用包名() {
  151.     print.log("&#128269; 正在获取所有应用包名...");
  152.     var 结果 = 执行Shell("pm list packages");
  153.     print.log("&#128221; pm list packages 返回:" + 结果.substring(0, 200) + "...");
  154.     return 解析包名列表(结果);
  155. }

  156. function 获取第三方应用包名() {
  157.     print.log("&#128269; 正在获取第三方应用包名...");
  158.     var 结果 = 执行Shell("pm list packages -3");
  159.     print.log("&#128221; pm list packages -3 返回:" + 结果.substring(0, 200) + "...");
  160.    
  161.     var packages = 解析包名列表(结果);
  162.    
  163.     if (packages.length === 0) {
  164.         print.log("⚠ pm list packages -3 返回0个,尝试不带-3参数...");
  165.         return 获取所有应用包名();
  166.     }
  167.     return packages;
  168. }

  169. function 卸载应用(pkg) {
  170.     var 纯净包名 = pkg;
  171.     if (纯净包名.indexOf("/") !== -1) {
  172.         纯净包名 = 纯净包名.substring(0, 纯净包名.indexOf("/"));
  173.     }
  174.     if (纯净包名.indexOf(" ") !== -1) {
  175.         纯净包名 = 纯净包名.substring(0, 纯净包名.indexOf(" "));
  176.     }
  177.     if (纯净包名.indexOf("(") !== -1) {
  178.         纯净包名 = 纯净包名.substring(0, 纯净包名.indexOf("("));
  179.     }
  180.     纯净包名 = 纯净包名.trim();
  181.    
  182.     print.log("&#128260; 正在卸载:" + pkg + " -> 纯净包名:" + 纯净包名);
  183.    
  184.     var 结果 = 执行Shell("pm uninstall " + 纯净包名);
  185.     var 结果字符串 = "" + 结果;
  186.     print.log("&#128221; 卸载返回:" + 结果字符串);
  187.    
  188.     if (结果字符串.indexOf("Success") !== -1 || 结果字符串.indexOf("success") !== -1) {
  189.         print.log("✓ 卸载成功:" + 纯净包名);
  190.         return true;
  191.     } else if (结果字符串.indexOf("not installed") !== -1 || 结果字符串.indexOf("Unknown package") !== -1) {
  192.         print.log("⚠ 未安装或已卸载:" + 纯净包名);
  193.         return false;
  194.     } else if (结果字符串.indexOf("Permission denied") !== -1) {
  195.         print.log("⚠ 权限不足,尝试使用su...");
  196.         结果 = 执行Shell("su -c 'pm uninstall " + 纯净包名 + "'");
  197.         结果字符串 = "" + 结果;
  198.         print.log("&#128221; su卸载返回:" + 结果字符串);
  199.         if (结果字符串.indexOf("Success") !== -1 || 结果字符串.indexOf("success") !== -1) {
  200.             print.log("✓ 使用su卸载成功:" + 纯净包名);
  201.             return true;
  202.         }
  203.         print.log("✗ 权限不足,无法卸载:" + 纯净包名);
  204.         return false;
  205.     } else {
  206.         print.log("✗ 卸载失败:" + 纯净包名 + ",返回:" + 结果字符串.trim());
  207.         return false;
  208.     }
  209. }

  210. print.log("\n--- 步骤1:开始实时批量卸载 ---");
  211. var 成功数 = 0;
  212. var 失败数 = 0;
  213. var 已卸载列表 = [];
  214. var 未卸载列表 = [];
  215. var 已尝试集合 = {};

  216. while (true) {
  217.     var 待卸载列表 = 获取第三方应用包名();
  218.    
  219.     print.log("\n&#128203; 当前待卸载应用共 " + 待卸载列表.length + " 个");
  220.     if (待卸载列表.length > 0) {
  221.         print.log("   列表:" + 待卸载列表.join(", "));
  222.     }
  223.    
  224.     if (待卸载列表.length === 0) {
  225.         print.log("✓ 未找到可卸载的应用,结束卸载");
  226.         break;
  227.     }
  228.    
  229.     var 找到新应用 = false;
  230.     for (var i = 0; i < 待卸载列表.length; i++) {
  231.         var pkg = 待卸载列表[i];
  232.         
  233.         if (!已尝试集合[pkg]) {
  234.             找到新应用 = true;
  235.             已尝试集合[pkg] = true;
  236.             
  237.             var success = 卸载应用(pkg);
  238.             if (success) {
  239.                 成功数++;
  240.                 已卸载列表.push(pkg);
  241.             } else {
  242.                 失败数++;
  243.                 未卸载列表.push(pkg);
  244.             }
  245.             
  246.             sleep.second(1);
  247.             break;
  248.         } else {
  249.             print.log("⚠ " + pkg + " 已尝试过,跳过");
  250.         }
  251.     }
  252.    
  253.     if (!找到新应用) {
  254.         print.log("✓ 所有应用都已尝试过,结束卸载");
  255.         break;
  256.     }
  257. }

  258. print.log("\n--- 步骤2:卸载结果统计 ---");
  259. print.log("&#128202; 卸载统计:");
  260. print.log("  ✅ 成功:" + 成功数 + " 个");
  261. print.log("  ❌ 失败:" + 失败数 + " 个");

  262. if (已卸载列表.length > 0) {
  263.     print.log("\n✅ 成功卸载的应用:");
  264.     for (var i = 0; i < 已卸载列表.length; i++) {
  265.         print.log("  " + (i + 1) + ". " + 已卸载列表[i]);
  266.     }
  267. }

  268. if (未卸载列表.length > 0) {
  269.     print.log("\n❌ 未卸载成功的应用:");
  270.     for (var i = 0; i < 未卸载列表.length; i++) {
  271.         print.log("  " + (i + 1) + ". " + 未卸载列表[i]);
  272.     }
  273.     print.log("\n⚠ 提示:失败的应用可能是系统应用或需要特殊权限才能卸载");
  274. }

  275. print.log("\n===== 一键删除所有应用示例结束 =====");
复制代码







欢迎光临 B2B网络软件 (http://bbs.niubt.cn/) Powered by Discuz! X3.2