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
답변
루트로 다음 명령을 실행하면 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 1
Firelord 의 답변 에 따라 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
인터페이스를 설정하기에 충분해야 합니다.
답변
를 사용하여 꽤 나쁜 방법 adb shell input tap
이 있습니다. 테 더링 및 대체를 활성화하기위한 좌표를 가져옵니다.
adb shell input tap <x> <y>
또는을 사용하여 라디오를 활성화하십시오 adb shell input keyevent
. 그냥보세요
adb shell input
다시 이것은 특정 장치에 국한됩니다.
답변
setprop
아래 명령을 시도하십시오 :
setprop sys.usb.config rndis,adb
답변
절전 모드 대신 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
답변
이 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에서 인터넷에 연결) 내 질문 및 답변을 참조 하십시오 .
답변
이것은 장치 독립적입니다 (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