29 votos

¿Puedo cambiar algunos ajustes de Android desde la línea de comandos?

Me gustaría activar "USB tethering" desde un bash script, así que ¿hay alguna posibilidad de ejecutar una línea de comandos con adb shell para cambiar algunos ajustes de Android?

Editar1 :

El siguiente comando abre los ajustes necesarios pero no cambia nada por sí solo:

am start -n com.android.settings/.TetherSettings

He encontrado TetherSettings nombre de acción de

aapt dump xmltree com.android.settings.apk AndroidManifest.xml | less +/ether

0 votos

Eso es realmente genial. Traté de encontrar otros comandos haciendo aapt dump xmltree com.android.settings.apk AndroidManifest.xml pero eso no funcionó en mi teléfono (aapt no encontrado). ¿Cómo puedo ver una lista de los ajustes disponibles?

0 votos

0 votos

Gracias. He encontrado aapt en la carpeta build-tools. Ahora puedo ejecutarlo. Sin embargo, no puedo encontrar com.Android.settings.apk. Lo he intentado: find / -name 'com.android.settings.apk' en el teléfono, pero no apareció nada :( ¿Puedes decirme dónde puedo encontrar com.Android.settings.apk?

20voto

Léo Lam Puntos 103

Ejecutando el siguiente comando como Root debería habilitar la conexión USB:

  • service call connectivity 32 i32 1 en el sándwich de helado (4.0)
  • service call connectivity 33 i32 1 en Jelly Bean 4.1 y Jelly Bean 4.2
  • service call connectivity 34 i32 1 en Jelly Bean 4.3 y KitKat (4.4)
  • service call connectivity 30 i32 1 en Lollipop (5.0)

El primer número que ves en los comandos es el setUsbTethering() el número del método en IConnectivityManager.aidl (esto depende de la versión de Android y no existe en Gingerbread).

(Consejo: para comprobar este archivo para una versión de Android en particular, seleccione la rama apropiada).

Así que lo que este comando hace es llamar setUsbTethering() y pasar el 1 (activar la conexión USB) o el 0 (desactivarla).

Para más información, véase esta pregunta relacionada con el desbordamiento de la pila .


Si está habilitando la conexión USB como parte de una configuración de conexión inversa USB, setprop sys.usb.config rndis,adb debería ser más que suficiente para conseguir el rndis0 Interfaz configurada.

1 votos

Mirando la rama jb-release, int setUsbTethering(boolean enable); parece ser el método 33, no el 34. Además, he probado tanto los comandos 4.1/4.2 como 4.3/4.4 en un Nexus 7 con JB 4.3 y conectividad de llamada de servicio 33 i32 1 activa el tethering.

0 votos

@JoshHolland debe haber sido un error. ¡Gracias por arreglarlo!

0 votos

Esta es la respuesta correcta para el USBTethering. Sin embargo, no funcionará para WifiTethering. La API no se ha dejado abierta para eso...

8voto

user29787 Puntos 31

Intenta con el comando setprop de abajo:

setprop sys.usb.config rndis,adb

5 votos

Esto es sólo una parte de lo que se necesita. Esto no iniciará dnsmasq por ejemplo.

8voto

Rilwan Puntos 268

Hay un método bastante malo que utiliza adb shell input tap Obtener las coordenadas para habilitar la conexión y sustituir

adb shell input tap

O navegar para habilitar la radio usando adb shell input keyevent . Sólo echa un vistazo,

entrada de adb shell

Una vez más esto se limita a un dispositivo en particular.

0 votos

Combinando todo esto, me funciona si la pantalla está desbloqueada: adb shell "am start -n com.android.settings/.TetherSettings; input keyevent KEYCODE_DPAD_UP; input keyevent KEYCODE_ENTER" . Encontré un lista de eventos clave en el SO.

1 votos

Por si alguien quiere probar esto y/o modificarlo para su dispositivo, lo publicaré aquí. He escrito un pequeño guión para activar el tethering de mi nexus 5x (necesita estar desbloqueado) y lo conecté a udev para que lo haga automáticamente cuando lo conecte

1 votos

@redbmk - gracias por el útil script. Para un Galaxy A5 2017 la secuencia de teclas es: ${inputKey}DPAD_DOWN; $pausa; ${inputKey}DPAD_DOWN; $pausa; ${inputKey}ENTER . También encontré que pause="dormir 0.3" funciona bien.

8voto

Firelord Puntos 161

Si su versión de Android tiene svc utilidad incorporada, ejecute este comando:

adb shell svc usb setFunctions rndis

Esto permitiría el tethering USB. Para ver qué otras funciones USB están disponibles, ejecute:

adb shell svc usb

4voto

Vaclav Kotesovec Puntos 121

Esto es independiente del dispositivo (activa el tethering USB)

adb shell am start -n com.android.settings/.TetherSettings &&
adb shell input keyevent 20 &&
adb shell input keyevent 20 &&
adb shell input keyevent KEYCODE_ENTER &&
sleep 2 &&
adb shell input keyevent 4

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X