Подтвердить что ты не робот

Adb получил два одинаковых серийных номера при подключении к двум смартфонам

У меня есть два смартфона (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. Есть ли способ успешно запустить эти команды установки, push, даже если серийный номер не совпадает?

Кстати, при запуске теста сеть WiFi/3G будет отключена.

4b9b3361

Ответ 1

Сегодня я нашел простое решение этой проблемы.

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

Ответ 2

Я столкнулся с той же проблемой. Это связано с тем, что инструмент 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 одним щелчком мыши.

Ответ 3

если ваше устройство укоренено попробуйте этот способ, чтобы изменить серийный номер ваших устройств, сначала подключите один из них к вашему компьютеру, затем введите это в cmd

adb devices

это показывает идентификатор вашего устройства (серийный номер).

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 выход из корня
exit выход из оболочки


START
теперь отключите кабель USB и запустите эти команды

adb kill-server

снова подключите ваше устройство и введите

adb devices

теперь вы можете видеть изменения

List of devices attached
New_NAME    device

END

Примечание: если он не работал в первый раз
отключите телефон и повторите эту часть моего руководства с СТАРТ до END.

Ответ 4

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 - измените Wifi, BT, IMEI, серийный номер любого телефона android mtk

hugestreet.info - Как изменить IMEI, Идентификатор устройства любого устройства Android


3. Есть ли способ запустить эту установку, удалять команды успешно, даже если серийные номера одинаковы?

Не должно быть никаких проблем с запущенными командами, если одновременно подключено только одно устройство.

Ответ 5

Ответ, данный @mirokropacek, работает для Linux (и предположительно Mac тоже), но, к сожалению, не работает для Windows. Это связано с тем, как в Windows вызывается функция register_usb_transport. Оказывается, параметр devpath всегда NULL в Windows. Мне нужно было обрабатывать ту же ситуацию, поэтому я адаптировал приведенное выше решение для случайного генерирования идентификатора устройства для каждого устройства, если параметр serial имеет значение NULL или пусто (нулевая длина).

Мне не нужно беспокоиться о разграничении устройств в течение длительных периодов времени и многих устройствах, создавая псевдослучайное число для идентификатора устройства с помощью rand, а затем используя sprintf для создания строкового представления этого идентификатора кажется достаточным для моих потребностей, но YMMV. Он генерирует только 4-значный шестнадцатеричный номер, но он работает достаточно хорошо для меня (на данный момент, по крайней мере).

Ответ 6

Если вы не хотите изменять само устройство и/или не имеете права доступа root, и у устройства есть доступ к сети, вы можете переключиться на использование TCPIP вместо USB:

  • Переключить adb на использование TCPIP: adb tcpip 5555
  • Попросите adb подключиться к устройству с помощью сети: adb connect yourhostname

Я запускаю это через туннели SSH, где он будет подключаться к локальному хосту, поэтому все устройства отображаются как "localhost", что совершенно не полезно. Добавление хостов в /etc/hosts (все, что указано на localhost) исправлено для меня.

Ответ 7

Теперь новый adb поддерживает транспортный идентификатор, кроме серийного номера:

-s SERIAL  use device with given serial (overrides $ANDROID_SERIAL)
-t ID      use device with given transport id

Сначала запустите

adb devices -l

Вы увидите, как показано ниже:

List of devicos attached
0123456789ABCDEF device usb:123456789X product:Foo V1 model:Foo_ AB device:Bar AB transport_id:2 
0123456789ABCDEF device usb:987654321X product:Foo V1 model:Foo_ AB device:Bar AB transport_id:1

Теперь вы можете указать устройство с помощью

adb -t 1 install XXX.apk

Ответ 8

Кроме того, вы можете использовать приведенные ниже команды для обработки нескольких подключенных экземпляров (устройство + эмулятор)

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

-d обозначает устройство, а -e обозначает эмулятор.