M8Test Help

命令

M8Test 实现了类似于 linux 命令的功能, 可以通过命令实现几乎所有的功能.

运行命令

方法1

在app主页面点击命令

30

点击运行命令

31

输入命令 navigation about

32

点击运行图标

33

可以看到已经跳转到关于界面

34

方法2

点击悬浮菜单中运行命令按钮

35

输入需要执行的命令后点击运行图标即可

36

查看命令列表

在app主页面点击命令

30

点击命令列表

37

可以看到所有已经注册的命令, 点击某个命令

38

可以查看其用法, 如下所示

39

查看命令历史

在app主页面点击命令

30

点击命令历史

40

可以看到之前执行的所有命令

41

通过广播执行命令

将手机通过adb连接到电脑, 使用以下 adb 命令发送广播以实现运行命令的功能, 下面的命令同样实现跳转到关于页面的功能

adb shell am broadcast -a ${packageName}/com.m8test.action.command.EXECUTE --es 'command' 'navigation about'

命令解析:

  • adb shell am broadcast: 发送广播

  • -a ${packageName} /com.m8test.action.command.EXECUTE: 指定 Intent action, 请将 ${packageName} 替换为实际的包名, 也就是开发时指定生成的apk包名.

  • --es 'command' 'navigation about': 添加 string 类型 bundle 数据, key 为 command, 值为需要执行的命令

还可以通过 --esa 'environment' 'hello=hi','foo=bar' 指定执行命令时需要的环境变量, 命令如下

adb shell am broadcast -a com.m8test.app.developmentkit/com.m8test.action.command.EXECUTE --es 'command' 'navigation about' --esa 'environment' 'hello=hi','foo=bar'

自定义命令

如果想要自定义命令的话需要通过插件实现, 如果您还不会开发插件可以先查看 插件开发

  1. 编写命令继承 AbstractCommand, 并实现其中的 execute 方法

package com.m8test.plugins.common.command import com.m8test.Result import com.m8test.command.impl.AbstractCommand /** * Description TODO * * @date 2025/01/28 17:24:58 * @author M8Test, [email protected], https://m8test.com */ object EchoCommand : AbstractCommand("echo", "1.0", "echo command") { override fun execute(argument: String, environment: Map<String, Any>): Result { return Result.success(argument) } }
  1. AbstractPluggableApkPlugin 中的 onInstall 方法注册命令, 以及在 onUninstall 方法取消注册命令

package com.m8test.plugins.common.command import com.m8test.plugin.api.ApkPluginProvider import com.m8test.plugin.impl.AbstractPluggableApkPlugin import com.m8test.util.CommandUtils /** * Description TODO * * @date 2024/12/23 22:24:15 * @author M8Test, [email protected], https://m8test.com */ class CommandPlugin(apkPluginProvider: ApkPluginProvider) : AbstractPluggableApkPlugin(apkPluginProvider) { override fun onInstall() { super.onInstall() CommandUtils.register(this, EchoCommand) } override fun onUninstall() { super.onUninstall() CommandUtils.unregister(this, EchoCommand) } }
Last modified: 29 April 2025