Android adb在连接到两个智能手机时获得了两个相同的序列号
我有两部智能手机(ZTEV788d,systemAndroid 2.3.6)同时连接到一台计算机(Ubuntu11.10),使用命令:Android adb在连接到两个智能手机时获得了两个相同的序列号,android,adb,Android,Adb,我有两部智能手机(ZTEV788d,systemAndroid 2.3.6)同时连接到一台计算机(Ubuntu11.10),使用命令:adb设备,我得到了这个: List of devices attached P753A12D device P753A12D device 序列号是一样的 我在计算机端编写了一个应用程序来与这两部手机通信,例如安装应用程序和推送文件 我使用了以下命令: adb -s P753A12D install XXX.apk adb -s P753A12D
adb设备
,我得到了这个:
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
因此,我的问题是:
adb
报告的内容相匹配
Settings > About Device > Phone Identity > Device Serial Number
2.我可以更改序列号吗?如果是,如何进行? 据我所知,没有一种简单或一致的方法可以做到这一点。以下是一些其他人完成这一壮举的例子(但我没有):
3.即使序列号相同,是否有办法成功运行这些安装、推送命令?
如果一次只连接一个设备,那么运行命令应该不会有任何问题。我也遇到了同样的问题。这是因为adb工具使用序列号来识别连接到usb的设备,而不是它们的设备路径(它们肯定是唯一的) 如果你觉得自己够脏的,请下载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);
}
从顶层路径键入
make adb
,瞧。设备使用usb路径进行识别。现在,只需单击一下,您就可以从Eclipse安装和执行所有设备。今天,我找到了解决此问题的简单方法
adb devices -l
您将获得设备列表及其限定符
List of devices attached
P753A12D device usb:26200000 transport_id:1
P753A12D device usb:24400000 transport_id:2
然后您可以使用限定符而不是像这样的序列号
adb -s usb:26200000 install xxx.apk
或者使用传输id
和-t
adb -t 1 install xxx.apk
@mirokropacek给出的答案适用于Linux(可能也适用于Mac),但不幸的是,它不适用于Windows。这是由于在Windows中调用
register\u usb\u transport
函数的方式造成的。事实证明,devpath参数在Windows中总是NULL
。我需要处理相同的情况,因此我采用了上面给出的解决方案,以便在serial
参数为NULL或为空(零长度)时为每个设备随机生成设备ID
我不需要担心在很长一段时间内区分设备和许多设备,因此使用rand
为设备ID生成一个伪随机数,然后使用sprintf
创建该ID的字符串表示形式似乎足以满足我的需要,但是YMMV。它只生成一个4位数的十六进制数,但对我来说已经足够好了(至少现在是这样)。
如果您的设备是根设备
尝试这种方法要更改设备的序列号,请先将其中一个设备连接到电脑,然后在cmd中键入此项
adb devices
这将显示您的设备id(序列号)。选择一些新名称,例如NAME1
然后键入以下命令
adb shell
su
device_name="NEW_NAME"
cd /sys/class/android_usb/android0/
echo -n $device_name > iSerial
cat iSerial
退出
从根目录退出退出
退出shell开始
现在拔下usb电缆并运行以下命令
adb kill-server
再次连接设备并键入
adb devices
现在你可以看到变化了
List of devices attached
New_NAME device
结束注意:如果第一次不起作用
断开手机的连接,然后再次执行我的指南中从开始到结束的这部分操作。如果您不想更改设备本身,和/或没有根访问权限,并且设备具有网络访问权限,可以切换到使用TCPIP而不是USB:
adb TCPIP 5555
adb连接您的主机名
我已经通过SSH隧道运行了它,在那里它将连接到localhost,所以所有设备都显示为“localhost”,这是非常无用的。将主机添加到/etc/hosts(所有主机都指向localhost)修复了这一问题。此外,在处理多个连接实例(设备+仿真器)时,您可以使用以下命令
-d
代表设备,-e
代表emulator当一次只连接一台设备时,其中一台设备是否显示不同的号码?当只连接一台电话时,序列号也是P753A12D,与连接的两台电话号码相同。我检查了实际的设备,这两部手机的序列号相同。谢谢你,谢恩!不客气。你能让它工作吗?如果你对我的回答满意,请“接受”它,否则请让我知道我还能做什么。谢谢指向mailinglistarchive.com的链接已断开。你能更新一下吗?事实证明这似乎不适用于Windows。如果您查看调用register\u usb\u transport的文件usb\u windows.cpp,它似乎总是在devpath设置为NULL的情况下调用。这在我的windows框上似乎不起作用,因为第一个框显示了一个长列表,但第二个框始终显示为“脱机”。我认为,部分问题在于长列表中没有显示usb标识符,而是使用了“device:XXXXX”中的型号,而不是“usb:yyyy”Nowadb
support-t ID使用具有给定传输的设备
List of devices attached
New_NAME device
adb -d shell #(or adb -e shell if you're connecting to an emulator).