Android adb在连接到两个智能手机时获得了两个相同的序列号

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

我有两部智能手机(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 push XXX /sdcard
现在这两部手机有相同的序列号(
P753A12D
),当我运行这些命令时,会出现以下错误:

error:more than one device
因此,我的问题是:

  • 两部手机有相同的序列号,这正常吗
  • 我可以更改序列号吗?如果是,如何进行
  • 即使序列号相同,是否有办法成功运行这些安装、推送命令
  • 顺便说一句,当我运行测试时,WiFi/3G网络将关闭。

    1。两部手机有相同的序列号,这正常吗? 序列号的目的是唯一标识设备,因此它们应该不同。尽管如此,一些制造商并不费心。也可能是固件报告的数字不正确

    您可以检查实际设备上的序列号,看看它是否与
    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:
    adb TCPIP 5555
  • 让adb使用网络连接到设备:
    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”Now
    adb
    support
    -t ID使用具有给定传输的设备
    
    List of devices attached
    New_NAME    device
    
    adb -d shell #(or adb -e shell if you're connecting to an emulator).