You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C#通过USB连接安卓手机时触发ArgumentException异常

问题分析与解决方案

可能的原因及对应修复方式

1. UWP应用未正确声明USB设备权限

UWP应用必须在Package.appxmanifest中声明要访问的USB设备,否则即使能获取到UsbDevice实例,发送控制请求时也会触发参数异常。

需要添加如下声明(替换为你的设备VID/PID):

<Capabilities>
  <DeviceCapability Name="usb">
    <Device Id="vid:1004 pid:633E">
      <Function Type="classId:ff subclass:42 protocol:01"/> <!-- ADB接口的类/子类/协议 -->
      <Function Type="vendorSpecific"/>
    </Device>
  </DeviceCapability>
</Capabilities>

注:ADB接口的USB类通常是0xFF(Vendor Specific),子类0x42,协议0x01,需要和设备管理器中显示的接口信息一致。

2. 错误使用UsbDevice直接发送控制请求

UWP中,控制请求应该发送到具体的USB接口,而非直接使用UsbDevice实例。ADB设备包含多个接口,你需要先筛选出支持Vendor控制请求的接口:

修改代码,获取目标接口后再发送请求:

if (usbDevice != null)
{
    // 筛选ADB对应的接口(类0xFF,子类0x42,协议0x01)
    UsbInterface targetInterface = usbDevice.Interfaces.FirstOrDefault(
        i => i.ClassCode == 0xFF && i.SubclassCode == 0x42 && i.ProtocolCode == 0x01);

    if (targetInterface == null)
    {
        // 未找到目标接口,处理错误
        return;
    }

    byte[] bytes = new byte[2];
    IBuffer buf = bytes.AsBuffer();

    UsbSetupPacket initSetupPacket = new UsbSetupPacket()
    {
        RequestType = new UsbControlRequestType()
        {
            Direction = UsbTransferDirection.In,
            Recipient = UsbControlRecipient.Device,
            ControlTransferType = UsbControlTransferType.Vendor,
        },
        Request = 51,
        Value = 0,
        Index = 0,
        Length = 2
    };

    // 使用目标接口发送控制请求
    IBuffer result = await targetInterface.SendControlInTransferAsync(initSetupPacket, buf);
}

3. WinUSB驱动绑定问题

确保WinUSB驱动是绑定到ADB接口而非设备的其他接口。可以通过设备管理器查看:

  • 展开“Android Phone” -> “Android Composite ADB Interface”
  • 右键属性 -> 详细信息 -> 硬件ID,确认是否包含USB\VID_1004&PID_633E&MI_xx(MI是接口编号)
  • 确认驱动是WinUSB.sys,而非其他ADB驱动

4. SetupPacket参数验证

虽然你的参数符合AOA规范,但需确认:

  • RequestType的位编码正确:UWP的UsbControlRequestType会自动处理位编码,但需确保Direction设置为In(对应AOA协议中主机读取版本号的请求)
  • Length设置为2,对应AOA协议返回的16位版本号,缓冲区大小需完全匹配

额外排查步骤

  • 启用UWP的USB调试:在Visual Studio中,进入“调试” -> “选项” -> “调试” -> “USB调试”,启用日志,查看更详细的错误信息
  • 使用USBView工具查看设备的接口描述符,确认目标接口的端点和支持的控制请求类型

内容的提问来源于stack exchange,提问作者e.g.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 13:15:29