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
Итак, мои вопросы:
- Это нормально, что у двух телефонов одинаковый серийный номер нет?
- Могу ли я изменить серийный номер? если да, то как?
- Есть ли способ успешно запустить эти команды установки, push, даже если серийный номер не совпадает?
Кстати, при запуске теста сеть WiFi/3G будет отключена.
Ответы
Ответ 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
обозначает эмулятор.