コマンドラインからAndroidの「USBテザリング」設定を有効にすることはできますか?


23

bashスクリプト内から「USBテザリング」を有効にしたいので、adb shellAndroidの設定を変更するためにコマンドラインを実行する可能性はありますか?

編集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が、それは私の電話では動作しませんでした(aaptが見つかりません)。利用可能な設定のリストを表示するにはどうすればよいですか?
ジョージ・プロフェンツァ


ありがとう!build-toolsフォルダーにaaptが見つかりました。今すぐ実行できます。しかし、com.android.settings.apkが見つからないようです。:私が試してみたfind / -name 'com.android.settings.apk'電話で、何も来ない:(あなたは私が私がcom.android.settings.apkを見つけることができる場所を教えてくださいことはできますか?
ジョージProfenza

回答:


14

rootとして次のコマンドを実行すると、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ロリポップ(5.1)上に応じて答えによってFirelord
  • service call connectivity 30 i32 1未検証のマシュマロ(6.0)
  • service call connectivity 41 i32 1 Samsung Marshmallow(6.0)で
  • service call connectivity 33 i32 1 ヌガー(7.0)
  • service call connectivity 39 i32 1 Samsung Nougat(7.0)で

コマンドに表示される最初の番号はsetUsbTethering()メソッドの番号ですIConnectivityManager.aidl(これはAndroidのバージョンに依存し、Gingerbreadには存在しません)。

(ヒント:特定のAndroidバージョンのこのファイルを確認するには、適切なブランチを選択します。)

したがって、このコマンドはsetUsbTethering()1(USBテザリングを有効にする)または0(無効にする)を呼び出して渡します。

詳細については、Stack Overflowの関連する質問を参照してください。


USBリバーステザリングセットアップの一部としてUSBテザリングを有効にしている場合setprop sys.usb.config rndis,adbrndis0インターフェイスをセットアップするのに十分すぎるはずです。


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は間違いだったに違いありません。修正してくれてありがとう!
レオラム

これがUSBTetheringの正解です。ただし、WifiTetheringでは機能しません。APIは、...そのために開いたままにされていない
のKristopher

もちろん、私は気にしません;)リンクをありがとう。
レオラム

1
CM14.1(7.1)でJelly Beanコマンドが機能する
クリストフ

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
誰かがこれをテストしたり、デバイスに合わせて変更したい場合は、ここに投稿します。私が書いた小さなスクリプトを私のネクサス5倍のために(ロックを解除するためのニーズを)テザリングをオンにすると、私はそれをプラグインするときに自動的にそれをするのudevにそれをフックアップ
redbmk

1
@redbmk-便利なスクリプトをありがとう。ためギャラクシーA5 2017のキー配列は、 $ {inputKey} DPAD_DOWN。$ pause; $ {inputKey} DPAD_DOWN; $ pause; $ {inputKey} ENTER。また、pause = "sleep 0.3"でも問題ないことがわかりました。
P.ウィンドリッジ

上記のシーケンスでは、MTPの有効化に関するポップアップ確認($ {inputKey} DPAD_DOWN)を閉じるために最初のキーを押すのを忘れていました$ pause; $ {inputKey} DPAD_DOWN; $ pause; $ {inputKey} ENTER;
P.ウィンドリッジ

6

setprop以下のコマンドを試してください:

setprop sys.usb.config rndis,adb

2
これは必要なものの一部にすぎません。これは、たとえばdnsmasqを開始しません。
kroot

2

スリープの代わりにWindowsタイムアウトコマンドを使用し、最初に画面をウェイクし、一度だけ押し下げるように変更されました。2回ダウンすると、携帯電話で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マシンと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

転送を有効にするには(つまり、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.