将我的Android用作USB设备

将我的Android用作USB设备,android,usb,Android,Usb,我已经在StackOverflow上找到了一些关于如何使用Android手机控制USB设备的帖子——我知道这是不可能的(Android是USB设备等等) 不过,我非常乐意将我的应用程序设置为与另一台计算机(Linux主机)作为USB设备进行通信。(就像一只非常昂贵的老鼠……) 是否有人知道如何设置Android应用程序/手机以使用USB连接并与主机交换数据。显然,它已经在某种程度上起作用了——Eclipse和Android SDK/debugger就是这样做的,但我仍在寻找在应用程序中实现这一点

我已经在StackOverflow上找到了一些关于如何使用Android手机控制USB设备的帖子——我知道这是不可能的(Android是USB设备等等)

不过,我非常乐意将我的应用程序设置为与另一台计算机(Linux主机)作为USB设备进行通信。(就像一只非常昂贵的老鼠……)

是否有人知道如何设置Android应用程序/手机以使用USB连接并与主机交换数据。显然,它已经在某种程度上起作用了——Eclipse和Android SDK/debugger就是这样做的,但我仍在寻找在应用程序中实现这一点的方法

(顺便说一句,我现在的手机是一个不可思议的机器人。)

谢谢,
R.

基本上,您需要从SDK安装USB设备驱动程序和ADB工具套件,或者对其功能进行反向工程,并将其构建到其他东西中

然后在手机上启用USB调试

然后你可以做一些类似adb端口转发的事情,允许pc上的应用程序连接到手机上的网络套接字侦听器。请注意,不能在另一个方向进行连接,但一旦进行了连接,它就是双向的

如果您的android版本支持通过USB进行连接,您还可以利用USB在PC和手机之间隐式创建一个网络,在这一点上,您可以在任意方向进行连接。只要确保没有任何东西意外地通过手机的移动网络传输大量数据


(许多android手机实际上可以实验性地充当USB主机,但你必须在内核中编译新的驱动程序,安装新版本,并架设一根电缆为设备提供USB电源,因为手机无法做到这一点。此外,你还失去了ADB over USB通道,这让调试变得很痛苦)

你的意思是像闪存驱动器一样?或者你的意思是在你创建的应用程序中?不,只有一部手机和一台主机(每台都运行一个自定义应用程序,没有其他USB硬件)。我想在主机上的应用程序和Android上的应用程序之间交换数据。目前,我是通过TCP和UDP来实现这一点的,但项目的参数已经增加,我需要寻找另一种方式。你希望通过其他方式更好的网络协议有什么问题?您更喜欢哪种其他类型的系统间通信模式?或者问题不在于协议,而在于你想摆脱wifi或3g作为一种传输工具,使用USB等本地设备?在这种情况下,您可能仍然保留下面解释的网络协议。WiFi唯一的问题是可能会丢失链接。在WiFi无法正常工作的情况下,我需要另一种解决方案。谢谢你的帮助。这听起来很有帮助,但我想澄清一下,因为你已经发布了一个非常全面的回复。。。我认为任何逆向工程都是万不得已的手段,我绝对不想玩弄我手机的操作系统,因此,1)在我的主机上安装Android SDK(带USB驱动程序和ADB),2)学习ADB技巧,让我通过USB连接联网。。。说真的,是这样吗??哇!可悲的是,我的手机版本的“栓系”只是将WiFi连接到蜂窝网络,但至少我没有移动网络担心关机……是的,只需安装sdk,启用adb,并在adb端口上阅读文档。如果你需要的主机不能使用实际的sdk,你只需要对adb客户端进行反向工程,比如说一个非x86处理器的小型嵌入式系统,你无法编译当前的adb代码。遗憾的是,最后一句话可能正是让我们大吃一惊的地方。。。哦,好吧,我们来看看我们能做些什么。事实上,这些代码可以在各种处理器上移植到linux上——有些adb代码甚至在pc和手机之间很常见。弄清楚如何只构建adb可能是困难的部分。我做了一些搜索,找到了android-sdk_r07-linux_x86.tgz(相当容易)。不幸的是,我还发现我的linux计算机工作得不太好,需要注意——但这是另一个问题。让我担心的是以tarball的名字命名的“x86”——这让我怀疑相关源代码的可用性。。。谢谢你的支持。