Compare commits
2 Commits
v2.1.15
...
wasm-suppo
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
aa3943f21f | ||
|
|
4ebbd99607 |
@@ -9,7 +9,7 @@ homepage = "https://github.com/cocool97/adb_client"
|
||||
keywords = ["adb", "android", "tcp", "usb"]
|
||||
license = "MIT"
|
||||
repository = "https://github.com/cocool97/adb_client"
|
||||
version = "2.1.15"
|
||||
version = "2.1.13"
|
||||
|
||||
# To build locally when working on a new release
|
||||
[patch.crates-io]
|
||||
|
||||
@@ -10,32 +10,39 @@ repository.workspace = true
|
||||
version.workspace = true
|
||||
|
||||
[dependencies]
|
||||
base64 = { version = "0.22.1" }
|
||||
getrandom = { version = "*", features = ["js"] }
|
||||
ring = { version = "*", features = ["wasm32_unknown_unknown_js"] }
|
||||
|
||||
bincode = { version = "1.3.3" }
|
||||
byteorder = { version = "1.5.0" }
|
||||
base64 = { version = "0.22.1", optional = true }
|
||||
byteorder = { version = "1.5.0", optional = true }
|
||||
chrono = { version = "0.4.40", default-features = false, features = ["std"] }
|
||||
homedir = { version = "= 0.3.4" }
|
||||
homedir = { version = "0.3.4", optional = true }
|
||||
image = { version = "0.25.5", default-features = false }
|
||||
log = { version = "0.4.26" }
|
||||
mdns-sd = { version = "0.13.9", default-features = false, features = [
|
||||
"logging",
|
||||
] }
|
||||
num-bigint = { version = "0.8.4", package = "num-bigint-dig" }
|
||||
num-traits = { version = "0.2.19" }
|
||||
quick-protobuf = { version = "0.8.1" }
|
||||
rand = { version = "0.9.0" }
|
||||
], optional = true }
|
||||
num-bigint = { version = "0.8.4", package = "num-bigint-dig", optional = true }
|
||||
num-traits = { version = "0.2.19", optional = true }
|
||||
quick-protobuf = { version = "0.8.1", optional = true }
|
||||
rand = { version = "0.8.5", optional = true }
|
||||
rcgen = { version = "0.13.1", default-features = false, features = [
|
||||
"aws_lc_rs",
|
||||
"pem",
|
||||
] }
|
||||
regex = { version = "1.11.1", features = ["perf", "std", "unicode"] }
|
||||
rsa = { version = "0.9.7" }
|
||||
rusb = { version = "0.9.4", features = ["vendored"] }
|
||||
rustls = { version = "0.23.27" }
|
||||
rustls-pki-types = { version = "1.11.0" }
|
||||
], optional = true }
|
||||
regex = { version = "1.11.1", features = [
|
||||
"perf",
|
||||
"std",
|
||||
"unicode",
|
||||
], optional = true }
|
||||
rsa = { version = "0.9.7", optional = true }
|
||||
rusb = { version = "0.9.4", features = ["vendored"], optional = true }
|
||||
rustls = { version = "0.23.27", optional = true }
|
||||
rustls-pki-types = { version = "1.11.0", optional = true }
|
||||
serde = { version = "1.0.216", features = ["derive"] }
|
||||
serde_repr = { version = "0.1.19" }
|
||||
sha1 = { version = "0.10.6", features = ["oid"] }
|
||||
serde_repr = { version = "0.1.19", optional = true }
|
||||
sha1 = { version = "0.10.6", features = ["oid"], optional = true }
|
||||
thiserror = { version = "2.0.7" }
|
||||
|
||||
[dev-dependencies]
|
||||
|
||||
@@ -31,7 +31,7 @@ pub fn read_adb_private_key<P: AsRef<Path>>(private_key_path: P) -> Result<Optio
|
||||
}
|
||||
|
||||
/// Search for adb devices with known interface class and subclass values
|
||||
pub fn search_adb_devices() -> Result<Option<(u16, u16)>> {
|
||||
fn search_adb_devices() -> Result<Option<(u16, u16)>> {
|
||||
let mut found_devices = vec![];
|
||||
for device in rusb::devices()?.iter() {
|
||||
let Ok(des) = device.device_descriptor() else {
|
||||
@@ -57,8 +57,7 @@ pub fn search_adb_devices() -> Result<Option<(u16, u16)>> {
|
||||
}
|
||||
}
|
||||
|
||||
/// Check whether a device with given descriptor is an ADB device
|
||||
pub fn is_adb_device<T: UsbContext>(device: &Device<T>, des: &DeviceDescriptor) -> bool {
|
||||
fn is_adb_device<T: UsbContext>(device: &Device<T>, des: &DeviceDescriptor) -> bool {
|
||||
const ADB_SUBCLASS: u8 = 0x42;
|
||||
const ADB_PROTOCOL: u8 = 0x1;
|
||||
|
||||
@@ -181,11 +180,6 @@ impl ADBUSBDevice {
|
||||
self.get_transport_mut().write_message(message)?;
|
||||
|
||||
let message = self.get_transport_mut().read_message()?;
|
||||
// If the device returned CNXN instead of AUTH it does not require authentication,
|
||||
// so we can skip the auth steps.
|
||||
if message.header().command() == MessageCommand::Cnxn {
|
||||
return Ok(());
|
||||
}
|
||||
message.assert_command(MessageCommand::Auth)?;
|
||||
|
||||
// At this point, we should have receive an AUTH message with arg0 == 1
|
||||
|
||||
@@ -35,10 +35,10 @@ impl<T: ADBMessageTransport> Write for MessageWriter<T> {
|
||||
Ok(response) => {
|
||||
response
|
||||
.assert_command(MessageCommand::Okay)
|
||||
.map_err(Error::other)?;
|
||||
.map_err(|e| Error::new(ErrorKind::Other, e))?;
|
||||
Ok(buf.len())
|
||||
}
|
||||
Err(e) => Err(Error::other(e)),
|
||||
Err(e) => Err(Error::new(ErrorKind::Other, e)),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,9 +11,7 @@ mod shell_message_writer;
|
||||
use adb_message_device::ADBMessageDevice;
|
||||
pub use adb_tcp_device::ADBTcpDevice;
|
||||
pub use adb_transport_message::{ADBTransportMessage, ADBTransportMessageHeader};
|
||||
pub use adb_usb_device::{
|
||||
ADBUSBDevice, get_default_adb_key_path, is_adb_device, search_adb_devices,
|
||||
};
|
||||
pub use adb_usb_device::{ADBUSBDevice, get_default_adb_key_path};
|
||||
pub use message_writer::MessageWriter;
|
||||
pub use models::{ADBRsaKey, MessageCommand, MessageSubcommand};
|
||||
pub use shell_message_writer::ShellMessageWriter;
|
||||
|
||||
@@ -7,21 +7,37 @@
|
||||
mod adb_device_ext;
|
||||
mod constants;
|
||||
mod device;
|
||||
mod emulator_device;
|
||||
mod error;
|
||||
mod mdns;
|
||||
mod models;
|
||||
mod server;
|
||||
mod server_device;
|
||||
mod transports;
|
||||
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
mod emulator_device;
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
mod mdns;
|
||||
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
mod server;
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
mod server_device;
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
mod utils;
|
||||
|
||||
pub use adb_device_ext::ADBDeviceExt;
|
||||
pub use device::{ADBTcpDevice, ADBUSBDevice, is_adb_device, search_adb_devices};
|
||||
pub use emulator_device::ADBEmulatorDevice;
|
||||
pub use device::ADBUSBDevice;
|
||||
pub use error::{Result, RustADBError};
|
||||
pub use mdns::*;
|
||||
pub use models::{AdbStatResponse, RebootType};
|
||||
pub use transports::{ADBMessageTransport, ADBTransport};
|
||||
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
pub use device::ADBTcpDevice;
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
pub use emulator_device::ADBEmulatorDevice;
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
pub use mdns::*;
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
pub use server::*;
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
pub use server_device::ADBServerDevice;
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
pub use transports::*;
|
||||
|
||||
@@ -42,15 +42,18 @@ impl<R: Read> Read for ADBRecvCommandReader<R> {
|
||||
let mut error_msg = vec![0; length];
|
||||
self.inner.read_exact(&mut error_msg)?;
|
||||
|
||||
Err(std::io::Error::other(format!(
|
||||
"ADB request failed: {}",
|
||||
String::from_utf8_lossy(&error_msg)
|
||||
)))
|
||||
Err(std::io::Error::new(
|
||||
std::io::ErrorKind::Other,
|
||||
format!(
|
||||
"ADB request failed: {}",
|
||||
String::from_utf8_lossy(&error_msg)
|
||||
),
|
||||
))
|
||||
}
|
||||
_ => Err(std::io::Error::other(format!(
|
||||
"Unknown response from device {:#?}",
|
||||
header
|
||||
))),
|
||||
_ => Err(std::io::Error::new(
|
||||
std::io::ErrorKind::Other,
|
||||
format!("Unknown response from device {:#?}", header),
|
||||
)),
|
||||
}
|
||||
} else {
|
||||
// Computing minimum to ensure to stop reading before next header...
|
||||
|
||||
Reference in New Issue
Block a user