jueves, 3 de diciembre de 2009

Conexión Ad-hoc en Android, ¿posible?

¡Claro que es posible! ¿Es sencillo y funcional? Mmmh... No estaría tan seguro de esto último. En mi casa tengo internet con Telcel, por lo que sólo tengo internet en una máquina vía módem usb (tipo memoria flash, pero un poco más 'robusta') pero tengo una tarjeta inalámbrica en mi PC, por lo que quería que mi teléfono con android se conectara de forma ad-hoc a esa tarjeta inalámbrica y compartirle el internet. Lo anterior es posible según lo explico a continuación.

Requisitos:
  • Si alguien no lo sabía es necesario tener acceso "Root" al teléfono, la forma en que yo 'rootee' mi teléfono está claramente ilustrada en está página (en inglés, pero con video sumamente ilustrativo): theunlockr.com. Por cierto, como se aclara en la página sólo sirve para el G1 y MyTouch (Dream y Magic). Hay otras formas de rootear descritas en muchos lados, por ejemplo en forums.xda-developers.com.
  • Una tarjeta Wifi.
  • Internet para compartir.
  • La forma más fácil es usar el ADB (Android Debug Bridge) proporcionado oficialmente y gratis por Google. Hay un tutorial de cómo descargarlo e instalarlo (y usar lo básico, que es lo que yo sé) en elandroidelibre.com.
  • Archivos tiwlan.ini y wpa_supplicant.conf modificados.
  • Windows XP. Lo hice en XP porque es lo que tengo, pero la base puede servir en otros SOs.
Una vez dicho lo anterior comenzamos:

Conectamos nuestro celular vía USB (con los drivers y ADB instalados según se explica en elandroidelibre.com)

Abrimos la consola: Botón de windows + R, para abrir "Ejecutar" y tecleamos "cmd" (sin comillas) luego la tecla Enter.

En la consola nos movemos a la carpeta donde tenemos nuestros archivos twilan.ini y wpa_supplicant.conf modificados. (En mi caso C:\HTC). En la consola usad "dir" para ver las carpetas del directorio actual, "cd .." para subir un nivel y "cd NAME" para ir a una carpeta que esté dentro del directorio donde nos encontramos, donde NAME es el nombre de la carpeta.
adb shell
Para "meternos" a nuestro cel, vemos que la primera parte de la línea cambia a "#", ya estamos en el cel y con acceso root, luego:
mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
Con esto hacemos "escribible" un parte de Android. Luego:
exit
Salimos de android y volvemos a la consola, ahora hay que enviar a android nuestros 2 archivos, para esto tecleamos:
adb push tiwlan.ini /system/etc/wifi/tiwlan.ini
Enviamos tiwlan.ini desde nuestra ubicación actual a la ubicación específicada. Luego:
adb push wpa_supplicant.conf /daa/misc/wifi/wpa_supplicant.conf
Enviamos wpa_supplicant.conf, y ahora nos metemos a android para hacer "sólo lectura" lo que habíamos hecho "escribible", para esto tecleamos:
adb shell
mount -o ro,remount -t yaffs2 /dev/block/mtdblock3 /system
Nótese que aunque es muy similar a una instrucción anterior es diferente en la parte de "-o ro", en lugar de "-o rw". Bueno, finalmente:
exit
Ahora, cerramos el adb para poder retirar con seguirdad nuestro android, para esto:
adb kill-server
Listo.
Una aclaración: en los archivos tiwlan.ini y wpa_supplicant.conf yo especifiqué el nombre de la conexión ad-hoc como "Droid" por lo que al crear una conexión ad-hoc en la laptop o en la PC se debe usar este nombre (respetando la mayúscula) si quieren cambiar el nombre es tan sencillo como modificar los archivos y cambiar cualquier referencia a "Droid" por el nombre que os plazca. Debe ser una vez en cada archivo.
¿Complicaciones? Sí, las siguientes:
  • Una vez modificados los archivos y realizada la conexión en la Laptop/PC vemos que android no se puede conectar a la red aunque el nombre de la misma aparece en su listado, lo que se hace aquí es desconectarse de la red desde la Laptop/PC, apagar y prender la Wifi en Android y luego conectarse desde la Laptop/PC a la red. Deberá estar funcionando así. No es tan sencillo como desde una laptop, por ejemplo, escanear las redes y seleccionar la conexión ad-hoc al alcance para conectarse. Hasta ahora.
  • Otra cosa, la pila por alguna razón se acaba en pocas horas (3?) conectados en forma ad-hoc, sólo úsese en emergencias.
  • Finalmente (creo) si se reinicia el celular la función de wifi queda "inservible" por decirlo de algún modo, yo supongo que el archivo wpa_supplicant.conf se modifica con la reiniciada, por lo que de nuevo hay que enviar este archivo (el otro no es necesario) al celular. Debe haber forma de evitar esto, pero no la conozco hasta ahora, ¿alguna idea?
Desde luego cabe la advertencia de intentarlo bajo su propio riesgo, yo en las primeras pruebas me asustaba cuando la Wifi dejaba de funcionar y restauraba la ROM a mi celular, pero luego aprendí que sólo bastaba modificar el archivo wpa_supplicant.conf y el tiwlan.ini.
En las ROMS que usamos para nuestros Androides se encuentran estos dos últimos archivos en su forma "original" por si queremos regresar a nuestro estado inicial no hace falta más que ponerlos en la carpeta donde tenemos los modificados y realizar los pasos descritos aquí para enviarlos al celular.
No abordé temas que se pueden buscar fácilmente en google como el crear una red inalámbrica ad-hoc, usar la consola, usar ADB, etc. Sin embargo, con gusto trato de ayudar en cualquier pregunta que pudiera surgir.
Finalmente la parte de los créditos. No inventé esto yo de mí mismo, más bien es una traducción y "facilitación" a lo leído en los siguientes enlaces:
Modmygphone.com
blog.joint.net
hydtechblog.com
¡Gracias a ellos!

Actualización (Enero 2011):  Cuando escribí esta entrada las formas de rootear el teléfono eran realmente difíciles, al día de hoy que estoy usando mi segundo Android las cosas para rootear el teléfono se han simplificado a simplemente descargar una aplicación del propio Android Market y ejecutarla luego.  


Por otra parte, hay opciones mucho más 'elegantes' para compartir Internet desde nuestro Android (actualmente uso "Barnacle Wifi Tether" en mi Xperia Mini X10 Pro y va de perlas); sin embargo, en esta entrada mi intención era que nuestro Android se conectara a  la Tarjeta Inalámbrica de una laptop (que tuviera internet por cable) o a una tarjeta inalámbrica de una PC (que tuviera también internet por cable o, en mi caso, por un módem de telcel) y no a un AP (Access Point) que es como comúnmente nos conectamos en nuestros Androides.  

11 comentarios:

pedro dijo...

Muchas gracias! Es llamativo que android no incluya esta caracteristica. Aunque estoy viendo que en la ultima actualizaciondel wifi theter de android el AP que se crea es de tipo infraestructura, lo que realmente es mucho mejor que un ad-hoc

Rafa dijo...

Tienes razón Pedro, las últimas versiones tanto de software como de hardware de equipos con Android incluyen la creación de Hot-spots, lo cual es muy interesante.

Un saludo

HaCk CrAcK dijo...

Pero esa aplicacion que mensionas a lo ultimom sirve tambien para conectarse por ad hoc?
Y una consulta como creaste la conexion inalambricaen la pc? porque yo la creo y una vez que me conecto a ella, abajo del monitorsitode conexiones inalambricas me pone no esta conectado :S

Rafa dijo...

Hack Crack:
En realidad la app que comento crea un tipo "Access Point". Hay otra app que tal vez quisieras ver, se llama Android wifi tether, es la que usaba antes de tener el xperia x10 mini pro.
Para lo que comentas de que no te conectas a la red podrías intentar lo que pongo en mi entrada, de apagar la wifi de android y desde la pc conectarte.

A la mano no tengo los pasos para crear la conexión (no uso XP ya) pero recuerdo que era en el cuadro donde aparecen las conexiones, según yo ahí lo podías agregar, pero hay que moverle para que se conecte ad-hoc, como que tiene truco.

Carlangaz dijo...

me acabo de dar cuenta que está mal escrito un comando, el que se utiliza para copiar el archivo "wpa_supplicant.conf" (te comiste la "t")
entonces quedaría así:

adb push wpa_supplicant.conf /data/misc/wifi/wpa_supplicant.conf

Carlangaz dijo...

ya lo probé y me anduvo muy bien!! gracias!!!!!

Rafa dijo...

Hola Carlangaz:

He visto un par de veces el comando y no encuentro dónde me ha faltado la letra. Me da gusto que te haya funcionado!

Un saludo

sanreikaj dijo...

Buenas Tardes, mi pana tengo una tablet con android 2.2 y antes de realizar los pasos revise y en el directorio /system/etc/wifi/ y en este lo que tengo es el archivo wpa_supplicant.conf.
Siendo asi, igual puedo realizar la copia pero en directorio donde esta?
Tambien busque el archivo tiwlan.ini, pero este no lo encuentro, deberia tenerlo?
Te agradezco la ayuda que me puedas prestar, ya que mi tablet no es 3G y quiero compartir el internet desde la laptop hacia ella.
Muchas Gracias

Rafa dijo...

sanreikaj:

Hola, mira, encontré esta página que convierte nuestras laptops en un Access Point:

www.bzeek.com

Dime si con eso resuelves tu problema o si le seguimos por la parte de la consola y los archivos del Android.

Recuerdo que en mi caso la tarjeta inalámbrica que usaba en la PC no tenía la opción de convertirse en Access Point, aunque había otras más modernas que sí contaban con esta opción.

Un saludo

Anónimo dijo...

Hola! Yo active por default el AdHoc en mi Galaxy S (cuando digo default me refiero a uno del DarkyROM que tengo), pero cuando intento conectarme al internet de mi PC(que tiene Windows 7) creo la red AdHoc, el GS la reconoce, pero no se conecta ¿cual sera el problema? Gracias por el tema!

Rafa dijo...

Hola anónimo:
Esto de las conexiones ad-hoc puede ser un tema complicado, ¿has probado conectarte con otros equipos a la conexión de tu PC? Así podemos saber si enfocarnos a la PC o a Android... Cuéntanos y seguimos platicando. Saludos

Google