¡Dolores de cabeza con el SDK de Android otra vez!
Sé cómo configurar el SDK de Android. He hecho esto múltiples veces a lo largo de los años. ¡Y he tenido que hacer algún Parcheando del driver para el ADB cada vez! ¡Lo he hecho tantas veces de forma rutinaria, que puedo hacerlo con los ojos vendados!
¿Por qué es un problema para Google incluir un controlador USB que funcione con el SDK de Android?
Este es el archivo INF para el controlador USB proporcionado por 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"
Este controlador se puede obtener a través del SDK Manager y así es como lo conseguí. Se encuentra en el directorio de instalación Android\android-sdk\extras\google\usb_driver
.
¿Por qué no hay entradas para teléfonos HTC o Samsung?
Ahora este es el archivo INF del driver que usé en el pasado (pero para el mismo teléfono).
;
; 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
Este controlador fue descargado del foro XDA Developers, de este hilo. He revisado este hilo cada vez que he tenido que instalar el SDK de Android. El truco que utiliza el autor es simplemente reemplazar los IDs de hardware en el archivo INF por los que realmente corresponden al dispositivo de hardware real que se está conectando.
Si no me equivoco tenía el mismo DNI que el autor describe en el hilo, es decir USB\VID_0bb4&Pid_0c94
. Pero ahora cuando lo compruebo tengo otro diferente.
Recientemente he flasheado el teléfono. Pero utilicé la imagen original RUU, con el mismo número de compilación que la que ya estaba en el teléfono. El RUU era la Utilidad de Actualización de la ROM original de HTC que se utilizó para flashearlo. Tuve que hacerlo para habilitar el uso de Unrevoked to Root y luego Alpha Rev para poner S-OFF. ¿Podría ser que, de alguna manera, esto cambió el ID de hardware? Pensaba que los ID de hardware se suponía que eran permanentes y estaban fijados al hardware...
Usando el segundo driver, con el archivo INF sin editar, e intentando actualizar el dispositivo ADB en el Administrador de Dispositivos, esto es lo que dice.
Simplemente falla al instalarlo, porque los IDs no coinciden. Ahora, estas son las líneas que he utilizado en la versión editada del archivo INF. Ahora incluyen los IDs reales de mi teléfono.
[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
Así que ahora cuando intento actualizar el controlador de nuevo me sale el mensaje de advertencia, ya sabes la advertencia habitual de Windows sobre la instalación de software de origen desconocido.
Así que hago clic para instalarlo de todos modos.
Y trata de instalarlo pero luego se detiene y dice que la instalación falló y algo sobre ADB Composite.
Entonces, ¿por qué no se instala? ¿Y por qué se cambió mi ID de hardware en primer lugar?
¿No hay una forma "normal" de instalar este estúpido controlador? Ya sabes, sin tener que hackear la maldita cosa o jugar con ella...
Sé que algunos usuarios sugieren que uno debe obtener el último software de sincronización del fabricante porque con eso también vienen algunos controladores USB que es necesario tener. Pero yo no quiero ningún bloatware de HTC. Y no tengo ningún problema para transferir archivos entre el teléfono y el ordenador cuando está en modo "Unidad de disco". Así que no necesito nada más. ¿Y no es este el driver para usar el ADB (Android Debug Bridge) que es parte del SDK de Android? Quiero decir que no debería ser Google el que proporcionara un driver que funcionara entonces...
Para que conste, el teléfono en cuestión es el HTC Desire, el original. Ya sabes, el primero, no cualquiera de sus muchos hermanos que siguieron.
Por favor, echa un vistazo a esto, y hazme saber qué crees que puede ser. Y también hágame saber si conoce alguna forma alternativa de hacer esto, sólo para uso futuro. Estoy harto de tener que hacer esto cada vez que quiero instalar el SDK de Android. Normalmente sólo lo hago cuando necesito reinstalar Windows, pero una vez instalado y configurado no suelo tocarlo, pero sí reinstalar Windows al menos dos veces al año.