3 releases

0.1.2 Mar 19, 2025
0.1.1 Mar 18, 2025
0.1.0 Mar 18, 2025

#174 in Debugging

Download history 280/week @ 2025-03-16 62/week @ 2025-03-23 6/week @ 2025-03-30 4/week @ 2025-04-06

352 downloads per month

MIT license

125KB
2.5K SLoC

ADB Kit

ADB Kit 是一个用于与 Android Debug Bridge (ADB) 进行交互的 Rust 库,提供了丰富的 API 以控制和管理 Android 设备。

特性

  • 设备管理:列出、连接、断开设备
  • 应用管理:安装、卸载、启动、停止应用
  • 文件传输:向设备推送文件、从设备拉取文件
  • 屏幕捕获:截图和屏幕录制
  • 远程调试:启用 TCP/IP 连接和 Frida 服务器支持
  • 并行操作:在多设备上并行执行命令
  • 资源管理:自动清理临时文件

安装

在你的 Cargo.toml 中添加以下依赖:

[dependencies]
adb-kit = "0.1.0"

基本用法

use adb_rust::{ADB, ADBConfig, prelude::*};

fn main() -> ADBResult<()> {
    // 创建 ADB 实例
    let adb = ADB::new(None);
    
    // 列出设备
    let devices = adb.list_devices()?;
    println!("发现 {} 个设备", devices.len());
    
    for device in &devices {
        println!("设备 ID: {}, 状态: {}", device.id, device.status);
        
        if device.is_online() {
            // 获取 Android 版本
            let version = adb.get_prop(&device.id, "ro.build.version.release")?;
            println!("Android 版本: {}", version);
            
            // 列出已安装的应用
            let apps = adb.list_packages(&device.id, false, true)?;
            println!("已安装的第三方应用: {}", apps.len());
        }
    }
    
    Ok(())
}

应用管理

// 获取应用信息
let info = adb.get_package_info(&device_id, "com.example.app")?;
println!("应用版本: {:?}", info.version_name);

// 检查应用是否运行
let (running, pid) = adb.is_package_running(&device_id, "com.example.app")?;

// 启动应用
adb.start_app(&device_id, "com.example.app", None)?;

// 停止应用
adb.stop_app(&device_id, "com.example.app")?;

// 安装应用
adb.install_app(&device_id, "path/to/app.apk")?;

// 卸载应用
adb.uninstall_app(&device_id, "com.example.app")?;

文件传输

// 推送文件到设备
adb.push(&device_id, "local_file.txt", "/sdcard/remote_file.txt", None)?;

// 从设备拉取文件
adb.pull(&device_id, "/sdcard/remote_file.txt", "downloaded_file.txt", None)?;

// 检查文件是否存在
let exists = adb.file_exists(&device_id, "/sdcard/file.txt")?;

// 获取文件大小
let size = adb.get_file_size(&device_id, "/sdcard/file.txt")?;

// 创建目录
adb.create_directory(&device_id, "/sdcard/my_folder")?;

// 删除文件
adb.remove_path(&device_id, "/sdcard/file.txt", false)?;

屏幕捕获

// 截图
adb.take_screenshot(&device_id, "screenshot.png")?;

// 录制屏幕
adb.record_screen(&device_id, "recording.mp4", 10, Some("720x1280"))?;

// 使用资源管理器自动清理临时文件
adb.take_screenshot_managed(&device_id, "screenshot.png")?;

并行操作

// 在多台设备上并行执行 shell 命令
let results = adb.parallel_shell(&device_ids, "getprop ro.product.model");

// 在所有在线设备上执行操作
let results = adb.on_all_online_devices(|id| {
    adb.get_prop(id, "ro.build.version.release")
})?;

// 在多台设备上并行安装应用
let results = adb.parallel_install_app(&device_ids, "app.apk");

高级功能

// 使用自定义配置
let config = ADBConfigBuilder::default()
    .path("/custom/path/to/adb")
    .max_retries(5)
    .retry_delay(1500)
    .timeout(60000)
    .build();
    
let adb = ADB::new(Some(config));

// 启用远程调试
let addr = adb.enable_remote_debugging(&device_id, 5555)?;
println!("可以使用 'adb connect {}' 连接", addr);

// 启动 Frida 服务器
adb.start_frida_server(&device_id, "./frida-server", 27042, None, Some(true))?;

完整示例

参见 examples 目录获取更多示例。

贡献

欢迎贡献!请随时提交问题或拉取请求。

许可证

MIT

Dependencies

~5–7MB
~125K SLoC