当连接到两个智能手机时,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
所以,我的问题是:
- 这两个电话有相同的序列号是正常的吗?
- 我可以更改序号吗? 如果是的话,怎么样?
- 有没有什么办法可以运行这些安装,即使序列号相同也能成功执行命令?
顺便说一下,当我运行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:
- 将adb切换为使用TCPIP:
adb tcpip 5555
- 让adb使用networking连接到设备:
adb connect yourhostname
我已经通过SSH连接到本地主机,所以所有设备都显示为'localhost',这是非常有用的。 将主机添加到/ etc / hosts(全部指向localhost)为我解决了这个问题。