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
相关推荐
csbysj20207 分钟前
DTD 元素:XML 与 SGML 文档结构解析指南
开发语言
傻童:CPU20 分钟前
C语言练习题
c语言·开发语言
极地星光30 分钟前
协程:实战与系统集成(高级篇)
开发语言
0和1的舞者1 小时前
《Git:从入门到精通(八)——企业级git开发相关内容》
大数据·开发语言·git·搜索引擎·全文检索·软件工程·初学者
liulilittle1 小时前
LwIP协议栈MPA多进程架构
服务器·开发语言·网络·c++·架构·lwip·通信
水淹萌龙1 小时前
玩转 Go 表达式引擎:expr 实战指南
开发语言·后端·golang
艾莉丝努力练剑1 小时前
【C++:继承】面向对象编程精要:C++继承机制深度解析与最佳实践
开发语言·c++·人工智能·继承·c++进阶
penguin_bark1 小时前
C++ 异步编程(future、promise、packaged_task、async)
java·开发语言·c++
小龙报1 小时前
《数组和函数的实践游戏---扫雷游戏(基础版附源码)》
c语言·开发语言·windows·游戏·创业创新·学习方法·visual studio
又是忙碌的一天2 小时前
Java基础 与运算
java·开发语言