命令
M8Test 实现了类似于 linux 命令的功能, 可以通过命令实现几乎所有的功能.
运行命令
方法1
在app主页面点击命令

点击运行命令

输入命令 navigation about

点击运行图标

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

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

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

查看命令列表
在app主页面点击命令

点击命令列表

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

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

查看命令历史
在app主页面点击命令

点击命令历史

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

通过广播执行命令
将手机通过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'
自定义命令
如果想要自定义命令的话需要通过插件实现, 如果您还不会开发插件可以先查看 插件开发
编写命令继承 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)
}
}
在 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