我们都有看过手机助手软件,当手机插到电脑上时,电脑上就可以看到手机中的文件夹。还能完成文件的拷贝,安装等功能。现在我们就用C#,通过 adb + usb 实现简单的网络通讯功能。 调用adb有几种方式:一种就是通过cmd命令行来调用。另外一种就是直接调用adb工具。cmd命令调用的例子较多,本例就使用直接通过adb的方式来实现。

准备工作


下载以下依赖文件:

- adb.exe
- AdbWinApi.dll
- AdbWinUsbApi.dll

核心代码


        private string RunAdbCmd(string arg)
        {
            var p = new Process(); //实例一个Process类,启动一个独立进程
            p.StartInfo.FileName = "adb.exe"; //设定程序名
            p.StartInfo.Arguments = arg;
            p.StartInfo.UseShellExecute = false; //关闭Shell的使用
            p.StartInfo.RedirectStandardInput = true; //重定向标准输入
            p.StartInfo.RedirectStandardOutput = true; //重定向标准输出
            p.StartInfo.RedirectStandardError = true; //重定向错误输出
            p.StartInfo.CreateNoWindow = true; // 设置不显示窗口
            p.StartInfo.ErrorDialog = false;
            p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            p.Start();
            return p.StandardOutput.ReadToEnd();
        }

使用方法如:


var result = RunAdbCmd("devices");
    result = RunAdbCmd($"-s {deviceId} forward tcp:11100 tcp:10089");
    result = RunAdbCmd("shel netstat");

注意:

  • 调用adb.exe是通过命令行传参的方式调用,前面不需要输入”adb”。如果是通过cmd命令行工具输入时才需要加上“adb”。
  • 调用adb.exe执行命令时,adb会根据命令执行不同的逻辑。有些命令执行完成后,adb会立刻退出,有些命令会一直不退出。为了防止程序得不到想要的结果,需要注意了解哪些命令是立即退出,哪些是延时退出。如:shell命令,forward命令,都是被动式退出,需要收到退出指令后才会退出。

本文会经常更新,请阅读原文: https://huchengv5.gitee.io//post/C-%E9%80%9A%E8%BF%87adb%E4%B8%8E%E5%AE%89%E5%8D%93%E8%AE%BE%E5%A4%87%E9%80%9A%E8%AE%AF.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名胡承(包含链接: https://huchengv5.gitee.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系