2013-11-26 16 views
10

私はいくつかのテストを設定しています。そのためには、十分な数の電話機をUSB接続して設定する必要があります。私は彼らが縛られてしまったのと同じようにそれらを構成するのに成功しましたが、私が(再)私のコンピュータを起動したり、テストバンクを移動するたびに、メニューをナビゲートすることによって電話を縛るのは非常に面倒です。私は現在、cyanogenmod v10.1.0を実行しているNexus Sの携帯電話を使用していますが、テストバンクはサムスンギャラクシーS4の可能性があります。端末からadbを使ってアンドロイドデバイスをUSBテザーで接続することはできますか?

私はこれをbashスクリプトとしてやりたいと思っていますが、まずコマンドライン(Ubuntu 13.04)でスクリプトを実行するようにしています。私はそれを自分自身でスクリプトにすることができるはずですが、bashスクリプトとして答えを提供するのが簡単なら、してください。私は、デバイス(adb -s $deviceID shell)に砲撃しないと動作してみました:これは、速やかに、デバイスの殻の外に私を蹴る

setprop sys.usb.config rndis,adb 

をし、デバイスがもはやアクセス可能です。 adb devicesを実行した場合、電話機は「?????????? No Permissions」と表示されます。その時点で、USBケーブルを外して再度接続し、でadbサーバーを再起動する必要がありますadb start-server。私が必要とする設定変更を行うために電話にアクセスすることができないので、これは機能しません。

私はグーグルで遊んでいますが、実りあるものは何も見つかりませんでした。助言がありますか?

答えて

15

setpropで値を変更するにはルートを持っている必要があります.RndisドライバなしでMac OSを使用しているため、USBテザリングの方法をテストできませんでした。

次のコマンドは、Android 4.3でConnectivityManager.setUsbTethering(boolean enable)を呼び出します:あなたは接続サービス(adb shell service list)を持っている場合は別の方法は、

adb shell su -c service call connectivity 34 i32 1は、USBテザリングをオンにします。

adb shell su -c service call connectivity 34 i32 0は、USBテザリングをオフにします。他のAndroidのバージョンについては

Androidのバージョンごとに、次のsetUsbTethering呼び出すコードで34を置き換える:Androidの場合

4.4.4: 34 
5.1.0: 30 
6.0.1: 30 
7.0.0: 33 
+2

参照は、Android 4.xの上でこの唯一の作品(可能性が高い、唯一の特定のバージョンを)。番号 "34"は 'IConnectivityManager.aidl'のメソッドリストのメソッド番号です –

+0

参考のため、RNDISはUSBと同じようですが、使用しているデバイスによって異なります。それは、ネクサスのRNDISと銀河s4のUSBでした。残念ながら、私はこのプロジェクトではもはや働いていませんので、あなたのソリューションをテストすることはできませんが、それがうまくいくと思われますので、私はあなたの答えを受け入れました。 – turbo

+2

[これはAndroid 4.3および4.4でのみ動作します](http://android.stackexchange.com/a/98775/51426)。 –

5

は5.0+(ロリポップ、マシュマロ)を使用します。

adb shell su -c service call connectivity 30 i32 1

のUSBテザリングをオンにします

adb shell su -c service call connectivity 30 i32 0 USBテザリングをオフにする

これにはrootが必要であることに注意してください。必要にFairphoneオープンOS(デフォルトではインストールされていない "Androidのグーグルなし" バージョン、)とFairphone 2については

+0

どこに文書化されていますか? – deFreitas

+1

「サービスリスト」と「dumpsysアクティビティサービス」を使用して、デバイスが認識しているサービスの概要を表示します。ここからは、Googleまたは(AOSP)のソースコードを参照することは、私が知っている限り、これが「正式に」文書化されていないためです。 – user1972814

+1

@deFreitas、http://stackoverflow.com/q/20227326/1778421 –

0

  • 開発者モード(デフォルトではactivedすることができる)
  • を有効にします「ルート」の設定と引用符でbashコマンドを入力して、サービスコード31を使用ADB
  • のルートアクセスを有効に検索:
    • イネーブル:adb shell su -c "service call connectivity 31 i32 1"
    • 無効化:adb shell su -c "service call connectivity 31 i32 0"
0

service方法は私のサムスンのデバイス上で私のために動作しませんでした。私はネットワークインタフェースを直接設定することでそれを行う方法を考え出しました。以下は、Linuxマシンと、USBテザリングのための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" "[email protected]")" 
} 

function adb_su() { 
    local quoted 
    quoted="$(printf " %q" "[email protected]")" 
    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 
関連する問題