|
|
安卓AIWROK获取包名所有方法汇总
- /*
- * ============================================================
- * 安卓AIWROK 获取包名所有方法汇总
- * 整理日期: 2026-07-29
- * 涵盖: 代理模式 / 无碍模式 / HID模式 / 通用API / 原生Android API
- * 样式: 黑白极简 · 几何排版 · 层次分明
- * ============================================================ */
- // ========== 工具函数 ==========
- function 清理shell输出(raw) {
- if (!raw) return "";
- var str = "" + raw;
- if (str.indexOf("successMsg:") === 0) {
- str = str.substring("successMsg:".length);
- }
- var errIdx = str.lastIndexOf(",errorMsg:");
- if (errIdx !== -1) {
- str = str.substring(0, errIdx);
- }
- return str;
- }
- function 获取列表大小(list) {
- if (!list) return 0;
- try {
- if (typeof list.size === "function") return list.size();
- if (typeof list.length === "number") return list.length;
- if (list.getClass && list.getClass().isArray()) {
- return java.lang.reflect.Array.getLength(list);
- }
- } catch (e) {}
- return 0;
- }
- function 获取列表元素(list, index) {
- if (!list) return null;
- try {
- if (list.get) return list.get(index);
- if (list[index] !== undefined) return list[index];
- } catch (e) {}
- return null;
- }
- function 安全截取(str, maxLen) {
- if (!str) return "";
- var s = "" + str;
- if (isNaN(maxLen) || maxLen <= 0) return s;
- if (s.length <= maxLen) return s;
- return s.substring(0, maxLen) + "...";
- }
- // ========== 样式函数 ==========
- var W = 56; // 输出宽度
- function 顶部框(标题) {
- var line = "";
- for (var i = 0; i < W - 2; i++) line += "━";
- printl("┏" + line + "┓");
- var padding = Math.floor((W - 2 - 标题.length) / 2);
- var p = "";
- for (var i = 0; i < padding; i++) p += " ";
- var rightPad = "";
- var total = padding * 2 + 标题.length;
- for (var i = 0; i < (W - 2 - total); i++) rightPad += " ";
- printl("┃" + p + 标题 + rightPad + "┃");
- var line2 = "";
- for (var i = 0; i < W - 2; i++) line2 += "━";
- printl("┗" + line2 + "┛");
- }
- function 分隔线() {
- var line = "";
- for (var i = 0; i < W - 2; i++) line += "─";
- printl("├" + line + "┤");
- }
- function 细分隔() {
- var line = "";
- for (var i = 0; i < W; i++) line += "·";
- printl(line);
- }
- function 底部框(标题) {
- var line = "";
- for (var i = 0; i < W - 2; i++) line += "━";
- var padding = Math.floor((W - 2 - 标题.length) / 2);
- var p = "";
- for (var i = 0; i < padding; i++) p += " ";
- var rightPad = "";
- var total = padding * 2 + 标题.length;
- for (var i = 0; i < (W - 2 - total); i++) rightPad += " ";
- printl("┏" + line + "┓");
- printl("┃" + p + 标题 + rightPad + "┃");
- var line2 = "";
- for (var i = 0; i < W - 2; i++) line2 += "━";
- printl("┗" + line2 + "┛");
- }
- function 状态(文字) {
- printl(" ┌─ " + 文字);
- }
- function 数据行(标签, 值) {
- printl(" │ " + 标签 + " " + 值);
- }
- function 结果行(标签, 值) {
- printl(" ● " + 标签 + " " + 值);
- }
- function 列表项(索引, 内容) {
- var num = "" + 索引;
- if (num.length < 2) num = " " + num;
- printl(" ┊ " + num + " " + 内容);
- }
- // ========== 核心: 可靠获取顶端包名 ==========
- function 可靠获取顶端包名() {
- var 方法列表 = [
- { 名称: "app.getTopPackName()", 执行: function() { return app.getTopPackName(); } },
- { 名称: "app.getTopPackNameV2()", 执行: function() { return app.getTopPackNameV2(); } },
- { 名称: "app.getCurrentActivity()", 执行: function() { var v = app.getCurrentActivity(); return v ? v.split("/")[0] : ""; } },
- { 名称: "app.getAgentCurrenAcitvity()", 执行: function() { var v = app.getAgentCurrenAcitvity(); return v ? v.split("/")[0] : ""; } },
- { 名称: "ActivityManager.getRunningTasks()[0]", 执行: function() {
- 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 ""; } },
- { 名称: "ActivityManager.getRunningAppProcesses()[0]", 执行: function() {
- 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 ""; } },
- { 名称: "shell dumpsys window", 执行: function() {
- 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 ""; } },
- { 名称: "shell dumpsys activity", 执行: function() {
- 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 ""; } }
- ];
- for (var i = 0; i < 方法列表.length; i++) {
- var r = "";
- try { r = 方法列表[i].执行(); } catch(e) { r = ""; }
- if (r && r.trim() !== "") {
- return { 包名: r.trim(), 方法: 方法列表[i].名称, 序号: i + 1, 总数: 方法列表.length };
- }
- }
- return { 包名: "", 方法: "无", 序号: 0, 总数: 方法列表.length };
- }
- function 可靠获取运行中进程() {
- try {
- importClass(android.app.ActivityManager);
- var am = context.getSystemService(context.ACTIVITY_SERVICE);
- var procs = am.getRunningAppProcesses();
- if (procs && procs.size() > 0) {
- var list = [];
- for (var i = 0; i < procs.size(); i++) {
- var p = procs.get(i);
- list.push({ 包名: p.processName, PID: p.pid, 重要性: p.importance });
- }
- return { 方法: "ActivityManager.getRunningAppProcesses()", 列表: list };
- }
- } catch(e) {}
- try {
- var raw = agent.shell("ps -A | grep u0_a | grep -v :");
- var out = 清理shell输出(raw);
- var ln = out.split("\n");
- var list = [];
- for (var i = 0; i < ln.length; i++) {
- var m = ln[i].match(/\s(\w+\.\w+[\w.]*)$/);
- if (m) list.push({ 包名: m[1], PID: "", 重要性: "" });
- }
- if (list.length > 0) return { 方法: "shell ps", 列表: list };
- } catch(e) {}
- return { 方法: "无", 列表: [] };
- }
- // ════════════════════════════════════════════════════════
- // 启动
- // ════════════════════════════════════════════════════════
- 顶部框("AIWROK 获取包名方法总汇");
- printl(" 模式: 代理 / 无碍 / HID / 原生API / Shell");
- printl(" 机制: 自动降级 框架空值时切换可靠方法");
- printl("");
- // ── 核心预演 ──
- 状态("核心预演: 自动降级链获取顶端包名");
- var pre = 可靠获取顶端包名();
- if (pre.包名) {
- 结果行("命中", pre.方法 + " (" + pre.序号 + "/" + pre.总数 + ")");
- 数据行("包名", pre.包名);
- } else {
- 结果行("全部8种方法均返回空", "");
- }
- printl("");
- 状态("5秒后开始逐方法演示...");
- sleep.second(5);
- // ════════════════════════════════════════════════════════
- // 第一部分: 通用 API
- // ════════════════════════════════════════════════════════
- 顶部框("第一部分 通用 app.* API");
- // 1.1
- 状态("1.1 app.getTopPackName()");
- var r1 = app.getTopPackName();
- if (r1 && r1.trim()) { 结果行("返回", r1); }
- else { 结果行("空值", "降级 -> " + 可靠获取顶端包名().方法); }
- sleep.second(3);
- // 1.2
- 状态("1.2 app.getTopPackNameV2()");
- var r2 = app.getTopPackNameV2();
- if (r2 && r2.trim()) { 结果行("返回", r2); }
- else { 结果行("空值", "降级 -> " + 可靠获取顶端包名().方法); }
- sleep.second(3);
- // 1.3
- 状态("1.3 app.getPackName() [AIWORK自身]");
- var r3 = app.getPackName();
- if (r3 && r3.trim()) { 结果行("自身包名", r3); }
- else {
- try { var s3 = context.getPackageName(); 结果行("context.getPackageName()", s3); }
- catch(e) { 结果行("全部失败", e.message); }
- }
- sleep.second(3);
- // 1.4
- 状态("1.4 app.getAgentCurrenAcitvity() [代理模式]");
- var r4 = app.getAgentCurrenAcitvity();
- if (r4 && r4.trim()) { 结果行("Activity", r4); 数据行("包名", r4.split("/")[0]); }
- else {
- 结果行("空值", "代理未连接 -> 尝试无碍模式");
- try {
- var r4b = app.getCurrentActivity();
- if (r4b && r4b.trim()) { 结果行("无碍Activity", r4b); 数据行("包名", r4b.split("/")[0]); }
- else { 结果行("无碍也空", "降级 -> " + 可靠获取顶端包名().包名); }
- } catch(e) { 结果行("失败", e.message); }
- }
- sleep.second(3);
- // 1.5
- 状态("1.5 app.getCurrentActivity() [无碍模式]");
- var r5 = app.getCurrentActivity();
- if (r5 && r5.trim()) { 结果行("Activity", r5); 数据行("包名", r5.split("/")[0]); }
- else { 结果行("空值", ""); }
- sleep.second(3);
- // 1.6
- 状态("1.6 app.getAllApp() [所有已安装应用]");
- var r6 = app.getAllApp();
- var c6 = 获取列表大小(r6);
- 数据行("应用数", "" + c6);
- for (var i = 0; i < Math.min(c6, 8); i++) {
- 列表项(i, "" + 获取列表元素(r6, i));
- }
- if (c6 > 8) printl(" ┊ ... 共" + c6 + "个, 仅显示前8");
- sleep.second(3);
- // 1.7
- 状态("1.7 app.logRunningProcesses() [运行中进程]");
- var r7 = app.logRunningProcesses();
- if (r7 && r7.trim()) {
- try {
- var obj = JSON.parse("" + r7);
- if (obj.processes) {
- 数据行("进程数", "" + obj.processes.length);
- for (var i = 0; i < Math.min(obj.processes.length, 5); i++) {
- 列表项(i, obj.processes[i].processName + " (PID:" + obj.processes[i].pid + ")");
- }
- }
- } catch(e) { 数据行("原始", 安全截取(r7, 200)); }
- } else {
- var r7b = 可靠获取运行中进程();
- 结果行("空值", "降级 -> " + r7b.方法);
- 数据行("进程数", "" + r7b.列表.length);
- for (var i = 0; i < Math.min(r7b.列表.length, 5); i++) {
- 列表项(i, r7b.列表[i].包名);
- }
- }
- sleep.second(3);
- // 1.8
- 状态("1.8 app.getAppName(pkg) [包名->应用名]");
- var r8 = app.getAppName("com.tencent.mm");
- if (r8 && r8.trim()) { 结果行("com.tencent.mm", r8); }
- else { 结果行("空值", "应用可能未安装"); }
- sleep.second(3);
- // 1.9
- 状态("1.9 HID模式 hid.getTopPackName() / hid.getCurrentActivity()");
- try {
- var h1 = hid.getTopPackName();
- 数据行("hid.getTopPackName()", "" + (h1 || "(空)"));
- var h2 = hid.getCurrentActivity();
- 数据行("hid.getCurrentActivity()", "" + (h2 || "(空)"));
- } catch(e) { 结果行("HID错误", e.message + " (未连接HID硬件)"); }
- sleep.second(3);
- 底部框("第一部分完成");
- sleep.second(3);
- // ════════════════════════════════════════════════════════
- // 第二部分: Shell 命令方法
- // ════════════════════════════════════════════════════════
- 顶部框("第二部分 代理模式 Shell 命令");
- // 2.1
- 状态("2.1 ps -A [所有进程]");
- var s1 = 清理shell输出(agent.shell("ps -A"));
- var l1 = s1.split("\n");
- 数据行("总行数", "" + l1.length);
- for (var i = 0; i < Math.min(l1.length, 5); i++) printl(" │ " + l1[i]);
- sleep.second(3);
- // 2.2
- 状态("2.2 ps -A | grep u0_a [第三方应用进程]");
- var s2 = 清理shell输出(agent.shell("ps -A | grep u0_a | grep -v :"));
- var l2 = s2.split("\n");
- var p2 = [];
- for (var i = 0; i < l2.length; i++) {
- var m = l2[i].match(/\s(\w+\.\w+[\w.]*)$/);
- if (m) p2.push(m[1]);
- }
- 数据行("进程数", "" + p2.length);
- for (var i = 0; i < Math.min(p2.length, 10); i++) 列表项(i, p2[i]);
- sleep.second(3);
- // 2.3
- 状态("2.3 pm list packages [所有已安装包名]");
- var s3 = 清理shell输出(agent.shell("pm list packages"));
- var l3 = [];
- var seg = s3.split("package:");
- for (var i = 1; i < seg.length; i++) {
- var pkg = seg[i].trim();
- var nl = pkg.indexOf("\n");
- if (nl !== -1) pkg = pkg.substring(0, nl).trim();
- if (pkg) l3.push(pkg);
- }
- 数据行("包数", "" + l3.length);
- for (var i = 0; i < Math.min(l3.length, 10); i++) 列表项(i, l3[i]);
- if (l3.length > 10) printl(" ┊ ... 共" + l3.length + "个, 仅显示前10");
- sleep.second(3);
- // 2.4
- 状态("2.4 pm list packages -3 [仅第三方]");
- var s4 = 清理shell输出(agent.shell("pm list packages -3"));
- var l4 = [];
- var seg4 = s4.split("package:");
- for (var i = 1; i < seg4.length; i++) {
- var pkg = seg4[i].trim();
- var nl = pkg.indexOf("\n");
- if (nl !== -1) pkg = pkg.substring(0, nl).trim();
- if (pkg) l4.push(pkg);
- }
- 数据行("第三方数", "" + l4.length);
- for (var i = 0; i < Math.min(l4.length, 10); i++) 列表项(i, l4[i]);
- sleep.second(3);
- // 2.5
- 状态("2.5 dumpsys window | grep mCurrentFocus [当前窗口]");
- try {
- var s5 = 清理shell输出(agent.shell("dumpsys window | grep mCurrentFocus"));
- 数据行("原始", 安全截取(s5, 120));
- var m5 = s5.match(/(\w+\.\w+[\w.]*)\//);
- 结果行("包名", m5 ? m5[1] : "(未识别)");
- } catch(e) { 结果行("失败", e.message); }
- sleep.second(3);
- // 2.6
- 状态("2.6 dumpsys activity activities | grep mResumedActivity");
- try {
- var s6 = 清理shell输出(agent.shell("dumpsys activity activities | grep mResumedActivity"));
- 数据行("原始", 安全截取(s6, 120));
- var m6 = s6.match(/(\w+\.\w+[\w.]*)\//);
- 结果行("包名", m6 ? m6[1] : "(未识别)");
- } catch(e) { 结果行("失败", e.message); }
- sleep.second(3);
- // 2.7
- 状态("2.7 pidof com.tencent.mm [进程检测]");
- var s7 = 清理shell输出(agent.shell("pidof com.tencent.mm"));
- if (s7 && s7.trim()) { 结果行("运行中", "PID: " + s7.trim()); }
- else { 结果行("未运行", "com.tencent.mm"); }
- sleep.second(3);
- 底部框("第二部分完成");
- sleep.second(3);
- // ════════════════════════════════════════════════════════
- // 第三部分: Android 原生 API
- // ════════════════════════════════════════════════════════
- 顶部框("第三部分 Android 原生 API");
- importClass(android.app.ActivityManager);
- importClass(android.content.Context);
- importClass(android.content.pm.PackageManager);
- importClass(android.app.usage.UsageStatsManager);
- importClass(android.app.usage.UsageStats);
- var am = context.getSystemService(context.ACTIVITY_SERVICE);
- // 3.1
- 状态("3.1 ActivityManager.getRunningTasks() [任务栈]");
- try {
- var tasks = am.getRunningTasks(100);
- var tc = 获取列表大小(tasks);
- 数据行("任务数", "" + tc);
- for (var i = 0; i < Math.min(tc, 5); i++) {
- var t = 获取列表元素(tasks, i);
- if (t && t.topActivity) {
- 列表项(i, t.topActivity.getPackageName() + " / " + t.topActivity.getClassName());
- }
- }
- if (tc > 0) 结果行("顶端包名", "" + 获取列表元素(tasks, 0).topActivity.getPackageName());
- } catch(e) { 结果行("失败", e.message); }
- sleep.second(3);
- // 3.2
- 状态("3.2 ActivityManager.getRunningAppProcesses() [最可靠]");
- try {
- var procs = am.getRunningAppProcesses();
- var pc = 获取列表大小(procs);
- 数据行("进程数", "" + pc);
- var pnames = [];
- for (var i = 0; i < pc; i++) {
- var p = 获取列表元素(procs, i);
- if (p) {
- pnames.push(p.processName);
- if (i < 10) 列表项(i, p.processName + " (PID:" + p.pid + ", 重要性:" + p.importance + ")");
- }
- }
- 数据行("运行中包名", pnames.join(", "));
- } catch(e) { 结果行("失败", e.message); }
- sleep.second(3);
- // 3.3
- 状态("3.3 PackageManager.getInstalledPackages() [所有应用]");
- try {
- var pm = context.getPackageManager();
- var pkgs = pm.getInstalledPackages(0);
- var pk = 获取列表大小(pkgs);
- 数据行("已安装", "" + pk + " 个");
- for (var i = 0; i < Math.min(pk, 5); i++) {
- var info = 获取列表元素(pkgs, i);
- if (info) {
- var nm = pm.getApplicationLabel(info.applicationInfo).toString();
- 列表项(i, nm + " (" + info.packageName + ") v" + info.versionName);
- }
- }
- } catch(e) { 结果行("失败", e.message); }
- sleep.second(3);
- // 3.4
- 状态("3.4 应用名 -> 包名 [反查]");
- function 反查包名(应用名) {
- try {
- var pm2 = context.getPackageManager();
- var list = pm2.getInstalledPackages(0);
- var sz = 获取列表大小(list);
- for (var i = 0; i < sz; i++) {
- var info = 获取列表元素(list, i);
- if (info) {
- var nm = pm2.getApplicationLabel(info.applicationInfo).toString();
- if (nm === 应用名) return info.packageName;
- }
- }
- } catch(e) {}
- return null;
- }
- var wb = 反查包名("微信");
- 结果行("微信", "" + (wb || "(未找到)"));
- var dy = 反查包名("抖音");
- 结果行("抖音", "" + (dy || "(未找到)"));
- sleep.second(3);
- // 3.5
- 状态("3.5 UsageStatsManager [最近使用应用]");
- try {
- var usm = context.getSystemService(context.USAGE_STATS_SERVICE);
- var now = Packages.java.lang.System.currentTimeMillis();
- var stats = usm.queryUsageStats(
- Packages.android.app.usage.UsageStatsManager.INTERVAL_DAILY,
- now - 1000 * 60 * 60 * 1,
- now
- );
- if (stats && !stats.isEmpty()) {
- var Collections = Packages.java.util.Collections;
- var Comparator = Packages.java.util.Comparator;
- Collections.sort(stats, new Comparator({
- compare: function(a, b) {
- return java.lang.Long.compare(b.getLastTimeUsed(), a.getLastTimeUsed());
- }
- }));
- var currentPkg = context.getPackageName();
- var cnt = 0;
- var sz = 获取列表大小(stats);
- for (var i = 0; i < sz && cnt < 5; i++) {
- var s = 获取列表元素(stats, i);
- if (s && s.getPackageName() !== currentPkg) {
- 列表项(cnt, s.getPackageName() + " 最后使用: " + new java.util.Date(s.getLastTimeUsed()));
- cnt++;
- }
- }
- }
- } catch(e) { 结果行("失败", e.message + " (可能缺少权限)"); }
- sleep.second(3);
- // 3.6
- 状态("3.6 context.getPackageName() [AIWORK自身]");
- try {
- var self = context.getPackageName();
- 数据行("包名", self);
- var pm3 = context.getPackageManager();
- var info = pm3.getApplicationInfo(self, 0);
- var selfName = pm3.getApplicationLabel(info).toString();
- var ver = pm3.getPackageInfo(self, 0);
- 数据行("应用名", selfName);
- 数据行("版本", ver.versionName + " (code:" + ver.versionCode + ")");
- } catch(e) { 结果行("失败", e.message); }
- sleep.second(3);
- // 3.7
- 状态("3.7 应用运行检测 [双重验证]");
- function 检查是否运行(目标包名) {
- try {
- var am2 = context.getSystemService(context.ACTIVITY_SERVICE);
- var pl = am2.getRunningAppProcesses();
- var ps = 获取列表大小(pl);
- for (var i = 0; i < ps; i++) {
- var p = 获取列表元素(pl, i);
- if (p && p.processName === 目标包名) return "运行中 (PID:" + p.pid + ")";
- }
- var ts = am2.getRunningTasks(50);
- var tsz = 获取列表大小(ts);
- for (var i = 0; i < tsz; i++) {
- var t = 获取列表元素(ts, i);
- if (t && t.topActivity && t.topActivity.getPackageName() === 目标包名) return "运行中(任务栈)";
- }
- return "未运行";
- } catch(e) { return "检查失败: " + e.message; }
- }
- 结果行("com.tencent.mm", 检查是否运行("com.tencent.mm"));
- 结果行("com.ss.android.ugc.aweme", 检查是否运行("com.ss.android.ugc.aweme"));
- sleep.second(3);
- 底部框("第三部分完成");
- sleep.second(3);
- // ════════════════════════════════════════════════════════
- // 第四部分: 从 UI/XML 提取
- // ════════════════════════════════════════════════════════
- 顶部框("第四部分 从 UI / XML 提取包名");
- 状态("4.1 agent.getXml() [XML解析]");
- try {
- var xml = agent.getXml();
- var xmlStr = "" + xml;
- var re = /package="([^"]+)"/g;
- var m;
- var list = [];
- while ((m = re.exec(xmlStr)) !== null) {
- if (list.indexOf(m[1]) === -1) list.push(m[1]);
- }
- 数据行("提取数", "" + list.length);
- for (var i = 0; i < list.length; i++) 列表项(i, list[i]);
- if (list.length === 0) 结果行("未提取到", "XML长度: " + xmlStr.length + " 字符");
- } catch(e) { 结果行("失败", e.message); }
- sleep.second(3);
- 底部框("第四部分完成");
- sleep.second(3);
- // ════════════════════════════════════════════════════════
- // 第五部分: 总结
- // ════════════════════════════════════════════════════════
- 顶部框("第五部分 总结与方法索引");
- 细分隔();
- 状态("可靠方法 (实测可工作)");
- 结果行(" 1", "ActivityManager.getRunningAppProcesses()");
- 结果行(" 2", "ActivityManager.getRunningTasks()");
- 结果行(" 3", "PackageManager.getInstalledPackages()");
- 结果行(" 4", "agent.shell('ps -A | grep u0_a')");
- 结果行(" 5", "agent.shell('pm list packages -3')");
- 结果行(" 6", "agent.shell('dumpsys window')");
- 结果行(" 7", "app.getCurrentActivity() [无碍模式]");
- 结果行(" 8", "context.getPackageName()");
- 细分隔();
- 状态("不稳定方法 (框架封装, 可能返回空)");
- 结果行(" 1", "app.getTopPackName()");
- 结果行(" 2", "app.getTopPackNameV2()");
- 结果行(" 3", "app.getPackName()");
- 结果行(" 4", "app.getAgentCurrenAcitvity()");
- 结果行(" 5", "app.logRunningProcesses()");
- 结果行(" 6", "hid.getTopPackName() [需HID硬件]");
- 细分隔();
- 状态("场景快速索引");
- 数据行("获取顶端包名", "可靠获取顶端包名() [自动降级8种]");
- 数据行("获取全部应用", "agent.shell('pm list packages -3')");
- 数据行("获取运行中进程", "ActivityManager.getRunningAppProcesses()");
- 数据行("检查某App运行", "检查是否运行('com.xxx.xxx')");
- 数据行("应用名->包名", "反查包名('微信')");
- 数据行("AIWORK自身信息", "context.getPackageName() + PackageManager");
- 细分隔();
- 底部框("全部演示完成");
复制代码
|
|