私はいくつかのテストを設定していますが、USBで接続して構成するには、かなりの数の電話が必要になります。テザーされた後は、希望どおりに構成することに成功しましたが、コンピューターを(再)起動したり、テストバンクを移動したりするたびに、メニューをナビゲートして電話をテザーするのは非常に面倒です。 。私は現在、cyanogenmodv10.1.0を実行しているNexusS電話を使用していますが、テストバンクはSamsung GalaxyS4と手元にあるいくつかのNexusS電話が混在している可能性があります。
これをbashスクリプトとして実行したいのですが、スクリプトから発生する可能性のある問題を取り除くために、最初にコマンドライン(Ubuntu 13.04)で機能させようとしています。自分でスクリプト化できるはずですが、bashスクリプトで答えるのが簡単な場合はやってください。デバイス(adb -s $deviceID Shell
)にシェルして実行してみました:
setprop sys.usb.config rndis,adb
これにより、すぐにデバイスシェルから追い出され、デバイスにアクセスできなくなります。 adb devices
を実行すると、電話が「??????????権限なし」と表示されます。その時点で、USBケーブルを取り出してから再度接続し、再起動する必要があります。 adb kill-server
adb start-server
のadbサーバー。電話にアクセスして必要な構成変更を行うことができないため、これは機能しません。
私はググってみましたが、実りあるものを見つけることができませんでした。助言がありますか?
setprop
で値を変更するには、rootが必要です。私は、rndisドライバーのないMac OSを使用しているため、USBテザリングの方法をテストできませんでした。別の方法として、接続サービス(_adb Shell service list
_)がある場合:
次のコマンドは、Android 4.3でConnectivityManager.setUsbTethering(boolean enable)
を呼び出します。
_adb Shell su -c service call connectivity 34 i32 1
_はUSBテザリングをオンにします。
_adb Shell su -c service call connectivity 34 i32 0
_はUSBテザリングをオフにします。
その他のAndroidバージョンでは、_34
_を次のsetUsbTethering
呼び出しコードに置き換えますAndroidバージョン:
_4.4.4: 34
5.1.0: 30
6.0.1: 30
7.0.0: 33
_
Android 5.0+(Lollipop、Marshmallow)の場合:
adb Shell su -c service call connectivity 30 i32 1
USBテザリングをオンにするには
adb Shell su -c service call connectivity 30 i32 0
USBテザリングをオフにします
これにはrootが必要であることに注意してください。
受け入れられた回答のコマンドはOreoでは機能しません。これは、追加のパラメーターcallerPkg
が必要であり、そこにランダムなテキストを配置すると機能するためです。
int setUsbTethering(boolean enable, String callerPkg);
したがって、8.0/8.1 Oreoの場合:
service call connectivity 34 i32 1 s16 text
-USBテザリングをオンにします
service call connectivity 34 i32 0 s16 text
-USBテザリングをオフにします
それは私のために働きますAndroid Pie with
service call connectivity 33 i32 1 s16 text
-USBテザリングをオンにします
service call connectivity 33 i32 0 s16 text
-USBテザリングをオフにします
https://github.com/medvid/Android-tether/blob/master/tether#L8 のように、入力をスクリプト化して設定アプリを起動し、チェックボックスをオンにすることもできます。
これが私のスクリプトです(リンクとほとんど同じですが、少し変更されています):
adb Shell am force-stop com.Android.settings
adb Shell input keyevent 3 # Home
sleep 2
adb Shell am start -a Android.intent.action.MAIN -n com.Android.settings/.TetherSettings
sleep 2
adb Shell input keyevent 19 # Up
adb Shell input keyevent 20 # Down
adb Shell input keyevent 66 # Enter
sleep 2
adb Shell input keyevent 3 # Home
Windowsの場合は、sleep
をtimeout -t
に置き換えるだけです。
Android Pie(9)(Googleの設定アプリ(Pixel Experience ROMを実行);他の設定アプリで動作するかどうかを確認できません)を実行しているOnePlus3Tでは正常に動作します)
service
メソッドは、Samsungデバイスでは機能しませんでした。ただし、ネットワークインターフェイスを直接構成することで、その方法を理解しました。これは、LinuxマシンとUSB接続のルート化されたAndroidデバイスをUSBテザリング用にセットアップするスクリプトです。これは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
Fairphone OpenOSを搭載したFairphone2(デフォルトではインストールされない「Androidwithout Google」バージョン)の場合、次のことを行う必要があります。
adb Shell su -c "service call connectivity 31 i32 1"
adb Shell su -c "service call connectivity 31 i32 0"