명령 줄에서 "USB 테 더링"Android 설정을 활성화 할 수 있습니까?


23

bash 스크립트 내에서 "USB 테 더링"을 활성화하고 싶습니다. adb shell일부 Android 설정을 변경하기 위해 명령 줄을 실행할 가능성이 있습니까?

편집 1 :

다음 명령은 필요한 설정을 열지 만 아무것도 변경하지는 않습니다.

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

에서 TetherSettings 작업 이름을 찾았 습니다.

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

정말 멋지다. 나는 다른 명령을 찾으려고 시도했지만 aapt dump xmltree com.android.settings.apk AndroidManifest.xml내 전화에서 작동하지 않습니다 (적응하지 못했습니다). 사용 가능한 설정 목록을 어떻게 볼 수 있습니까?
조지 프로 펜자


감사! build-tools 폴더에서 aapt를 찾았습니다. 지금 실행할 수 있습니다. com.android.settings.apk를 찾을 수없는 것 같습니다. 나는 시도했다 : find / -name 'com.android.settings.apk'전화,하지만 아무것도 나타나지 않았다 :( com.android.settings.apk를 찾을 수있는 곳을 알려주시겠습니까?
George Profenza

답변:


14

루트로 다음 명령을 실행하면 USB 테 더링이 활성화됩니다.

  • service call connectivity 32 i32 1 아이스크림 샌드위치 (4.0)
  • service call connectivity 33 i32 1 젤리 빈 (4.1 ~ 4.3)
  • service call connectivity 34 i32 1 KitKat (4.4)
  • service call connectivity 30 i32 1 롤리팝 (5.0)
  • service call connectivity 31 i32 1Firelord 의 답변 에 따라 Lollipop (5.1)
  • service call connectivity 30 i32 1마시멜로 (6.0)에서 테스트되지 않음
  • service call connectivity 41 i32 1 삼성 마시멜로 (6.0)
  • service call connectivity 33 i32 1 누가 (7.0)
  • service call connectivity 39 i32 1 삼성 누가 (7.0)

명령에 표시되는 첫 번째 숫자는 setUsbTethering()메서드의 숫자입니다 IConnectivityManager.aidl(이것은 Android 버전에 따라 다르며 Gingerbread에는 없습니다).

(팁 :이 파일에서 특정 Android 버전을 확인하려면 적절한 지점을 선택하십시오.)

따라서이 명령은 setUsbTethering()1 (USB 테 더링 활성화) 또는 0 (비활성화)을 호출 하여 전달합니다.

자세한 내용 은 Stack Overflow 관련 질문을 참조하십시오 .


USB 리버스 테 더링 설정의 일부로 USB 테 더링을 활성화하는 setprop sys.usb.config rndis,adb경우 rndis0인터페이스를 설정하기에 충분해야 합니다.


1
jb-release 브랜치를보고 int setUsbTethering (boolean enable); 34 번째가 아닌 33 번째 방법 인 것 같습니다. 또한 JB 4.3을 사용하는 Nexus 7에서 4.1 / 4.2 및 4.3 / 4.4 명령을 테스트했으며 서비스 콜 연결 33 i32 1이 테 더링을 켭니다.

@JoshHolland는 실수 였을 것입니다. 수정 해 주셔서 감사합니다!
Léo Lam

이것이 USB 테 더링에 대한 정답입니다. WifiTethering에서는 작동하지 않습니다. API는 공개되지 않았습니다 ...
Kristopher

물론 나는 신경 쓰지 않을 것이다.) 링크 주셔서 감사합니다.
Léo Lam

1
CM14.1 (7.1)에서 Jelly Bean 명령 작동
christoph

7

를 사용하여 꽤 나쁜 방법 adb shell input tap이 있습니다. 테 더링 및 대체를 활성화하기위한 좌표를 가져옵니다.

adb shell input tap <x> <y>

또는을 사용하여 라디오를 활성화하십시오 adb shell input keyevent. 그냥보세요

adb shell input 

다시 이것은 특정 장치에 국한됩니다.


이 모든 것을 결합하면 화면 잠금이 해제되면 다음과 같이 작동합니다 adb shell "am start -n com.android.settings/.TetherSettings; input keyevent KEYCODE_DPAD_UP; input keyevent KEYCODE_ENTER". SO 에서 주요 이벤트 목록을 찾았습니다 .
redbmk

1
누구나 이것을 테스트하거나 장치에 맞게 수정하려면 여기에 게시하십시오. 넥서스 5x 테 더링을 켜는 작은 스크립트 를 작성 했고 (잠금 해제해야 함) 플러그를 꽂으면 자동으로이를 수행하기 위해 udev에 연결했습니다.
redbmk

1
@redbmk-유용한 스크립트에 감사드립니다. A의 갤럭시 A5 2017 키 순서는 다음과 같습니다 $ {inputKey} DPAD_DOWN; $ 일시 정지; $ {inputKey} DPAD_DOWN; $ 일시 정지; $ {inputKey} ENTER . 또한 pause = "sleep 0.3" 이 정상적으로 작동 한다는 것을 알았습니다 .
P.Windridge

위의 순서에서 MTP 활성화에 대한 팝업 확인을 해제하기 위해 초기 키 누르기를 잊었습니다. $ {inputKey} DPAD_DOWN; $ 일시 정지; $ {inputKey} DPAD_DOWN; $ 일시 정지; $ {inputKey} ENTER; .
P.Windridge

6

setprop아래 명령을 시도하십시오 :

setprop sys.usb.config rndis,adb

2
이것은 필요한 것의 일부일뿐입니다. 예를 들어 dnsmasq는 시작되지 않습니다.
kroot

2

절전 모드 대신 Windows 시간 초과 명령을 사용하고 화면을 먼저 깨운 다음 ​​한 번만 누르도록 수정되었습니다. 휴대 전화에서 Wi-Fi 테 더링을 두 번 사용 중지했습니다.

adb shell input keyevent KEYCODE_WAKEUP && adb shell am start -n com.android.settings/.TetherSettings && adb shell input keyevent KEYCODE_DPAD_DOWN && adb shell input keyevent KEYCODE_ENTER && timeout 2 && adb shell input keyevent KEYCODE_BACK

1

service방법은 Samsung 장치에서 작동하지 않았습니다. 그래도 네트워크 인터페이스를 직접 구성하여 방법을 알아 냈습니다. 다음은 Linux 테 더링을 위해 Linux 시스템 및 USB 연결 루팅 된 Android 장치를 설정하는 스크립트입니다. 이것은 DNS 또는 NAT 마스커레이딩을 설정하지 않지만 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

전달을 활성화하려면 (예 : Android 장치를 통해 PC에서 인터넷에 연결) 내 질문 및 답변을 참조 하십시오 .


0

이것은 장치 독립적입니다 (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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.