11 个版本
0.2.4 | 2024 年 4 月 17 日 |
---|---|
0.2.3 | 2024 年 4 月 15 日 |
0.1.6 | 2024 年 4 月 11 日 |
1000 在 命令行工具 中排名
每月下载量 120
13KB
210 行
使用 Rust 编写的简单 ADB 客户端
===========================
ADBCmd 可以使用回调函数闭包同步或异步地执行命令。
目前,该库主要用于在 Rust 中调用 "cmd" 命令,提供各种实用 API。
- new:创建一个 ADBCmd 实例,返回一个 ADBCmd 实例。
- create_adb_cmd:根据
tokio::process::Command
创建一个异步Command
实例,返回Command
的实例。 - run_async:通过传递回调参数执行异步命令,以实时获取
Command
的输出。 - run:执行同步命令(基于
std::process::Command
),以获取当前同步命令的输出,返回一个Result<String, String>
。 - get_file_path:获取给定路径的文件路径;如果不存在,则返回错误消息,返回一个
Result<String, String>
。
使用方法
[dependencies]
tokio = { version = "1.0", features = ["full"] }
adb-rust="0.2.1"
- 调用
use adb_rust::cmd::{ADBCmd, ADBCmdResult};
pub fn push_xml_file() {
let file: &str = "./resources/file.xml";
let paths: String = ADBCmd::get_file_path(file).unwrap();
let args: Vec<String> = vec!["push".to_string(), paths, "/sdcard/".to_string()];
let res: Result<String, String> = ADBCmd::new("adb", true).run(&args);
...
...
}
API
pub mod tests {
use crate::cmd::{ADBCmd, ADBCmdTrait};
use super::*;
use tokio;
#[test]
fn test_adb_cmd() {
let path = ADBCmd::get_file_path("./resources/file.xml").unwrap();
let cleaned_path = path.replace("\\\\?\\", "");
let args = vec!["push".to_string(), cleaned_path, "/data/local/tmp/".to_string()];
let binding = ADBCmd::new("adb", false);
let result = binding.run(&args);
match result {
Ok(stdout) => println!("{}", stdout),
Err(stderr) => println!("{}", stderr),
}
}
#[tokio::test]
async fn test_run_async() {
let adb_cmd = ADBCmd::new("adb", false);
let args = vec!["devices".to_string()];
adb_cmd.run_async(args, |line| {
println!("{}", line);
line
}).await;
}
}
依赖关系
~2.4–8.5MB
~57K SLoC