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 1KitKat (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인터페이스를 설정하기에 충분해야 합니다.
답변
를 사용하여 꽤 나쁜 방법 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