hamibot能否用rish_shizuku.dex进行adb的操作?有没有代码例子?

090909 · 3 天前
第 1 条补充
·
2 天前

如何判断某个软件是否安装,如果安装就显示已安装,如果未安装就下载并进行安装。代码怎么写?

第 2 条补充
·
2 天前

知道app安装包路径,如何写一个代码,让他弹出该安装包的安装界面?

回答

Hamibot AI
1
· 3 天前

Hamibot 脚本运行环境基于 Rhino JavaScript 引擎,不支持直接加载或使用外部的 .dex 文件(如 rish_shizuku.dex)。这种机制是为了保证脚本运行的安全性和稳定性。

如果你希望执行 ADB 相关的 Shell 命令,Hamibot 提供了原生的 shell() 方法。你可以利用该方法在设备上执行系统指令。

下面是符合 Rhino 1.7.15 兼容性的代码示例:

// 文档地址 https://docs.hamibot.com/
// 模拟屏幕点击
shell("input tap 500 1000");

// 获取已安装的应用包名
var output = shell("pm list packages");
print(output);

注意事项:

  1. 脚本中请勿使用箭头函数、默认参数值等 ES6+ 特性,以免报错。
  2. 执行 shell 命令前,请确保 Hamibot 已获得足够的系统权限。
  3. 复杂操作建议优先使用 Hamibot 提供的自动化 API(如 click(), toast() 等),它们比直接调用 shell 更稳定且易于维护。
ℹ️ 内容由 AI 生成,可能不准确,请注意核实
Hamibot AI
1
· 2 天前

Hamibot 可以通过 Shell 命令检测应用安装状态,并结合 HTTP 请求下载 APK 文件,最后调用系统安装指令。需要注意的是,由于 Android 系统的安全限制,非 Root 环境下自动安装通常需要用户手动确认权限。

以下是一个兼容 Rhino 1.7.15 引擎的代码示例:

// 文档地址 https://docs.hamibot.com/
var packageName = "com.example.app"; // 替换为目标应用的包名
var apkUrl = "https://example.com/app.apk"; // 替换为实际的 APK 下载地址
var savePath = "/sdcard/Download/" + packageName + ".apk";

// 检查是否已安装
function checkInstalled(pkg) {
    var result = shell("pm list packages " + pkg);
    return result.indexOf(pkg) > -1;
}

// 下载文件
function downloadFile(url, path) {
    var res = http.get(url);
    if (res.statusCode == 200) {
        var bytes = res.body.bytes();
        files.writeBytes(path, bytes);
        return true;
    }
    return false;
}

// 主逻辑
if (checkInstalled(packageName)) {
    toastLog("已安装");
} else {
    toastLog("未安装,开始下载...");
    if (downloadFile(apkUrl, savePath)) {
        toastLog("下载完成,开始安装...");
        // -r 表示覆盖安装,保留数据;-g 授予所有权限
        var installResult = shell("pm install -r -g " + savePath);
        if (installResult.indexOf("Success") > -1 || installResult.indexOf("success") > -1) {
            toastLog("安装成功");
        } else {
            toastLog("安装失败,请检查权限或手动安装");
        }
    } else {
        toastLog("下载失败");
    }
}

关键注意事项:

  1. 兼容性:代码中未使用箭头函数和默认参数,确保在 Hamibot 的 Rhino 环境中正常运行。
  2. 安装权限:从 Android 8.0 开始,系统禁止静默安装未知来源应用。脚本执行 pm install 时可能会弹出系统确认框,需要用户手动点击“允许”或“安装”。如果设备已 Root 或通过 Shizuku 授权,可能实现更高级别的控制。
  3. 存储权限:脚本需要获得存储读写权限才能将 APK 保存到 /sdcard/ 目录。
  4. 网络环境:确保设备连接网络,且下载链接有效。
  5. 安全性:请确保下载的 APK 来源可靠,避免引入恶意软件。

建议在实际使用前,先在测试设备上验证下载路径和安装指令的有效性。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实
Hamibot AI
1
· 2 天前

在 Hamibot 中,如果你已知 APK 文件的绝对路径,可以通过 Shell 命令调用系统的 Activity Manager (am) 来启动安装界面。这比直接调用 pm install 更友好,因为它会弹出标准的系统安装确认页面。

以下是兼容 Rhino 1.7.15 引擎的代码示例:

// 文档地址 https://docs.hamibot.com/
var apkPath = "/sdcard/Download/example.apk"; // 替换为你的 APK 文件绝对路径

// 构建启动安装界面的 Intent 命令
// -a android.intent.action.VIEW : 设置动作为查看
// -d : 设置数据 URI,注意需要加上 file:// 前缀
// -t application/vnd.android.package-archive : 设置 MIME 类型为安装包
var cmd = 'am start -a android.intent.action.VIEW -d "file://' + apkPath + '" -t application/vnd.android.package-archive';

// 执行命令
shell(cmd);

toastLog("正在尝试打开安装界面...");

关键注意事项:

  1. 路径格式:确保 apkPath 是完整的绝对路径(例如 /sdcard/Download/app.apk),相对路径可能无法识别。
  2. 权限要求
    • 脚本需要拥有 Shell 权限
    • 设备需要在“设置 -> 安全”中开启 “未知来源应用安装” 权限,允许 Hamibot 或当前触发安装的应用进行安装操作。
    • 从 Android 8.0 开始,如果通过非系统应用安装,可能需要用户在弹出的系统对话框中手动点击“允许”。
  3. URI 协议:代码中使用了 file:// 协议。在某些高版本 Android 系统中,如果权限配置严格,可能需要使用 content:// 协议,但在大多数自动化场景下 file:// 配合 Shell 命令通常有效。
  4. 兼容性:代码未使用箭头函数或默认参数,确保在 Hamibot 的 JavaScript 环境中稳定运行。

如果上述方法因系统限制无效,你可以尝试直接使用 app.openUrl("file://" + apkPath),但这取决于系统对文件协议的默认处理行为。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实