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
相关推荐
LDR0069 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术9 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园9 天前
C++20 Modules 模块详解
java·开发语言·spring
swordbob9 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享9 天前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.9 天前
C语言--day30
c语言·开发语言
何以解忧,唯有..9 天前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
謓泽9 天前
C语言不是语法,是通往机器的地图。
c语言·开发语言
云水一下9 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
飞天狗1119 天前
零基础JavaWeb入门——第五课第二小节:九大内置对象 · 第2个:response(响应对象)
java·开发语言