安卓AIWROK获取包名所有方法汇总

384

主题

193

回帖

2417

积分

管理员

积分
2417
安卓AIWROK获取包名所有方法汇总

1.png

2.png

3.png

4.png

  1. /*
  2. * ============================================================
  3. *  安卓AIWROK 获取包名所有方法汇总
  4. *  整理日期: 2026-07-29
  5. *  涵盖: 代理模式 / 无碍模式 / HID模式 / 通用API / 原生Android API
  6. *  样式: 黑白极简 · 几何排版 · 层次分明
  7. * ============================================================ */


  8. // ========== 工具函数 ==========

  9. function 清理shell输出(raw) {
  10.     if (!raw) return "";
  11.     var str = "" + raw;
  12.     if (str.indexOf("successMsg:") === 0) {
  13.         str = str.substring("successMsg:".length);
  14.     }
  15.     var errIdx = str.lastIndexOf(",errorMsg:");
  16.     if (errIdx !== -1) {
  17.         str = str.substring(0, errIdx);
  18.     }
  19.     return str;
  20. }

  21. function 获取列表大小(list) {
  22.     if (!list) return 0;
  23.     try {
  24.         if (typeof list.size === "function") return list.size();
  25.         if (typeof list.length === "number") return list.length;
  26.         if (list.getClass && list.getClass().isArray()) {
  27.             return java.lang.reflect.Array.getLength(list);
  28.         }
  29.     } catch (e) {}
  30.     return 0;
  31. }

  32. function 获取列表元素(list, index) {
  33.     if (!list) return null;
  34.     try {
  35.         if (list.get) return list.get(index);
  36.         if (list[index] !== undefined) return list[index];
  37.     } catch (e) {}
  38.     return null;
  39. }

  40. function 安全截取(str, maxLen) {
  41.     if (!str) return "";
  42.     var s = "" + str;
  43.     if (isNaN(maxLen) || maxLen <= 0) return s;
  44.     if (s.length <= maxLen) return s;
  45.     return s.substring(0, maxLen) + "...";
  46. }

  47. // ========== 样式函数 ==========

  48. var W = 56; // 输出宽度

  49. function 顶部框(标题) {
  50.     var line = "";
  51.     for (var i = 0; i < W - 2; i++) line += "━";
  52.     printl("┏" + line + "┓");
  53.     var padding = Math.floor((W - 2 - 标题.length) / 2);
  54.     var p = "";
  55.     for (var i = 0; i < padding; i++) p += " ";
  56.     var rightPad = "";
  57.     var total = padding * 2 + 标题.length;
  58.     for (var i = 0; i < (W - 2 - total); i++) rightPad += " ";
  59.     printl("┃" + p + 标题 + rightPad + "┃");
  60.     var line2 = "";
  61.     for (var i = 0; i < W - 2; i++) line2 += "━";
  62.     printl("┗" + line2 + "┛");
  63. }

  64. function 分隔线() {
  65.     var line = "";
  66.     for (var i = 0; i < W - 2; i++) line += "─";
  67.     printl("├" + line + "┤");
  68. }

  69. function 细分隔() {
  70.     var line = "";
  71.     for (var i = 0; i < W; i++) line += "·";
  72.     printl(line);
  73. }

  74. function 底部框(标题) {
  75.     var line = "";
  76.     for (var i = 0; i < W - 2; i++) line += "━";
  77.     var padding = Math.floor((W - 2 - 标题.length) / 2);
  78.     var p = "";
  79.     for (var i = 0; i < padding; i++) p += " ";
  80.     var rightPad = "";
  81.     var total = padding * 2 + 标题.length;
  82.     for (var i = 0; i < (W - 2 - total); i++) rightPad += " ";
  83.     printl("┏" + line + "┓");
  84.     printl("┃" + p + 标题 + rightPad + "┃");
  85.     var line2 = "";
  86.     for (var i = 0; i < W - 2; i++) line2 += "━";
  87.     printl("┗" + line2 + "┛");
  88. }

  89. function 状态(文字) {
  90.     printl("  ┌─ " + 文字);
  91. }

  92. function 数据行(标签, 值) {
  93.     printl("  │  " + 标签 + "  " + 值);
  94. }

  95. function 结果行(标签, 值) {
  96.     printl("  ● " + 标签 + "  " + 值);
  97. }

  98. function 列表项(索引, 内容) {
  99.     var num = "" + 索引;
  100.     if (num.length < 2) num = " " + num;
  101.     printl("  ┊ " + num + "  " + 内容);
  102. }

  103. // ========== 核心: 可靠获取顶端包名 ==========
  104. function 可靠获取顶端包名() {
  105.     var 方法列表 = [
  106.         { 名称: "app.getTopPackName()", 执行: function() { return app.getTopPackName(); } },
  107.         { 名称: "app.getTopPackNameV2()", 执行: function() { return app.getTopPackNameV2(); } },
  108.         { 名称: "app.getCurrentActivity()", 执行: function() { var v = app.getCurrentActivity(); return v ? v.split("/")[0] : ""; } },
  109.         { 名称: "app.getAgentCurrenAcitvity()", 执行: function() { var v = app.getAgentCurrenAcitvity(); return v ? v.split("/")[0] : ""; } },
  110.         { 名称: "ActivityManager.getRunningTasks()[0]", 执行: function() {
  111.             try { importClass(android.app.ActivityManager); var am = context.getSystemService(context.ACTIVITY_SERVICE); var tasks = am.getRunningTasks(1); if (tasks && tasks.size() > 0) return tasks.get(0).topActivity.getPackageName(); } catch(e) {} return ""; } },
  112.         { 名称: "ActivityManager.getRunningAppProcesses()[0]", 执行: function() {
  113.             try { importClass(android.app.ActivityManager); var am = context.getSystemService(context.ACTIVITY_SERVICE); var procs = am.getRunningAppProcesses(); if (procs && procs.size() > 0) return procs.get(0).processName; } catch(e) {} return ""; } },
  114.         { 名称: "shell dumpsys window", 执行: function() {
  115.             try { var raw = agent.shell("dumpsys window | grep mCurrentFocus"); var out = 清理shell输出(raw); var m = out.match(/(\w+\.\w+[\w.]*)\//); if (m) return m[1]; } catch(e) {} return ""; } },
  116.         { 名称: "shell dumpsys activity", 执行: function() {
  117.             try { var raw = agent.shell("dumpsys activity activities | grep mResumedActivity"); var out = 清理shell输出(raw); var m = out.match(/(\w+\.\w+[\w.]*)\//); if (m) return m[1]; } catch(e) {} return ""; } }
  118.     ];
  119.     for (var i = 0; i < 方法列表.length; i++) {
  120.         var r = "";
  121.         try { r = 方法列表[i].执行(); } catch(e) { r = ""; }
  122.         if (r && r.trim() !== "") {
  123.             return { 包名: r.trim(), 方法: 方法列表[i].名称, 序号: i + 1, 总数: 方法列表.length };
  124.         }
  125.     }
  126.     return { 包名: "", 方法: "无", 序号: 0, 总数: 方法列表.length };
  127. }

  128. function 可靠获取运行中进程() {
  129.     try {
  130.         importClass(android.app.ActivityManager);
  131.         var am = context.getSystemService(context.ACTIVITY_SERVICE);
  132.         var procs = am.getRunningAppProcesses();
  133.         if (procs && procs.size() > 0) {
  134.             var list = [];
  135.             for (var i = 0; i < procs.size(); i++) {
  136.                 var p = procs.get(i);
  137.                 list.push({ 包名: p.processName, PID: p.pid, 重要性: p.importance });
  138.             }
  139.             return { 方法: "ActivityManager.getRunningAppProcesses()", 列表: list };
  140.         }
  141.     } catch(e) {}
  142.     try {
  143.         var raw = agent.shell("ps -A | grep u0_a | grep -v :");
  144.         var out = 清理shell输出(raw);
  145.         var ln = out.split("\n");
  146.         var list = [];
  147.         for (var i = 0; i < ln.length; i++) {
  148.             var m = ln[i].match(/\s(\w+\.\w+[\w.]*)$/);
  149.             if (m) list.push({ 包名: m[1], PID: "", 重要性: "" });
  150.         }
  151.         if (list.length > 0) return { 方法: "shell ps", 列表: list };
  152.     } catch(e) {}
  153.     return { 方法: "无", 列表: [] };
  154. }


  155. // ════════════════════════════════════════════════════════
  156. //  启动
  157. // ════════════════════════════════════════════════════════

  158. 顶部框("AIWROK  获取包名方法总汇");
  159. printl("  模式: 代理 / 无碍 / HID / 原生API / Shell");
  160. printl("  机制: 自动降级  框架空值时切换可靠方法");
  161. printl("");

  162. // ── 核心预演 ──
  163. 状态("核心预演: 自动降级链获取顶端包名");
  164. var pre = 可靠获取顶端包名();
  165. if (pre.包名) {
  166.     结果行("命中", pre.方法 + " (" + pre.序号 + "/" + pre.总数 + ")");
  167.     数据行("包名", pre.包名);
  168. } else {
  169.     结果行("全部8种方法均返回空", "");
  170. }
  171. printl("");
  172. 状态("5秒后开始逐方法演示...");
  173. sleep.second(5);


  174. // ════════════════════════════════════════════════════════
  175. //  第一部分: 通用 API
  176. // ════════════════════════════════════════════════════════

  177. 顶部框("第一部分  通用 app.* API");

  178. // 1.1
  179. 状态("1.1  app.getTopPackName()");
  180. var r1 = app.getTopPackName();
  181. if (r1 && r1.trim()) { 结果行("返回", r1); }
  182. else { 结果行("空值", "降级 -> " + 可靠获取顶端包名().方法); }
  183. sleep.second(3);

  184. // 1.2
  185. 状态("1.2  app.getTopPackNameV2()");
  186. var r2 = app.getTopPackNameV2();
  187. if (r2 && r2.trim()) { 结果行("返回", r2); }
  188. else { 结果行("空值", "降级 -> " + 可靠获取顶端包名().方法); }
  189. sleep.second(3);

  190. // 1.3
  191. 状态("1.3  app.getPackName()  [AIWORK自身]");
  192. var r3 = app.getPackName();
  193. if (r3 && r3.trim()) { 结果行("自身包名", r3); }
  194. else {
  195.     try { var s3 = context.getPackageName(); 结果行("context.getPackageName()", s3); }
  196.     catch(e) { 结果行("全部失败", e.message); }
  197. }
  198. sleep.second(3);

  199. // 1.4
  200. 状态("1.4  app.getAgentCurrenAcitvity()  [代理模式]");
  201. var r4 = app.getAgentCurrenAcitvity();
  202. if (r4 && r4.trim()) { 结果行("Activity", r4); 数据行("包名", r4.split("/")[0]); }
  203. else {
  204.     结果行("空值", "代理未连接 -> 尝试无碍模式");
  205.     try {
  206.         var r4b = app.getCurrentActivity();
  207.         if (r4b && r4b.trim()) { 结果行("无碍Activity", r4b); 数据行("包名", r4b.split("/")[0]); }
  208.         else { 结果行("无碍也空", "降级 -> " + 可靠获取顶端包名().包名); }
  209.     } catch(e) { 结果行("失败", e.message); }
  210. }
  211. sleep.second(3);

  212. // 1.5
  213. 状态("1.5  app.getCurrentActivity()  [无碍模式]");
  214. var r5 = app.getCurrentActivity();
  215. if (r5 && r5.trim()) { 结果行("Activity", r5); 数据行("包名", r5.split("/")[0]); }
  216. else { 结果行("空值", ""); }
  217. sleep.second(3);

  218. // 1.6
  219. 状态("1.6  app.getAllApp()  [所有已安装应用]");
  220. var r6 = app.getAllApp();
  221. var c6 = 获取列表大小(r6);
  222. 数据行("应用数", "" + c6);
  223. for (var i = 0; i < Math.min(c6, 8); i++) {
  224.     列表项(i, "" + 获取列表元素(r6, i));
  225. }
  226. if (c6 > 8) printl("  ┊  ... 共" + c6 + "个, 仅显示前8");
  227. sleep.second(3);

  228. // 1.7
  229. 状态("1.7  app.logRunningProcesses()  [运行中进程]");
  230. var r7 = app.logRunningProcesses();
  231. if (r7 && r7.trim()) {
  232.     try {
  233.         var obj = JSON.parse("" + r7);
  234.         if (obj.processes) {
  235.             数据行("进程数", "" + obj.processes.length);
  236.             for (var i = 0; i < Math.min(obj.processes.length, 5); i++) {
  237.                 列表项(i, obj.processes[i].processName + " (PID:" + obj.processes[i].pid + ")");
  238.             }
  239.         }
  240.     } catch(e) { 数据行("原始", 安全截取(r7, 200)); }
  241. } else {
  242.     var r7b = 可靠获取运行中进程();
  243.     结果行("空值", "降级 -> " + r7b.方法);
  244.     数据行("进程数", "" + r7b.列表.length);
  245.     for (var i = 0; i < Math.min(r7b.列表.length, 5); i++) {
  246.         列表项(i, r7b.列表[i].包名);
  247.     }
  248. }
  249. sleep.second(3);

  250. // 1.8
  251. 状态("1.8  app.getAppName(pkg)  [包名->应用名]");
  252. var r8 = app.getAppName("com.tencent.mm");
  253. if (r8 && r8.trim()) { 结果行("com.tencent.mm", r8); }
  254. else { 结果行("空值", "应用可能未安装"); }
  255. sleep.second(3);

  256. // 1.9
  257. 状态("1.9  HID模式  hid.getTopPackName() / hid.getCurrentActivity()");
  258. try {
  259.     var h1 = hid.getTopPackName();
  260.     数据行("hid.getTopPackName()", "" + (h1 || "(空)"));
  261.     var h2 = hid.getCurrentActivity();
  262.     数据行("hid.getCurrentActivity()", "" + (h2 || "(空)"));
  263. } catch(e) { 结果行("HID错误", e.message + " (未连接HID硬件)"); }
  264. sleep.second(3);

  265. 底部框("第一部分完成");
  266. sleep.second(3);


  267. // ════════════════════════════════════════════════════════
  268. //  第二部分: Shell 命令方法
  269. // ════════════════════════════════════════════════════════

  270. 顶部框("第二部分  代理模式 Shell 命令");

  271. // 2.1
  272. 状态("2.1  ps -A  [所有进程]");
  273. var s1 = 清理shell输出(agent.shell("ps -A"));
  274. var l1 = s1.split("\n");
  275. 数据行("总行数", "" + l1.length);
  276. for (var i = 0; i < Math.min(l1.length, 5); i++) printl("  │  " + l1[i]);
  277. sleep.second(3);

  278. // 2.2
  279. 状态("2.2  ps -A | grep u0_a  [第三方应用进程]");
  280. var s2 = 清理shell输出(agent.shell("ps -A | grep u0_a | grep -v :"));
  281. var l2 = s2.split("\n");
  282. var p2 = [];
  283. for (var i = 0; i < l2.length; i++) {
  284.     var m = l2[i].match(/\s(\w+\.\w+[\w.]*)$/);
  285.     if (m) p2.push(m[1]);
  286. }
  287. 数据行("进程数", "" + p2.length);
  288. for (var i = 0; i < Math.min(p2.length, 10); i++) 列表项(i, p2[i]);
  289. sleep.second(3);

  290. // 2.3
  291. 状态("2.3  pm list packages  [所有已安装包名]");
  292. var s3 = 清理shell输出(agent.shell("pm list packages"));
  293. var l3 = [];
  294. var seg = s3.split("package:");
  295. for (var i = 1; i < seg.length; i++) {
  296.     var pkg = seg[i].trim();
  297.     var nl = pkg.indexOf("\n");
  298.     if (nl !== -1) pkg = pkg.substring(0, nl).trim();
  299.     if (pkg) l3.push(pkg);
  300. }
  301. 数据行("包数", "" + l3.length);
  302. for (var i = 0; i < Math.min(l3.length, 10); i++) 列表项(i, l3[i]);
  303. if (l3.length > 10) printl("  ┊  ... 共" + l3.length + "个, 仅显示前10");
  304. sleep.second(3);

  305. // 2.4
  306. 状态("2.4  pm list packages -3  [仅第三方]");
  307. var s4 = 清理shell输出(agent.shell("pm list packages -3"));
  308. var l4 = [];
  309. var seg4 = s4.split("package:");
  310. for (var i = 1; i < seg4.length; i++) {
  311.     var pkg = seg4[i].trim();
  312.     var nl = pkg.indexOf("\n");
  313.     if (nl !== -1) pkg = pkg.substring(0, nl).trim();
  314.     if (pkg) l4.push(pkg);
  315. }
  316. 数据行("第三方数", "" + l4.length);
  317. for (var i = 0; i < Math.min(l4.length, 10); i++) 列表项(i, l4[i]);
  318. sleep.second(3);

  319. // 2.5
  320. 状态("2.5  dumpsys window | grep mCurrentFocus  [当前窗口]");
  321. try {
  322.     var s5 = 清理shell输出(agent.shell("dumpsys window | grep mCurrentFocus"));
  323.     数据行("原始", 安全截取(s5, 120));
  324.     var m5 = s5.match(/(\w+\.\w+[\w.]*)\//);
  325.     结果行("包名", m5 ? m5[1] : "(未识别)");
  326. } catch(e) { 结果行("失败", e.message); }
  327. sleep.second(3);

  328. // 2.6
  329. 状态("2.6  dumpsys activity activities | grep mResumedActivity");
  330. try {
  331.     var s6 = 清理shell输出(agent.shell("dumpsys activity activities | grep mResumedActivity"));
  332.     数据行("原始", 安全截取(s6, 120));
  333.     var m6 = s6.match(/(\w+\.\w+[\w.]*)\//);
  334.     结果行("包名", m6 ? m6[1] : "(未识别)");
  335. } catch(e) { 结果行("失败", e.message); }
  336. sleep.second(3);

  337. // 2.7
  338. 状态("2.7  pidof com.tencent.mm  [进程检测]");
  339. var s7 = 清理shell输出(agent.shell("pidof com.tencent.mm"));
  340. if (s7 && s7.trim()) { 结果行("运行中", "PID: " + s7.trim()); }
  341. else { 结果行("未运行", "com.tencent.mm"); }
  342. sleep.second(3);

  343. 底部框("第二部分完成");
  344. sleep.second(3);


  345. // ════════════════════════════════════════════════════════
  346. //  第三部分: Android 原生 API
  347. // ════════════════════════════════════════════════════════

  348. 顶部框("第三部分  Android 原生 API");

  349. importClass(android.app.ActivityManager);
  350. importClass(android.content.Context);
  351. importClass(android.content.pm.PackageManager);
  352. importClass(android.app.usage.UsageStatsManager);
  353. importClass(android.app.usage.UsageStats);

  354. var am = context.getSystemService(context.ACTIVITY_SERVICE);

  355. // 3.1
  356. 状态("3.1  ActivityManager.getRunningTasks()  [任务栈]");
  357. try {
  358.     var tasks = am.getRunningTasks(100);
  359.     var tc = 获取列表大小(tasks);
  360.     数据行("任务数", "" + tc);
  361.     for (var i = 0; i < Math.min(tc, 5); i++) {
  362.         var t = 获取列表元素(tasks, i);
  363.         if (t && t.topActivity) {
  364.             列表项(i, t.topActivity.getPackageName() + " / " + t.topActivity.getClassName());
  365.         }
  366.     }
  367.     if (tc > 0) 结果行("顶端包名", "" + 获取列表元素(tasks, 0).topActivity.getPackageName());
  368. } catch(e) { 结果行("失败", e.message); }
  369. sleep.second(3);

  370. // 3.2
  371. 状态("3.2  ActivityManager.getRunningAppProcesses()  [最可靠]");
  372. try {
  373.     var procs = am.getRunningAppProcesses();
  374.     var pc = 获取列表大小(procs);
  375.     数据行("进程数", "" + pc);
  376.     var pnames = [];
  377.     for (var i = 0; i < pc; i++) {
  378.         var p = 获取列表元素(procs, i);
  379.         if (p) {
  380.             pnames.push(p.processName);
  381.             if (i < 10) 列表项(i, p.processName + " (PID:" + p.pid + ", 重要性:" + p.importance + ")");
  382.         }
  383.     }
  384.     数据行("运行中包名", pnames.join(", "));
  385. } catch(e) { 结果行("失败", e.message); }
  386. sleep.second(3);

  387. // 3.3
  388. 状态("3.3  PackageManager.getInstalledPackages()  [所有应用]");
  389. try {
  390.     var pm = context.getPackageManager();
  391.     var pkgs = pm.getInstalledPackages(0);
  392.     var pk = 获取列表大小(pkgs);
  393.     数据行("已安装", "" + pk + " 个");
  394.     for (var i = 0; i < Math.min(pk, 5); i++) {
  395.         var info = 获取列表元素(pkgs, i);
  396.         if (info) {
  397.             var nm = pm.getApplicationLabel(info.applicationInfo).toString();
  398.             列表项(i, nm + " (" + info.packageName + ") v" + info.versionName);
  399.         }
  400.     }
  401. } catch(e) { 结果行("失败", e.message); }
  402. sleep.second(3);

  403. // 3.4
  404. 状态("3.4  应用名 -> 包名  [反查]");
  405. function 反查包名(应用名) {
  406.     try {
  407.         var pm2 = context.getPackageManager();
  408.         var list = pm2.getInstalledPackages(0);
  409.         var sz = 获取列表大小(list);
  410.         for (var i = 0; i < sz; i++) {
  411.             var info = 获取列表元素(list, i);
  412.             if (info) {
  413.                 var nm = pm2.getApplicationLabel(info.applicationInfo).toString();
  414.                 if (nm === 应用名) return info.packageName;
  415.             }
  416.         }
  417.     } catch(e) {}
  418.     return null;
  419. }
  420. var wb = 反查包名("微信");
  421. 结果行("微信", "" + (wb || "(未找到)"));
  422. var dy = 反查包名("抖音");
  423. 结果行("抖音", "" + (dy || "(未找到)"));
  424. sleep.second(3);

  425. // 3.5
  426. 状态("3.5  UsageStatsManager  [最近使用应用]");
  427. try {
  428.     var usm = context.getSystemService(context.USAGE_STATS_SERVICE);
  429.     var now = Packages.java.lang.System.currentTimeMillis();
  430.     var stats = usm.queryUsageStats(
  431.         Packages.android.app.usage.UsageStatsManager.INTERVAL_DAILY,
  432.         now - 1000 * 60 * 60 * 1,
  433.         now
  434.     );
  435.     if (stats && !stats.isEmpty()) {
  436.         var Collections = Packages.java.util.Collections;
  437.         var Comparator = Packages.java.util.Comparator;
  438.         Collections.sort(stats, new Comparator({
  439.             compare: function(a, b) {
  440.                 return java.lang.Long.compare(b.getLastTimeUsed(), a.getLastTimeUsed());
  441.             }
  442.         }));
  443.         var currentPkg = context.getPackageName();
  444.         var cnt = 0;
  445.         var sz = 获取列表大小(stats);
  446.         for (var i = 0; i < sz && cnt < 5; i++) {
  447.             var s = 获取列表元素(stats, i);
  448.             if (s && s.getPackageName() !== currentPkg) {
  449.                 列表项(cnt, s.getPackageName() + "  最后使用: " + new java.util.Date(s.getLastTimeUsed()));
  450.                 cnt++;
  451.             }
  452.         }
  453.     }
  454. } catch(e) { 结果行("失败", e.message + " (可能缺少权限)"); }
  455. sleep.second(3);

  456. // 3.6
  457. 状态("3.6  context.getPackageName()  [AIWORK自身]");
  458. try {
  459.     var self = context.getPackageName();
  460.     数据行("包名", self);
  461.     var pm3 = context.getPackageManager();
  462.     var info = pm3.getApplicationInfo(self, 0);
  463.     var selfName = pm3.getApplicationLabel(info).toString();
  464.     var ver = pm3.getPackageInfo(self, 0);
  465.     数据行("应用名", selfName);
  466.     数据行("版本", ver.versionName + " (code:" + ver.versionCode + ")");
  467. } catch(e) { 结果行("失败", e.message); }
  468. sleep.second(3);

  469. // 3.7
  470. 状态("3.7  应用运行检测  [双重验证]");
  471. function 检查是否运行(目标包名) {
  472.     try {
  473.         var am2 = context.getSystemService(context.ACTIVITY_SERVICE);
  474.         var pl = am2.getRunningAppProcesses();
  475.         var ps = 获取列表大小(pl);
  476.         for (var i = 0; i < ps; i++) {
  477.             var p = 获取列表元素(pl, i);
  478.             if (p && p.processName === 目标包名) return "运行中 (PID:" + p.pid + ")";
  479.         }
  480.         var ts = am2.getRunningTasks(50);
  481.         var tsz = 获取列表大小(ts);
  482.         for (var i = 0; i < tsz; i++) {
  483.             var t = 获取列表元素(ts, i);
  484.             if (t && t.topActivity && t.topActivity.getPackageName() === 目标包名) return "运行中(任务栈)";
  485.         }
  486.         return "未运行";
  487.     } catch(e) { return "检查失败: " + e.message; }
  488. }
  489. 结果行("com.tencent.mm", 检查是否运行("com.tencent.mm"));
  490. 结果行("com.ss.android.ugc.aweme", 检查是否运行("com.ss.android.ugc.aweme"));
  491. sleep.second(3);

  492. 底部框("第三部分完成");
  493. sleep.second(3);


  494. // ════════════════════════════════════════════════════════
  495. //  第四部分: 从 UI/XML 提取
  496. // ════════════════════════════════════════════════════════

  497. 顶部框("第四部分  从 UI / XML 提取包名");

  498. 状态("4.1  agent.getXml()  [XML解析]");
  499. try {
  500.     var xml = agent.getXml();
  501.     var xmlStr = "" + xml;
  502.     var re = /package="([^"]+)"/g;
  503.     var m;
  504.     var list = [];
  505.     while ((m = re.exec(xmlStr)) !== null) {
  506.         if (list.indexOf(m[1]) === -1) list.push(m[1]);
  507.     }
  508.     数据行("提取数", "" + list.length);
  509.     for (var i = 0; i < list.length; i++) 列表项(i, list[i]);
  510.     if (list.length === 0) 结果行("未提取到", "XML长度: " + xmlStr.length + " 字符");
  511. } catch(e) { 结果行("失败", e.message); }
  512. sleep.second(3);

  513. 底部框("第四部分完成");
  514. sleep.second(3);


  515. // ════════════════════════════════════════════════════════
  516. //  第五部分: 总结
  517. // ════════════════════════════════════════════════════════

  518. 顶部框("第五部分  总结与方法索引");

  519. 细分隔();
  520. 状态("可靠方法 (实测可工作)");
  521. 结果行(" 1", "ActivityManager.getRunningAppProcesses()");
  522. 结果行(" 2", "ActivityManager.getRunningTasks()");
  523. 结果行(" 3", "PackageManager.getInstalledPackages()");
  524. 结果行(" 4", "agent.shell('ps -A | grep u0_a')");
  525. 结果行(" 5", "agent.shell('pm list packages -3')");
  526. 结果行(" 6", "agent.shell('dumpsys window')");
  527. 结果行(" 7", "app.getCurrentActivity()  [无碍模式]");
  528. 结果行(" 8", "context.getPackageName()");
  529. 细分隔();
  530. 状态("不稳定方法 (框架封装, 可能返回空)");
  531. 结果行(" 1", "app.getTopPackName()");
  532. 结果行(" 2", "app.getTopPackNameV2()");
  533. 结果行(" 3", "app.getPackName()");
  534. 结果行(" 4", "app.getAgentCurrenAcitvity()");
  535. 结果行(" 5", "app.logRunningProcesses()");
  536. 结果行(" 6", "hid.getTopPackName()  [需HID硬件]");
  537. 细分隔();
  538. 状态("场景快速索引");
  539. 数据行("获取顶端包名", "可靠获取顶端包名()  [自动降级8种]");
  540. 数据行("获取全部应用", "agent.shell('pm list packages -3')");
  541. 数据行("获取运行中进程", "ActivityManager.getRunningAppProcesses()");
  542. 数据行("检查某App运行", "检查是否运行('com.xxx.xxx')");
  543. 数据行("应用名->包名", "反查包名('微信')");
  544. 数据行("AIWORK自身信息", "context.getPackageName() + PackageManager");
  545. 细分隔();

  546. 底部框("全部演示完成");
复制代码


上一篇: AIWROK软件番茄小说自动阅读刷金币示例

下一篇: 没有了

举报 回复