|
 | |  |  | // 应用管理工具集 const 应用 = {};
// 模拟日志函数 const LOG = { info: function(msg) { printl('[INFO] ' + msg); }, err: function(msg) { printl('[ERROR] ' + msg); } };
/** * 停止当前脚本 */ 应用.停止脚本 = function () { try { LOG.info("尝试停止脚本..."); if (typeof runtime !== 'undefined' && runtime.exit) { LOG.info("使用runtime.exit()停止脚本"); runtime.exit(); return true; } if (typeof thread !== 'undefined' && thread.interrupt) { LOG.info("使用thread.interrupt()中断当前线程"); thread.interrupt(); return true; } if (typeof java !== 'undefined' && java.lang && java.lang.System) { LOG.info("使用java.lang.System.exit(0)停止脚本"); java.lang.System.exit(0); return true; } LOG.err("没有找到可用的停止方法"); return false; } catch (error) { LOG.err(`[应用.停止脚本] 错误:${error}`); return false; } };
/** * 获取当前app包名 */ 应用.包名获取名称 = function (packageName) { try { LOG.info("尝试获取包名: " + packageName); let result = app.getTopPackNameV2(); LOG.info("获取包名结果: " + result); return result; } catch (error) { LOG.err("获取包名出错:" + error); return null; } };
/** * 升级补丁 */ 应用.升级补丁 = function () { try { LOG.info("开始执行升级补丁..."); app.updatePatch(); LOG.info("升级补丁执行完成"); return true; } catch (error) { LOG.err("升级补丁执行出错:" + error); return false; } };
/** * 安装app */ 应用.安装app = function (route) { if (!route) { LOG.err("错误:安装路径不能为空"); return false; } try { LOG.info("开始安装应用:" + route); let result = app.installApp(route) || app.installAppV2(route); if (result) { LOG.info("安装成功"); return true; } LOG.err("安装失败"); return false; } catch (error) { LOG.err("安装过程出现错误:" + error); return false; } };
/** * 意图转跳 */ 应用.意图转跳 = function (url) { if (!url) { LOG.err("错误:转跳地址不能为空"); return false; } try { LOG.info("开始执行意图转跳:" + url); app.startActivity({ action: "android.intent.action.VIEW", data: url }); LOG.info("意图转跳执行完成"); return true; } catch (error) { LOG.err("意图转跳出错:" + error); return false; } };
/** * 打开app */ 应用.打开app = function (PackageName) { if (!PackageName) { LOG.err("错误:包名不能为空"); return false; } try { LOG.info("开始打开应用:" + PackageName); app.openApp(PackageName); LOG.info("已执行打开应用命令"); return true; } catch (error) { LOG.err("打开应用出错:" + error); return false; } };
/** * 打开app设置 */ 应用.打开app设置 = function (PackageName) { if (!PackageName) { LOG.err("错误:包名不能为空"); return false; } try { LOG.info("开始打开应用设置:" + PackageName); app.openAppSeting(PackageName); LOG.info("已执行打开应用设置命令"); return true; } catch (error) { LOG.err("打开应用设置出错:" + error); return false; } };
/** * 获取应用版本号 */ 应用.获取版本号 = function (packageName) { try { let versionCode = app.getVersionCode(packageName); LOG.info("应用 " + packageName + " 的版本号是: " + versionCode); return versionCode; } catch (error) { LOG.err("获取版本号出错: " + error); return null; } };
/** * 获取上下文 */ 应用.获取上下文 = function () { try { LOG.info("开始获取应用上下文"); let context = app.getContext() || rhino.getContext(); if (context) { LOG.info("成功获取应用上下文"); return context; } LOG.err("获取应用上下文失败:无法获取有效的上下文对象"); return null; } catch (error) { LOG.err("获取应用上下文过程出现错误:" + error); return null; } };
/** * 获取全部app信息 */ 应用.获取全部app信息 = function () { try { LOG.info("开始获取全部app信息"); let appList = app.getPackages() || app.getAppList() || []; if (appList.length === 0) { LOG.err("获取应用列表失败:没有找到可用的API或没有已安装的应用"); return null; } let result = appList.map(packageName => [packageName, app.getAppName(packageName) || packageName]); LOG.info("成功获取全部app信息,共 " + result.length + " 个应用"); return result; } catch (error) { LOG.err("获取全部app信息过程出现错误:" + error); return null; } };
/** * 获取设备当前内存占用 */ 应用.获取内存占用 = function() { try { let memoryPercent = app.getMemoryPercent(); if (memoryPercent === null) { LOG.err("获取内存信息失败"); return null; } return memoryPercent + "%"; } catch (error) { LOG.err("获取内存占用失败: " + error); return null; } };
/** * 获取当前应用顶层activity */ 应用.获取当前activity = function() { try { let activity = app.getCurrentActivity() || app.getAgentCurrenAcitvity(); if (activity) { return activity; } LOG.err("获取当前activity失败"); return null; } catch (error) { LOG.err("获取当前activity失败: " + error); return null; } };
/** * 获取当前前台app包名 */ 应用.获取当前包名 = function() { try { let packageName = app.getTopPackName(); if (!packageName) { LOG.err("获取包名失败"); return null; } return packageName; } catch (error) { LOG.err("获取当前包名失败: " + error); return null; } };
/** * 获取文件URI */ 应用.获取文件uri = function(File) { try { let file = new java.io.File(File); if (!file.exists()) { LOG.err("文件不存在: " + File); return null; } let uri = "file://" + file.getAbsolutePath(); if (!uri) { LOG.err("获取文件uri失败"); return null; } return uri; } catch (error) { LOG.err("获取文件uri失败: " + error); return null; } };
/** * 重启app */ 应用.重启app = function(PackageName) { try { if (!PackageName) { LOG.err("错误: 包名不能为空"); return false; } if (typeof app !== "undefined" && typeof app.resetApp === "function") { let result = app.resetApp(PackageName); if (result) { LOG.info("使用app.resetApp成功重启应用: " + PackageName); return true; } } // 使用无需root的方式重启应用 let cmdStop = "am force-stop " + PackageName; java.lang.Runtime.getRuntime().exec(cmdStop).waitFor(); LOG.info("已执行停止应用命令"); java.lang.Thread.sleep(1000); let cmdStart = "am start -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -p " + PackageName; java.lang.Runtime.getRuntime().exec(cmdStart).waitFor(); java.lang.Thread.sleep(1000); LOG.info("应用重启操作已完成: " + PackageName); return true; } catch (error) { LOG.err("重启应用出错: " + error); return false; } };
// 主菜单函数 function showMenu() { LOG.info("=== 应用管理工具菜单 ==="); LOG.info("1. 获取当前包名"); LOG.info("2. 打开应用(演示)"); LOG.info("3. 重启应用(演示)"); LOG.info("4. 获取内存占用"); LOG.info("5. 获取应用版本号(演示)"); // 模拟用户选择,这里我们依次演示所有功能 for (let choice = 1; choice <= 5; choice++) { LOG.info(`\n执行选项 ${choice}:`); switch(choice) { case 1: let currentPackage = 应用.获取当前包名(); LOG.info("当前包名: " + currentPackage); break; case 2: let packageToOpen = "com.android.settings"; // 以设置应用为例 LOG.info(`尝试打开应用: ${packageToOpen}`); 应用.打开app(packageToOpen); break; case 3: let packageToRestart = "com.android.settings"; // 以设置应用为例 LOG.info(`尝试重启应用: ${packageToRestart}`); 应用.重启app(packageToRestart); break; case 4: let memoryUsage = 应用.获取内存占用(); LOG.info("当前内存占用: " + memoryUsage); break; case 5: let packageForVersion = "com.android.settings"; // 以设置应用为例 let version = 应用.获取版本号(packageForVersion); LOG.info(`应用 ${packageForVersion} 的版本号: ` + version); break; } } LOG.info("\n演示完成"); }
// 启动菜单 showMenu();
这个脚本是一个综合性的应用管理工具,主要用于 Android 环境下的应用操作和系统信息获取。让我们逐部分进行详细说明: 核心对象和日志功能: 应用 对象:这是一个包含所有应用管理功能的核心对象。LOG 对象:提供了info 和 err 两个方法用于日志输出,使用 printl 函数(可能是环境提供的日志打印函数)。
应用管理功能: 停止脚本 :尝试使用多种方法停止当前脚本的执行。包名获取名称 :获取当前前台应用的包名。升级补丁 :执行应用的补丁升级。安装app :安装指定路径的应用。意图转跳 :执行 Android 的Intent跳转。打开app :打开指定包名的应用。打开app设置 :打开指定应用的系统设置页面。获取版本号 :获取指定应用的版本号。获取上下文 :获取应用的上下文对象。获取全部app信息 :获取设备上所有已安装应用的信息。获取内存占用 :获取当前设备的内存占用率。获取当前activity :获取当前前台应用的顶层 Activity。获取当前包名 :获取当前前台应用的包名。获取文件uri :获取指定文件的 URI。重启app :重启指定的应用。
菜单和演示功能: showMenu 函数:这是主菜单函数,它会自动演示五个核心功能。- 演示流程:
- 获取当前包名
- 打开设置应用(com.android.settings)
- 重启设置应用
- 获取内存占用
- 获取设置应用的版本号
错误处理: - 每个函数都包含 try-catch 块来捕获可能的错误。
- 错误信息会通过
LOG.err 输出。
兼容性考虑: - 脚本尝试使用多种方法来执行某些操作(如停止脚本、重启应用等),以提高在不同环境下的兼容性。
自动化执行: - 脚本结尾调用
showMenu() 函数,使其在运行时自动执行所有演示功能。
| |  | |  |
|
untoAIWROK软件常见正则方法集合小结nextnocontent
|