Lua ADB 接口文档

adb 源码的基础上封装了一个lua访问adb的接口文档,以下是adb基本操作接口

Lua ADB 接口文档

模块引入

lua 复制代码
local luaadb = require("luaadb")  -- 引入 ADB 模块
local currentdevice = "192.168.1.81:5555"  -- 全局设备 ID(可配置)

1. 设备管理

listDevices()

列出所有连接的设备。

  • 返回值 : string (JSON 格式设备列表)
lua 复制代码
local devices = luaadb.listDevices()
print("Devices: " .. devices)

tcpip(port)

切换设备到 TCP/IP 模式。

  • 参数 : port (int, 默认 5555)
  • 返回值 : string (执行结果)
lua 复制代码
local result = luaadb.tcpip(currentdevice, 5555)
print("TCP/IP Mode: " .. result)

connect(addr)

通过网络连接设备。

  • 参数 : addr (string, 如 "192.168.1.81:5555")
  • 返回值 : int (0=成功, 非0=失败)
lua 复制代码
local status = luaadb.connect("192.168.1.81:5555")
print("Connect Status: " .. status)

disconnect(addr)

断开设备连接。

  • 参数 : addr (string)
  • 返回值 : int (0=成功)
lua 复制代码
luaadb.disconnect("192.168.1.81:5555")

2. 文件操作

pull(remotePath, localPath)

从设备拉取文件。

  • 参数 :
    • remotePath (string, 设备路径)
    • localPath (string, 本地路径)
  • 返回值 : int (0=成功)
lua 复制代码
luaadb.pull("/sdcard/test.txt", "./test.txt", currentdevice)

push(localPath, remotePath)

推送文件到设备。

  • 参数 :
    • localPath (string)
    • remotePath (string)
  • 返回值 : int (0=成功)
lua 复制代码
luaadb.push("./test.txt", "/sdcard/test.txt", currentdevice)

pushDir(localPath, remotePath)

推送整个目录到设备。

  • 参数 : 同 push
  • 返回值 : int (0=成功)
lua 复制代码
luaadb.pushDir("./mydir", "/sdcard/mydir", currentdevice)

3. Shell 命令

runShellCommand(commandAndArgs)

执行 ADB Shell 命令。

  • 参数 : commandAndArgs (string, 如 "pm list packages")
  • 返回值 : string (命令输出)
lua 复制代码
local output = luaadb.runShellCommand("pm list packages", currentdevice)
print("Packages: " .. output)

runCommandTimeout(cmd, timeout)

带超时的 Shell 命令。

  • 参数 :
    • cmd (string)
    • timeout (long long, 毫秒)
  • 返回值 : string (输出或超时错误)
lua 复制代码
local result = luaadb.runCommandTimeout(currentdevice, "dumpsys battery", 5000)
print("Battery Info: " .. result)

4. 应用管理

pmListPackages(isthird)

列出设备上的应用。

  • 参数 : isthird (bool, true=仅第三方应用)
  • 返回值 : string (JSON 格式应用列表)
lua 复制代码
local apps = luaadb.pmListPackages(currentdevice, true)
print("Third-party Apps: " .. apps)

install(localpath)

安装 APK。

  • 参数 : localpath (string, 本地 APK 路径)
  • 返回值 : int (0=成功)
lua 复制代码
luaadb.install(currentdevice, "./app.apk", "-r -t")  -- -r 替换, -t 允许测试包

uninstall(packagename)

卸载应用。

  • 参数 : packagename (string, 如 "com.example.app")
  • 返回值 : string (执行结果)
lua 复制代码
luaadb.uninstall(currentdevice, "com.example.app")

forceStopApp(packagename)

强制停止应用。

  • 参数 : 同 uninstall
  • 返回值 : string (结果)
lua 复制代码
luaadb.forceStopApp(currentdevice, "com.example.app")

5. 输入模拟

inputkeyevent(keycode)

模拟按键事件。

  • 参数 : keycode (string, 如 "KEYCODE_HOME")
  • 返回值 : string (结果)
lua 复制代码
luaadb.inputkeyevent(currentdevice, "KEYCODE_HOME")

click(x, y)

模拟屏幕点击。

  • 参数 : x, y (int)
  • 返回值 : string (结果)
lua 复制代码
luaadb.click(currentdevice, 500, 1000)

swipe(x1, y1, x2, y2, duration)

模拟滑动。

  • 参数 :
    • x1, y1 (起始坐标)
    • x2, y2 (结束坐标)
    • duration (int, 毫秒)
  • 返回值 : string (结果)
lua 复制代码
luaadb.swipe(currentdevice, 300, 1000, 300, 500, 300)  -- 向上滑动

6. 权限管理

pmgrant(packagename, permission)

授予应用权限。

  • 参数 :
    • packagename (string)
    • permission (string, 如 "android.permission.CAMERA")
  • 返回值 : string (结果)
lua 复制代码
luaadb.pmgrant(currentdevice, "com.example.app", "android.permission.CAMERA")

pmrevoke(packagename, permission)

撤销应用权限。

  • 参数 : 同 pmgrant
  • 返回值 : string (结果)
lua 复制代码
luaadb.pmrevoke(currentdevice, "com.example.app", "android.permission.CAMERA")

7. 系统信息

getProperty(name)

获取系统属性。

  • 参数 : name (string, 如 "ro.build.version.sdk")
  • 返回值 : string (属性值)
lua 复制代码
local sdk = luaadb.getProperty(currentdevice, "ro.build.version.sdk")
print("SDK Version: " .. sdk)

getAllProperty()

获取所有系统属性。

  • 返回值 : string (JSON 格式属性列表)
lua 复制代码
local props = luaadb.getAllProperty(currentdevice)
print("All Properties: " .. props)

wmsize()

获取屏幕分辨率。

  • 返回值 : string (如 "1080x1920")
lua 复制代码
local size = luaadb.wmsize(currentdevice)
print("Screen Size: " .. size)

8. 高级功能

root()

尝试以 Root 权限重启 ADB。

  • 返回值 : string (结果)
lua 复制代码
local rootStatus = luaadb.root(currentdevice)
print("Root Status: " .. rootStatus)

remount()

重新挂载 /system 为可写。

  • 返回值 : string (结果)
lua 复制代码
local remountStatus = luaadb.remount(currentdevice)
print("Remount Status: " .. remountStatus)

完整示例

lua 复制代码
local luaadb = require("luaadb")
local currentdevice = "192.168.1.81:5555"

-- 1. 连接设备
luaadb.connect(currentdevice)

-- 2. 安装 APK
luaadb.install(currentdevice, "./app.apk", "-r")

-- 3. 启动应用
luaadb.startappByPackageName(currentdevice, "com.example.app")

-- 4. 模拟点击
luaadb.click(currentdevice, 500, 1000)

-- 5. 卸载应用
luaadb.uninstall(currentdevice, "com.example.app")

-- 6. 断开连接
luaadb.disconnect(currentdevice)

注意事项

  1. 设备 ID :全局变量 currentdevice 可配置,避免硬编码。
  2. 错误处理 :检查返回值(如 int 类型接口返回 0 表示成功)。
  3. 超时控制 :对耗时操作(如 install)建议使用 runCommandTimeout
相关推荐
ccut 第一混3 分钟前
c# winform 调用 海康威视工业相机(又全又细又简洁)
开发语言·c#·工业相机·海康威视
red润3 小时前
let obj = { foo: 1 };为什么Reflect.get(obj, ‘foo‘, { foo: 2 }); // 输出 1?
开发语言·javascript·ecmascript
froginwe114 小时前
PHP MySQL Delete 操作详解
开发语言
Nep&Preception4 小时前
vasp计算弹性常数
开发语言·python
DIY机器人工房5 小时前
一个基于 epoll 实现的多路复用 TCP 服务器程序,相比 select 和 poll 具有更高的效率
开发语言·嵌入式硬件·php·嵌入式·diy机器人工房
Ice__Cai5 小时前
Python 基础详解:数据类型(Data Types)—— 程序的“数据基石”
开发语言·后端·python·数据类型
lilv665 小时前
python中用xlrd、xlwt读取和写入Excel中的日期值
开发语言·python·excel
阿巴~阿巴~6 小时前
构造函数:C++对象初始化的核心机制
开发语言·c++
蒋星熠7 小时前
QT项目 -仿QQ音乐的音乐播放器(第五节)
开发语言·qt