当连接到两个智能手机时,adb有两个相同的序列号

我有两个智能手机( ZTEV788d ,系统Android 2.3.6 )同时连接到一台电脑( Unbuntu 11.10 ),使用命令: adb devices我得到这个:

 List of devices attached P753A12D device P753A12D device 

序列号是一样的!

我在计算机端编写了一个应用程序来与这两个手机进行通信,例如安装应用程序和推送文件。

我使用了这些命令:

 adb -s P753A12D install XXX.apk adb -s P753A12D push XXX /sdcard 

现在这两个电话有相同的序列号( P753A12D ),当我运行这些命令时,我得到这个错误:

 error:more than one device 

所以,我的问题是:

  1. 这两个电话有相同的序列号是正常的吗?
  2. 我可以更改序号吗? 如果是的话,怎么样?
  3. 有没有什么办法可以运行这些安装,即使序列号相同也能成功执行命令?

顺便说一下,当我运行testing时,WiFi / 3Gnetworking将被closures。

今天我find了一个简单的解决scheme。

 adb devices -l 

您将获得具有其限定符的设备列表

 List of devices attached P753A12D device usb:26200000 P753A12D device usb:24400000 

那么你可以使用限定符,而不是像这样的序列号

 adb -s usb:26200000 install xxx.apk 

我面临着同样的问题。 这是因为adb工具使用序列号来识别连接到usb的设备,而不是其设备path(这是唯一的)。

如果您觉得自己的手脏了,请下载Android源代码树,转到system/core/adb/transport.c ,将其更改为如下所示:

 void register_usb_transport(usb_handle *usb, const char *serial, const char *devpath, unsigned writeable) { atransport *t = calloc(1, sizeof(atransport)); D("transport: %p init'ing for usb_handle %p (sn='%s')\n", t, usb, serial ? serial : ""); init_usb_transport(t, usb, (writeable ? CS_OFFLINE : CS_NOPERM)); // if(serial) { // t->serial = strdup(serial); // } if(devpath) { t->devpath = strdup(devpath); t->serial = strdup(devpath); } 

从顶级path中inputmake adb ,然后瞧。 设备使用USBpath进行识别。 现在,您只需点击一下,即可安装和执行Eclipse中的所有设备。

这两个电话有相同的序列号是正常的吗?

序列号的目的是为了唯一标识设备,所以它们应该是不同的。 这就是说,一些厂商不打扰。 固件也可能错误地报告了数字。

https://stackoverflow.com/questions/4636794/strange-output-of-adb-devices?rq=1

您可以检查实际设备上的序列号,并查看它是否与adb报告的内容相匹配。

 Settings > About Device > Phone Identity > Device Serial Number 

2.我可以更改序列号吗? 如果是的话,怎么样?

没有一个简单或一致的方法来做到这一点,我知道。 下面是一些其他人已经完成这个壮举(但我没有)的例子:

xda-developers.com – 更改无线,BT,IMEI,任何MTK Android手机的序列号

hugestreet.info – 如何更改任何Android设备的IMEI,设备ID


3.是否有任何方法可以运行这些安装,即使序列号相同,也能成功推送命令?

如果一次只连接一个设备,则不应该有任何运行命令的问题。

如果您的设备是根植的尝试这种方式
要更改您的设备序列号,首先将其中一个连接到您的电脑,然后键入这个cmd

 adb devices 

这显示您的设备ID(序列号)。

 List of devices attached P753A12D device 

select一些新的名字,例如NAME1
然后input这个命令

 adb shell su device_name="NEW_NAME" cd /sys/class/android_usb/android0/ echo -n $device_name > iSerial cat iSerial 

exit根目录
exit shell

开始
现在拔下USB电缆并运行这个命令

 adb kill-server 

再次连接您的设备并键入

 adb devices 

现在你可以看到变化

 List of devices attached New_NAME device 

结束

注意:如果第一次不行的话
请断开您的电话,然后再次从START开始执行导游部分。

@mirokropacek给出的答案适用于Linux(也可能是Mac),但不幸的是,它不适用于Windows。 这是由于在Windows中调用register_usb_transport函数的方式。 事实certificate,在Windows中,devpath参数始终为NULL 。 我需要处理相同的情况,所以我调整了上面给出的解决scheme,如果serial参数为NULL或者为空(零长度),则为每个设备随机生成一个设备ID。

我不需要担心长时间区分设备和许多设备,因此使用rand生成设备ID的伪随机数,然后使用sprintf创build该ID的string表示forms似乎足以满足我的需求但是YMMV。 它只产生一个4位数的hex数,但对我来说足够好(现在至less)。

如果您不想更改设备本身,和/或没有root访问权限,并且设备具有networking访问权限,则可以切换到使用TCPIP而不是USB:

  1. 将adb切换为使用TCPIP: adb tcpip 5555
  2. 让adb使用networking连接到设备: adb connect yourhostname

我已经通过SSH连接到本地主机,所以所有设备都显示为'localhost',这是非常有用的。 将主机添加到/ etc / hosts(全部指向localhost)为我解决了这个问题。