20

我有两部智能手机(ZTEV788d,系统Android 2.3.6)同时连接到计算机(Ubuntu 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. 即使序列号相同,是否有任何方法可以成功运行这些安装、推送命令?

顺便说一句,当我运行测试时,WiFi/3G 网络将被关闭。

4

7 回答 7

25

今天我为这个问题找到了一个简单的解决方案。

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

或与transport_id-t

adb -t 1 install xxx.apk
于 2015-04-30T11:37:10.603 回答
8

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

adb devices

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

List of devices attached
P753A12D    device

选择一些新名称,例如NAME1
然后键入此命令

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

exit从 root
exit退出 从 shell 退出



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

adb kill-server

再次连接您的设备并输入

adb devices

现在你可以看到变化

List of devices attached
New_NAME    device

结束

注意:如果第一次没有工作,请断开您的手机并再次从开始结束
执行我的指南的这一部分。

于 2016-01-15T14:14:57.470 回答
6

我遇到了同样的问题。这是因为 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 中的所有设备。

于 2014-04-02T22:24:19.613 回答
5

1. 两部手机序列号相同是否正常?

序列号的目的是唯一标识设备,所以它们应该是不同的。话虽如此,一些制造商并不打扰。固件也可能错误地报告了数字。

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 - 更改任何 mtk android 手机的 Wifi、BT、IMEI、序列号

hugestreet.info - 如何更改 IMEI、任何 Android 设备的设备 ID


3. 有没有什么方法可以运行这些安装、推送命令,即使序列号相同?

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

于 2012-12-21T22:23:33.487 回答
1

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

我不需要担心长时间区分设备和许多设备,因此为设备 ID 生成一个伪随机数rand,然后使用sprintf创建该 ID 的字符串表示似乎足以满足我的需要,但 YMMV . 它只生成一个 4 位十六进制数字,但对我来说效果很好(至少现在是这样)。

于 2015-08-06T01:10:18.173 回答
0

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

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

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

于 2017-02-21T15:26:57.237 回答
0

此外,您可以在处理附加的多个实例时使用以下命令(设备 + 模拟器)

adb -d shell #(or adb -e shell if you're connecting to an emulator).

-d代表设备和-e代表模拟器

于 2019-08-27T06:03:12.750 回答