2013-11-26 2 views
10

몇 가지 테스트를 설정 중이며 USB 테 더딩 및 구성을 위해 상당한 수의 전화가 필요합니다. 나는 그들이 일단 묶여지기를 원했던 방식대로 성공적으로 구성했지만, 내 컴퓨터를 시작하거나 테스트 뱅크를 움직일 때마다 메뉴 탐색을 통해 휴대폰을 묶어 두는 것이 매우 지루할 것입니다. . 현재 cyanogenmod v10.1.0을 실행하는 Nexus S 휴대 전화를 사용하고 있지만 테스트 은행은 삼성 갤럭시 S4가 내가 가지고있는 몇 대의 Nexus S 휴대 전화와 섞여있을 가능성이 큽니다.터미널을 통해 adb를 사용하여 안드로이드 장치를 USB 테 더링 할 수 있습니까?

나는 이것을 bash 스크립트로하고 싶지만 스크립트에서 올 수있는 문제를 제거하기 위해 먼저 커맨드 라인 (우분투 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 테 더링 방법을 테스트 할 수 없습니다.

다음 명령은 안드로이드 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 테 더링을 끕니다.

안드로이드에 대한
4.4.4: 34 
5.1.0: 30 
6.0.1: 30 
7.0.0: 33 
+2

, 안드로이드 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 테 더링을 설정하는 다른 안드로이드 버전의

은 안드로이드 버전에 따라 다음 setUsbTethering 호출 코드로 34 교체

adb shell su -c service call connectivity 30 i32 0 USB 테 더링을 끄기

이것은 루트가 필요하다는 것을 명심하십시오.

+0

문서화 된 문서는 어디에 있습니까? – deFreitas

+1

adb에서 "서비스 목록"및 "dumpsys 활동 서비스"를 사용하여 장치가 인식하는 서비스의 개요를 얻으십시오. 여기에서 Google 또는 (AOSP) 소스 코드를 통해 브라우징하는 것은 내가 아는 한 "공식적으로"문서화되어 있지 않기 때문에. – user1972814

+1

@deFreitas, http://stackoverflow.com/q/20227326/1778421 읽기 –

0

(기본적으로 설치되지 않은 "안드로이드 구글없이"버전) Fairphone 오픈 OS와 Fairphone 2의 경우 다음을 수행해야합니다

  • 하는 (기본적으로 actived 할 수있다)
  • 개발자 모드 사용 검색 "루트"에 대한 설정 및 서비스 코드 (31)를 따옴표로 bash는 명령을 입력하고 사용
  • ADB
  • 에 대한 루트 액세스를 활성화는 :
    • 사용 : adb shell su -c "service call connectivity 31 i32 1"
    • 안 : adb shell su -c "service call connectivity 31 i32 0"
0

service 방법은 내 삼성 장치에서 나를 위해 작동하지 않았다. 네트워크 인터페이스를 직접 구성하여이를 수행하는 방법을 알아 냈습니다. 다음은 USB 테 더링을 위해 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" "[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