0 votos

¿Cómo puedo activar el tethering USB a través de ADB?

Estaba pasando por esto enlace . pero no encuentro la forma de habilitar el tethering USB a través de adb. Hay alguna otra forma de hacerlo?

0 votos

¿Qué versión de Android utilizas?

0 votos

@xavier_fakerat Android Nougat 7.1

0 votos

El valor 33 debería funcionar

3voto

Vaclav Kotesovec Puntos 121
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

0 votos

Poner en cola a Bette Midler porque eres mi héroe.

1voto

xavier_fakerat Puntos 1

Para poder ejecutar estos comandos es necesario contar con una root:

Los siguientes comandos llaman a ConnectivityManager.setUsbTethering(boolean enable) en Android 4.3:

adb shell su -c service call connectivity 34 i32 1 activa el USB la conexión a Internet.

adb shell su -c service call connectivity 34 i32 0 desactiva el USB de la red.

Para otras versiones de Android sustituir 34 con lo siguiente setUsbTethering códigos de llamada por versión de Android:

4.4.4: 34
5.1.0: 30
6.0.1: 30
7.0.0: 33

Créditos

Es posible el tethering USB de un dispositivo Android usando adb a través del terminal ?

0 votos

El mío funcionó con 31 para nightly owl corriendo Android lollipop en GT-n7000

0 votos

@xavier_fakerat He probado este comando en el Google Pixel con Oreo instalado(rooted) y no funciona. He comprobado que el número de método es 33 setUsbTethering. El error que me da es "calling package cannot be null". Alguna idea de cómo puedo solucionar esto? ¿Cómo especificar el paquete de llamada para la llamada de servicio? Si ayuda, si instalo la compilación de depuración del usuario, funciona. Pero no en la compilación de producción que tiene root.

0voto

AquaAlex Puntos 111

El service El método no me ha funcionado en mi dispositivo Samsung. Sin embargo, descubrí cómo hacerlo configurando la interfaz de red directamente. Aquí hay un script que configura una máquina Linux y un dispositivo Android rooteado conectado por USB para el tethering USB. Esto no configura DNS o NAT masquerading, pero es suficiente para hacer el dispositivo accesible en 192.168.42.129:

#!/bin/bash
set -euo pipefail

# Set up USB tethering for an Android device.
# Usage: adb-usb-tether [USB-VENDOR USB-PRODUCT]
# If USB vendor/product is unspecified, use first USB network interface.
# On the Android side, tethering is enabled via adb shell.

if [[ $# -eq 2 ]]
then
    any=false
    vendor=$1
    product=$2
else
    any=true
fi

function find_if() {
    local path if
    for path in /sys/class/net/*
    do
        if=$(basename "$path")
        if [[ "$(readlink "$path")" == */usb* ]]
        then
            local ifproduct ifvendor
            ifproduct=$(cat "$(realpath "$path")/../../../idProduct")
            ifvendor=$(cat "$(realpath "$path")/../../../idVendor")
            if $any || [[ "$ifproduct" == "$product" && "$ifvendor" == "$vendor" ]]
            then
                echo "Found interface: $if" 1>&2
                echo "$if"
                return
            fi
        fi
    done
}

function adb_shell() {
    adb shell "$(printf " %q" "$@")"
}

function adb_su() {
    local quoted
    quoted="$(printf " %q" "$@")"
    adb shell su -c "$(printf %q "$quoted")"
}

if=$(find_if)
if [[ -z "$if" ]]
then
    echo "Requesting interface:" 1>&2
    adb_su setprop sys.usb.config rndis,adb
    echo " >> OK" 1>&2
fi

while [[ -z "$if" ]]
do
    echo "Waiting for network device..." 1>&2
    sleep 1
    if=$(find_if)
done

while ! ( ip link | grep -qF "$if" )
do
    echo "Waiting for interface..." 1>&2
    sleep 1
done

function configure_net() {
    local name="$1"
    local if="$2"
    local ip="$3"
    local table="$4"
    local cmdq="$5" # Query command
    local cmdx="$6" # Configuration command

    if ! ( "$cmdq" ip addr show dev "$if" | grep -qF 192.168.42."$ip" )
    then
        echo "Configuring $name interface address:" 1>&2
        "$cmdx" ip addr add 192.168.42."$ip"/24 dev "$if"
        echo " >> OK" 1>&2
    fi

    if ( "$cmdq" ip addr show dev "$if" | grep -qF 'state DOWN' )
    then
        echo "Bringing $name interface up:" 1>&2
        "$cmdx" ip link set dev "$if" up
        sleep 1
        echo " >> OK" 1>&2
    fi

    if ! ( "$cmdq" ip route show table "$table" | grep -qF "192.168.42.0/24 dev $if" )
    then
        echo "Configuring $name route:" 1>&2
        "$cmdx" ip route add table "$table" 192.168.42.0/24 dev "$if"
        echo " >> OK" 1>&2
    fi
}

configure_net local  "$if"   128 main  command   sudo
configure_net device rndis0  129 local adb_shell adb_su

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