Снова головная боль с Android SDK!
Я знаю, как настроить Android SDK. Я делал это несколько раз на протяжении многих лет. И мне приходилось каждый раз патчить драйвер для ADB! Я проделывал это столько раз регулярно, что могу делать это с завязанными глазами!
Почему для Google такая проблема — включить работающий USB-драйвер в Android SDK?
Это файл INF для драйвера USB, предоставленный Google.
;
; Android WinUsb driver installation.
;
[Version]
Signature = "$Windows NT$"
Class = AndroidUsbDeviceClass
ClassGuid = {3F966BD9-FA04-4ec5-991C-D326973B5128}
Provider = %ProviderName%
DriverVer = 08/27/2012,7.0.0000.00001
CatalogFile.NTx86 = androidwinusb86.cat
CatalogFile.NTamd64 = androidwinusba64.cat
[ClassInstall32]
Addreg = AndroidWinUsbClassReg
[AndroidWinUsbClassReg]
HKR,,,0,%ClassName%
HKR,,Icon,,-1
[Manufacturer]
%ProviderName% = Google, NTx86, NTamd64
[Google.NTx86]
;Google Nexus One
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02&MI_01
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E11
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E12&MI_01
;Google Nexus S
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E21
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E22&MI_01
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E23
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E24&MI_01
;Google Nexus 7
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4E40
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E41
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E42
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E42&MI_01
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E44&MI_01
;Google Nexus Q
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_2C10
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_2C11
;Google Nexus (generic)
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4EE0
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE1
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE2
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE2&MI_01
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE3
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE4&MI_01
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE5
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE6&MI_01
[Google.NTamd64]
;Google Nexus One
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02&MI_01
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E11
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E12&MI_01
;Google Nexus S
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E21
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E22&MI_01
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E23
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E24&MI_01
;Google Nexus 7
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4E40
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E41
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E42
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E42&MI_01
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E44&MI_01
;Google Nexus Q
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_2C10
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_2C11
;Google Nexus (generic)
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4EE0
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE1
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE2
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE2&MI_01
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE3
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE4&MI_01
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE5
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE6&MI_01
[USB_Install]
Include = winusb.inf
Needs = WINUSB.NT
[USB_Install.Services]
Include = winusb.inf
AddService = WinUSB,0x00000002,WinUSB_ServiceInstall
[WinUSB_ServiceInstall]
DisplayName = %WinUSB_SvcDesc%
ServiceType = 1
StartType = 3
ErrorControl = 1
ServiceBinary = %12%\WinUSB.sys
[USB_Install.Wdf]
KmdfService = WINUSB, WinUSB_Install
[WinUSB_Install]
KmdfLibraryVersion = 1.9
[USB_Install.HW]
AddReg = Dev_AddReg
[Dev_AddReg]
HKR,,DeviceInterfaceGUIDs,0x10000,"{F72FE0D4-CBCB-407d-8814-9ED673D0DD6B}"
[USB_Install.CoInstallers]
AddReg = CoInstallers_AddReg
CopyFiles = CoInstallers_CopyFiles
[CoInstallers_AddReg]
HKR,,CoInstallers32,0x00010000,"WdfCoInstaller01009.dll,WdfCoInstaller","WinUSBCoInstaller2.dll"
[CoInstallers_CopyFiles]
WinUSBCoInstaller2.dll
WdfCoInstaller01009.dll
[DestinationDirs]
CoInstallers_CopyFiles=11
[SourceDisksNames]
1 = %DISK_NAME%,,,\i386
2 = %DISK_NAME%,,,\amd64
[SourceDisksFiles.x86]
WinUSBCoInstaller2.dll = 1
WdfCoInstaller01009.dll = 1
[SourceDisksFiles.amd64]
WinUSBCoInstaller2.dll = 2
WdfCoInstaller01009.dll = 2
[Strings]
ProviderName = "Google, Inc."
SingleAdbInterface = "Android ADB Interface"
CompositeAdbInterface = "Android Composite ADB Interface"
SingleBootLoaderInterface = "Android Bootloader Interface"
WinUSB_SvcDesc = "Android USB Driver"
DISK_NAME = "Android WinUsb installation disk"
ClassName = "Android Device"
Этот драйвер можно получить через SDK Manager, и вот как я его получил. Он находится в каталоге установки Android\android-sdk\extras\google\usb_driver
.
Почему нет записей для телефонов HTC или Samsung?
Теперь это файл INF для драйвера, который я использовал в прошлом (но для того же телефона).
;
; Android WinUsb driver installation.
;
[Version]
Signature = "$Windows NT$"
Class = AndroidUsbDeviceClass
ClassGuid = {3F966BD9-FA04-4ec5-991C-D326973B5128}
Provider = %ProviderName%
DriverVer = 08/11/2009,2.0.0010.00002
CatalogFile.NTx86 = androidwinusb86.cat
CatalogFile.NTamd64 = androidwinusba64.cat
;
; This section seems to be required for WinUsb driver installation.
; If this section is removed the installer will report an error
; "Required section not found in INF file".
;
[ClassInstall32]
Addreg = AndroidWinUsbClassReg
[AndroidWinUsbClassReg]
HKR,,,0,%ClassName%
HKR,,Icon,,-1
[Manufacturer]
%ProviderName% = Google, NTx86, NTamd64
[Google.NTx86]
; HTC Dream
%SingleAdbInterface% = USB_Install, USB\VID_0BB4&PID_0C01
%CompositeAdbInterface% = USB_Install, USB\VID_0BB4&PID_0C02&MI_01
%SingleBootLoaderInterface% = USB_Install, USB\VID_0BB4&PID_0FFF
; HTC Magic
%CompositeAdbInterface% = USB_Install, USB\VID_0BB4&PID_0C03&MI_01
; HTC Desire
%CompositeAdbInterface% = USB_Install, USB\VID_0bb4&Pid_0c94
;
;Moto Sholes
%SingleAdbInterface% = USB_Install, USB\VID_22B8&PID_41DB
%CompositeAdbInterface% = USB_Install, USB\VID_22B8&PID_41DB&MI_01
;
;Google NexusOne
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02&MI_01
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E11
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E12&MI_01
[Google.NTamd64]
; HTC Dream
%SingleAdbInterface% = USB_Install, USB\VID_0BB4&PID_0C01
%CompositeAdbInterface% = USB_Install, USB\VID_0BB4&PID_0C02&MI_01
%SingleBootLoaderInterface% = USB_Install, USB\VID_0BB4&PID_0FFF
; HTC Magic
%CompositeAdbInterface% = USB_Install, USB\VID_0BB4&PID_0C03&MI_01
; HTC Desire
%CompositeAdbInterface% = USB_Install, USB\VID_0bb4&Pid_0c94
;
;Moto Sholes
%SingleAdbInterface% = USB_Install, USB\VID_22B8&PID_41DB
%CompositeAdbInterface% = USB_Install, USB\VID_22B8&PID_41DB&MI_01
;
;Google NexusOne
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02&MI_01
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E11
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E12&MI_01
[USB_Install]
Include = winusb.inf
Needs = WINUSB.NT
[USB_Install.Services]
Include = winusb.inf
AddService = WinUSB,0x00000002,WinUSB_ServiceInstall
[WinUSB_ServiceInstall]
DisplayName = %WinUSB_SvcDesc%
ServiceType = 1
StartType = 3
ErrorControl = 1
ServiceBinary = %12%\WinUSB.sys
[USB_Install.Wdf]
KmdfService = WINUSB, WinUSB_Install
[WinUSB_Install]
KmdfLibraryVersion = 1.7
[USB_Install.HW]
AddReg = Dev_AddReg
[Dev_AddReg]
HKR,,DeviceInterfaceGUIDs,0x10000,"{F72FE0D4-CBCB-407d-8814-9ED673D0DD6B}"
[USB_Install.CoInstallers]
AddReg = CoInstallers_AddReg
CopyFiles = CoInstallers_CopyFiles
[CoInstallers_AddReg]
HKR,,CoInstallers32,0x00010000,"WdfCoInstaller01007.dll,WdfCoInstaller","WinUSBCoInstaller.dll"
[CoInstallers_CopyFiles]
WinUSBCoInstaller.dll
WdfCoInstaller01007.dll
[DestinationDirs]
CoInstallers_CopyFiles=11
[SourceDisksNames]
1 = %DISK_NAME%,,,\i386
2 = %DISK_NAME%,,,\amd64
[SourceDisksFiles.x86]
WinUSBCoInstaller.dll = 1
WdfCoInstaller01007.dll = 1
[SourceDisksFiles.amd64]
WinUSBCoInstaller.dll = 2
WdfCoInstaller01007.dll = 2
[Strings]
ProviderName = "Google, Inc."
SingleAdbInterface = "Android ADB Interface"
CompositeAdbInterface = "Android Composite ADB Interface"
SingleBootLoaderInterface = "Android Bootloader Interface"
WinUSB_SvcDesc = "Android USB Driver"
DISK_NAME = "Android WinUsb installation disk"
ClassName = "Android Phone"
; HTC Desire
%SingleAdbInterface% = USB_Install, USB\VID_0bb4&Pid_0c94&Rev_0100
%CompositeAdbInterface% = USB_Install, USB\VID_0bb4&Pid_0c94
%SingleBootLoaderInterface% = USB_Install, USB\VID_0BB4&Pid_0c94
Этот драйвер был загружен с форума разработчиков XDA, из этой темы. Я пересматривал эту тему каждый раз, когда мне приходилось устанавливать Android SDK. Трюк, который использует автор, состоит в том, чтобы просто заменить идентификаторы оборудования в файле INF на те, которые фактически соответствуют фактическому подключаемому устройству.
Если не ошибаюсь, у меня был такой же ID, как описывает автор в теме, то есть USB\VID_0bb4&Pid_0c94
. Но теперь, когда я проверяю его, у меня другой.
Недавно прошивал телефон. Но я использовал оригинальный образ RUU, с тем же номером сборки, что и тот, что уже был в телефоне. RUU была оригинальной утилитой обновления ПЗУ HTC, которая использовалась для его прошивки. Мне пришлось сделать это, чтобы разрешить использование Unrevoked для получения root-прав, а затем Alpha Rev для установки S-OFF. Может быть, это каким-то образом изменило идентификатор оборудования? Я думал, что идентификаторы оборудования должны быть постоянными и привязанными к оборудованию?...
Используя второй драйвер с неотредактированным INF-файлом и пытаясь обновить устройство ADB в диспетчере устройств, вот что он говорит.
Его просто не удается установить, потому что идентификаторы не совпадают. Вот строки, которые я использовал в отредактированной версии INF-файла. Теперь они включают фактические идентификаторы моего телефона.
[Google.NTx86]
%CompositeAdbInterface% = USB_Install, USB\VID_0BB4&PID_0C87&MI_01
[Google.NTamd64]
%CompositeAdbInterface% = USB_Install, USB\VID_0BB4&PID_0C87&MI_01
[Strings]
%SingleAdbInterface% = USB_Install, USB\VID_0BB4&PID_0C87&REV_0226
%CompositeAdbInterface% = USB_Install, USB\VID_0BB4&PID_0C87
%SingleBootLoaderInterface% = USB_Install, USB\VID_0BB4&PID_0C87
Итак, теперь, когда я снова пытаюсь обновить драйвер, я получаю предупреждающее сообщение, вы знаете обычное предупреждение Windows об установке программного обеспечения из неизвестного источника.
Поэтому я все равно нажимаю, чтобы установить его.
И он пытается установить его, но затем останавливается и говорит, что установка не удалась и что-то про ADB Composite.
Так почему не получается установить? И почему мой идентификатор оборудования был изменен в первую очередь?
Нет ли "нормального" способа установки этого дурацкого драйвера? Знаешь, без необходимости взломать эту чертову штуку или подшутить над ней?...
Я знаю, что некоторые пользователи предлагают получить последнюю версию программного обеспечения для синхронизации от производителя, потому что вместе с ним поставляются некоторые USB-драйверы, которые необходимо иметь. Но мне не нужны никакие вирусы HTC. И у меня нет проблем с передачей файлов между телефоном и компьютером в режиме "Диск". Так что мне больше ничего не нужно. И разве это не драйвер для использования ADB (Android Debug Bridge), который является частью Android SDK? Я имею в виду, что тогда Google не должен предоставлять рабочий драйвер?...
Для протокола: речь идет о HTC Desire, оригинальном телефоне. Вы знаете, первый, а не любой из его многочисленных братьев и сестер, которые последовали за ним.
Пожалуйста, взгляните на это и дайте мне знать, что вы думаете, что это может быть. А также дайте мне знать, если вы знаете какие-либо альтернативные способы сделать это, только для будущего использования. Мне надоело делать это каждый раз, когда я хочу установить Android SDK. Обычно я делаю это только тогда, когда мне нужно переустановить Windows, но после установки и настройки я обычно не трогаю его, но я переустанавливаю Windows по крайней мере два раза в год.
Мне пришлось изменить последнюю часть файла INF.
[Strings]
%SingleAdbInterface% = USB_Install, USB\VID_0BB4&PID_0C87&REV_0226&MI_01
%CompositeAdbInterface% = USB_Install, USB\VID_0BB4&PID_0C87&MI_01
%SingleBootLoaderInterface% = USB_Install, USB\VID_0BB4&PID_0C87&MI_01
Он работал отлично после этого изменения.
Натан Адамс
Самир
NoBugs