Diferencia entre revisiones de «Usuario:Juanda/android/adb»
De WikiEducator
(→Error no permissions) |
(→2º método: desde el PC) |
||
(32 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 6: | Línea 6: | ||
</div> | </div> | ||
<div class="slide"> | <div class="slide"> | ||
− | === ¿Qué es ADB? === | + | ==== ¿Qué es ADB? ==== |
*[[wikipedia:Android_Debug_Bridge|ADB]] son las siglas de Android Debug Bridge | *[[wikipedia:Android_Debug_Bridge|ADB]] son las siglas de Android Debug Bridge | ||
*Es una herramienta de desarrollo [http://developer.android.com/tools/help/adb.html incluida en el SDK de Android]. | *Es una herramienta de desarrollo [http://developer.android.com/tools/help/adb.html incluida en el SDK de Android]. | ||
Línea 13: | Línea 13: | ||
</div> | </div> | ||
<div class="slide"> | <div class="slide"> | ||
− | ===Cómo usar ADB=== | + | ====Cómo usar ADB==== |
*Debemos instalar el SDK de Android o el [http://developer.android.com/sdk/index.html ADT-Bundle] | *Debemos instalar el SDK de Android o el [http://developer.android.com/sdk/index.html ADT-Bundle] | ||
*Está situado en el directorio platform-tools. | *Está situado en el directorio platform-tools. | ||
Línea 25: | Línea 25: | ||
</div> | </div> | ||
<div class="slide"> | <div class="slide"> | ||
− | + | ==Configuración previa para usar adb== | |
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
====Windows==== | ====Windows==== | ||
*Tendremos que descargar el driver adb para el dispositivo. | *Tendremos que descargar el driver adb para el dispositivo. | ||
− | + | *En la web de Android hay un [http://developer.android.com/tools/extras/oem-usb.html listado de enlaces] para la descarga de los drivers de los principales fabricantes. | |
− | *En la web de Android hay un [http://developer.android.com/tools/extras/oem-usb.html listado de enlaces] para la descarga de los drivers de los principales fabricantes. | + | *Puedes encontrar un driver genérico que se encuentra en la carpeta android-sdk-windows\usb_driver del SDK Android. |
− | * | + | *Lo más probable es que tengas que utilizar el driver del fabricante. |
*A veces también hace falta otro ejecutable adb distinto al que aparece en el Android SDK. | *A veces también hace falta otro ejecutable adb distinto al que aparece en el Android SDK. | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | *Para los que no aparecen habrá que ir a sus webs o contactar con su servicio de soporte. | ||
*No siempre existen los drivers o funcionan como debieran ¡ojo! | *No siempre existen los drivers o funcionan como debieran ¡ojo! | ||
+ | *En ocasiones para que funcione se utiliza el driver de google pero modificando el fichero de instalación del driver: adb_usb.ini | ||
</div> | </div> | ||
+ | |||
<div class="slide"> | <div class="slide"> | ||
+ | |||
====Mac==== | ====Mac==== | ||
− | *No hace falta hacer nada. Filosofia MAC: O funciona directamente o no funciona. | + | *No hace falta hacer nada. |
+ | *Filosofia MAC: O funciona directamente o no funciona. | ||
</div> | </div> | ||
<div class="slide"> | <div class="slide"> | ||
=====Ubuntu===== | =====Ubuntu===== | ||
+ | *Es conveniente leer la documentación sobre [https://www.kernel.org/pub/linux/utils/kernel/hotplug/udev/udev.html udev] (gestión dinámica de dispositivos en Linux) | ||
*Tendremos que añadir el fichero 51-android.rules con los permisos y texto que figura a continuación: | *Tendremos que añadir el fichero 51-android.rules con los permisos y texto que figura a continuación: | ||
<source lang="bash"> | <source lang="bash"> | ||
Línea 66: | Línea 77: | ||
*De las trazas observamos que el dispositivo se conecta como bus:3, device: 6 | *De las trazas observamos que el dispositivo se conecta como bus:3, device: 6 | ||
</div> | </div> | ||
+ | |||
<div class="slide"> | <div class="slide"> | ||
*Ejecutamos lsusb para ver el vendor id del dispositivo, en nuestro caso 2207:0010: | *Ejecutamos lsusb para ver el vendor id del dispositivo, en nuestro caso 2207:0010: | ||
Línea 84: | Línea 96: | ||
</source> | </source> | ||
</div> | </div> | ||
+ | |||
<div class="slide"> | <div class="slide"> | ||
*Actualizamos el fichero anterior: | *Actualizamos el fichero anterior: | ||
Línea 90: | Línea 103: | ||
SUBSYSTEM=="usb", ATTR{id_vendor}=="2207", MODE="0666", GROUP="plugdev" | SUBSYSTEM=="usb", ATTR{id_vendor}=="2207", MODE="0666", GROUP="plugdev" | ||
</source> | </source> | ||
− | |||
*Reiniciamos el servicio de udev: | *Reiniciamos el servicio de udev: | ||
<source lang="bash"> | <source lang="bash"> | ||
Línea 99: | Línea 111: | ||
</source> | </source> | ||
</div> | </div> | ||
+ | |||
<div class="slide"> | <div class="slide"> | ||
*Paramos y arrancamos adb (android device bridge) y comprobamos la lista de dispositivos: | *Paramos y arrancamos adb (android device bridge) y comprobamos la lista de dispositivos: | ||
Línea 111: | Línea 124: | ||
</source> | </source> | ||
</div> | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | |||
+ | ====Configuración del dispositivo==== | ||
+ | [[Archivo:Android_phone_settings.png|600px|thumb|center|(Configuración de dispositivo físico Android para despliegue de aplicaciones de desarrollo)]] | ||
+ | *En Android 4 la habilitación del USB Debug está en Ajustes > Opciones de Desarrollo. | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | *'''Nota:''' A partir de '''Android 4.2''', las opciones de desarrollo no están visibles por defecto: ''"To make it available, go to Settings > About phone and tap Build number seven times. Return to the previous screen to find Developer options."'' | ||
+ | </div> | ||
+ | |||
+ | |||
+ | <div class="slide"> | ||
+ | == Usos más frecuents de adb == | ||
+ | </div> | ||
+ | |||
<div class="slide"> | <div class="slide"> | ||
− | === | + | ====adb help==== |
− | <code>adb</code> provee numerosas funciones que se pueden ver en detalle mediante el comando: | + | *<code>adb</code> provee numerosas funciones que se pueden ver en detalle mediante el comando: |
<source lang="bash">adb help</source> | <source lang="bash">adb help</source> | ||
+ | *Veremos a continuación las más importantes | ||
</div> | </div> | ||
+ | |||
<div class="slide"> | <div class="slide"> | ||
====Comprobación comunicación==== | ====Comprobación comunicación==== | ||
Línea 124: | Línea 155: | ||
List of devices attached | List of devices attached | ||
01a927828f90ccde device | 01a927828f90ccde device | ||
− | |||
juanda@juanda-PC:~$ | juanda@juanda-PC:~$ | ||
</source> | </source> | ||
</div> | </div> | ||
+ | |||
<div class="slide"> | <div class="slide"> | ||
====Comunicación vía shell==== | ====Comunicación vía shell==== | ||
Línea 138: | Línea 169: | ||
</source> | </source> | ||
</div> | </div> | ||
+ | |||
<div class="slide"> | <div class="slide"> | ||
====Transferencia de ficheros==== | ====Transferencia de ficheros==== | ||
Línea 146: | Línea 178: | ||
:Copiamos un fichero remoto (del movil) al PC. | :Copiamos un fichero remoto (del movil) al PC. | ||
</div> | </div> | ||
+ | |||
<div class="slide"> | <div class="slide"> | ||
====Ver el fichero de log en tiempo real==== | ====Ver el fichero de log en tiempo real==== | ||
Línea 152: | Línea 185: | ||
* Es útil usar algún filtro o redirigir a un fichero. | * Es útil usar algún filtro o redirigir a un fichero. | ||
</div> | </div> | ||
+ | |||
<div class="slide"> | <div class="slide"> | ||
====Instalación de aplicaciones==== | ====Instalación de aplicaciones==== | ||
Línea 160: | Línea 194: | ||
*adb uninstall Aplicacion.apk: Para desinstalar | *adb uninstall Aplicacion.apk: Para desinstalar | ||
</div> | </div> | ||
+ | |||
<div class="slide"> | <div class="slide"> | ||
====Reiniciar el dispositivo==== | ====Reiniciar el dispositivo==== | ||
Línea 166: | Línea 201: | ||
*<code>adb reboot recovery</code> | *<code>adb reboot recovery</code> | ||
</div> | </div> | ||
+ | |||
<div class="slide"> | <div class="slide"> | ||
==== Error "Device not found" ==== | ==== Error "Device not found" ==== | ||
*Se producen cuando adb no encuentra el dispositivo. | *Se producen cuando adb no encuentra el dispositivo. | ||
*Podemos reiniciar el servicio de adb: | *Podemos reiniciar el servicio de adb: | ||
− | < | + | <source lang="bash">adb kill-server |
− | + | adb start-server</source> | |
*Hay que asegurarse que la opción '''USB debugging''' o '''Android Debug Bridge''' desde Ajustes->Herramientas de Desarrollo (varía un poco de versión a versión). | *Hay que asegurarse que la opción '''USB debugging''' o '''Android Debug Bridge''' desde Ajustes->Herramientas de Desarrollo (varía un poco de versión a versión). | ||
− | + | </div> | |
− | + | ||
− | ==== | + | <div class="slide"> |
+ | ====Errores habituales==== | ||
*No se reconoce el dispositivo: | *No se reconoce el dispositivo: | ||
<source lang="bash"> | <source lang="bash"> | ||
Línea 182: | Línea 218: | ||
List of devices attached | List of devices attached | ||
?????????? device | ?????????? device | ||
− | |||
− | |||
</source> | </source> | ||
− | + | *False de permisos: | |
− | + | ||
− | + | ||
− | + | ||
<source lang="bash"> | <source lang="bash"> | ||
juanda@juanda-PC:~$ adb devices | juanda@juanda-PC:~$ adb devices | ||
Línea 195: | Línea 226: | ||
juanda@juanda-PC:~$ | juanda@juanda-PC:~$ | ||
</source> | </source> | ||
+ | </div> | ||
+ | <div class="slide"> | ||
*Driver incorrecto | *Driver incorrecto | ||
− | *Configuración fichero udev | + | *Configuración errónea fichero udev |
+ | *Reiniciar udev: | ||
+ | <source lang="bash"> | ||
+ | juanda@juanda-PC:/etc/udev/rules.d$ sudo service udev restart | ||
+ | udev stop/waiting | ||
+ | udev start/running, process 9069 | ||
+ | juanda@juanda-PC:/etc/udev/rules.d$ | ||
+ | </source> | ||
*Reiniciar servicio adb: | *Reiniciar servicio adb: | ||
<source lang="bash"> | <source lang="bash"> | ||
Línea 202: | Línea 242: | ||
adb start-server | adb start-server | ||
</source> | </source> | ||
− | + | </div> | |
− | + | ||
− | + | ||
<div class="slide"> | <div class="slide"> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | ====Error en funcionamiento de dispositivos físicos y emuladores==== | |
− | = | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | ===Error en funcionamiento de dispositivos físicos y emuladores=== | + | |
*El error es el siguiente: | *El error es el siguiente: | ||
:[2013-02-22 13:55:20 - adb] Unexpected exception 'Cannot run program "/home/juanda/Android/sdk/platform-tools/adb": java.io.IOException: error=2, No existe el archivo o el directorio' while attempting to get adb version from '/home/juanda/Android/sdk/platform-tools/adb' | :[2013-02-22 13:55:20 - adb] Unexpected exception 'Cannot run program "/home/juanda/Android/sdk/platform-tools/adb": java.io.IOException: error=2, No existe el archivo o el directorio' while attempting to get adb version from '/home/juanda/Android/sdk/platform-tools/adb' | ||
Línea 233: | Línea 254: | ||
</source> | </source> | ||
</div> | </div> | ||
− | + | <div class="slide"> | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | = | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
==adb vía wifi== | ==adb vía wifi== | ||
− | + | </div> | |
+ | <div class="slide"> | ||
+ | ====Primer método: desde el terminal==== | ||
+ | *Habilitar adb desde el dispositivo movil (debemos ser root): | ||
+ | <source lang="bash"> | ||
+ | setprop service.adb.tcp.port 5555 | ||
+ | stop adbd | ||
+ | start adbd | ||
+ | </source> | ||
− | + | *Para deshabilitarlo: | |
+ | <source lang="bash"> | ||
+ | setprop service.adb.tcp.port -1 | ||
+ | stop adbd | ||
+ | start adbd | ||
+ | </source> | ||
+ | </div> | ||
− | + | <div class="slide"> | |
− | + | ====2º método: desde el PC==== | |
− | + | *Desde un equipo, '''con acceso USB''' | |
− | + | <source lang="bash"> | |
− | == | + | adb tcpip 5555 |
− | + | adb connect <ip>:5555 | |
− | + | </source> | |
− | ===Actualización fichero /etc/hosts=== | + | *El puerto no hace falta, por defecto es el 5555 |
− | * | + | *Para volver a escuchar por USB: |
− | *Obtenemos el fichero hosts del movil: | + | <source lang="bash"> |
+ | adb usb | ||
+ | </source> | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | *Primer método: hay que teclear mucho desde el movil, ¡muy pesado! | ||
+ | *Segundo método: hace falta llevar el cable usb, ¡una lata! | ||
+ | *Tercer método: Instalar una aplicación en el móvil: adbWireless, WiFi ADB o ADB WiFi. ¡Necesitan acceso root! | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | ==Eclipse y adb== | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | *Si adb no está correctamente configurado desde Eclipse no funcionará. | ||
+ | *Indicar que queremos desplegarlo en el dispositivo al ejecutar la aplicación | ||
+ | *Cuando ejecutemos la aplicación veremos una pantalla similar a la siguiente: | ||
+ | :Eclipse->Windows->Open Perspective->DDMS | ||
+ | *Aparecerán los emuladores que tengamos corriendo y los dispositivos físicos que estén enchufados a la entrada USB del PC | ||
+ | *En caso de tener un solo dispositivo disponible esta pantalla no aparecerá. | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | ==Ejemplos uso terminal Linux en en Android== | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | ====Actualización fichero /etc/hosts==== | ||
+ | *El comando para ver las interfaces del movil es netcfg (no ifconfig) | ||
+ | *El fichero hosts se encuentra en /system/etc/hosts | ||
+ | *Obtenemos el fichero hosts del movil para modificarlo: | ||
<source lang="bash"> | <source lang="bash"> | ||
juanda@dpto-01:~/Android/sdk/tools$ adb pull /etc/hosts | juanda@dpto-01:~/Android/sdk/tools$ adb pull /etc/hosts | ||
Línea 271: | Línea 318: | ||
127.0.0.1 localhost | 127.0.0.1 localhost | ||
</source> | </source> | ||
− | + | </div> | |
+ | |||
+ | <div class="slide"> | ||
+ | *Añado una o varias entradas en el fichero pero hay un error al hacer el push: | ||
<source lang="bash"> | <source lang="bash"> | ||
juanda@dpto-01:~/Android/sdk/tools$ vi hosts | juanda@dpto-01:~/Android/sdk/tools$ vi hosts | ||
Línea 282: | Línea 332: | ||
juanda@dpto-01:~/Android/sdk/tools$ | juanda@dpto-01:~/Android/sdk/tools$ | ||
</source> | </source> | ||
+ | </div> | ||
+ | <div class="slide"> | ||
*En muchos dispositivos la partición /system se monta como solo lectura así que hay que montarla con permisos de escritura. | *En muchos dispositivos la partición /system se monta como solo lectura así que hay que montarla con permisos de escritura. | ||
*A continuación todas las trazas al cambiarlo en mi sistema: | *A continuación todas las trazas al cambiarlo en mi sistema: | ||
Línea 291: | Línea 343: | ||
shell@android:/ # exit | shell@android:/ # exit | ||
shell@android:/ $ exit | shell@android:/ $ exit | ||
+ | juanda@dpto-01:~/ | ||
+ | </source> | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | *La partición ya tiene permisos de lectura, hacemos el push: | ||
+ | <source lang="bash"> | ||
juanda@dpto-01:~/Android/sdk/tools$ adb push hosts /etc/hosts | juanda@dpto-01:~/Android/sdk/tools$ adb push hosts /etc/hosts | ||
failed to copy 'hosts' to '/etc/hosts': Permission denied | failed to copy 'hosts' to '/etc/hosts': Permission denied | ||
+ | juanda@dpto-01:~/ | ||
+ | </source> | ||
+ | *¡Vaya! Ahora fallan los permisos.... | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | *Cambiamos permisos fichero /etc/hosts para su sustitución: | ||
+ | <source lang="bash"> | ||
juanda@dpto-01:~/Android/sdk/tools$ adb shell | juanda@dpto-01:~/Android/sdk/tools$ adb shell | ||
shell@android:/ $ cd etc | shell@android:/ $ cd etc | ||
Línea 301: | Línea 368: | ||
juanda@dpto-01:~/Android/sdk/tools$ adb push hosts /etc/hosts | juanda@dpto-01:~/Android/sdk/tools$ adb push hosts /etc/hosts | ||
2 KB/s (103 bytes in 0.040s) | 2 KB/s (103 bytes in 0.040s) | ||
+ | juanda@dpto-01:~/Android/sdk/tools$ | ||
+ | </source> | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | *Comprobamos que todo ha ido bien y ponemos todo como estaba: | ||
+ | <source lang="bash"> | ||
juanda@dpto-01:~/Android/sdk/tools$ adb shell | juanda@dpto-01:~/Android/sdk/tools$ adb shell | ||
shell@android:/ $ su - | shell@android:/ $ su - | ||
Línea 314: | Línea 388: | ||
shell@android:/etc # | shell@android:/etc # | ||
</source> | </source> | ||
+ | </div> |
Última revisión de 11:10 15 may 2013