使用adb shell连接到wi-fi

时间:2012-01-03 06:53:50

标签: android linux adb

我拥有连接到特定接入点的所有详细信息。我只能使用那个访问点,所以我需要的就是执行它的命令。

6 个答案:

答案 0 :(得分:25)

您可以自己(或在脚本中)将网络条目添加到wpa_supplicant.conf中。基本上手动连接一次,然后执行:

adb pull /data/misc/wifi/wpa_supplicant.conf

并将网络条目集成到脚本中以实现自动化。示例简单脚本:

#!/bin/bash
#

# Get this information by connecting manually once, and do
#   adb pull /data/misc/wifi/wpa_supplicant.conf
ADB_PULL="adb pull /data/misc/wifi/wpa_supplicant.conf"
WIRELESS_CTRL_INTERFACE=wlan0
WIRELESS_SSID=Gondolin
WIRELESS_KEY_MGMT="WPA-EAP IEEE8021X"
WIRELESS_EAP=PEAP
WIRELESS_USER=Turgon
WIRELESS_PASSWORD=IdrilCelebrindal

adb start-server
adb wait-for-device
echo "adb connection....[CONNECTED]"
adb root
adb wait-for-device
adb remount
adb wait-for-device

pushd /tmp
rm wpa_supplicant.conf 2>/dev/null # Remove any old one
adbpull_status=`$ADB_PULL 2>&1`
echo -e "\nAttempting: $ADB_PULL"
if [ `echo $adbpull_status | grep -wc "does not exist"` -gt 0 ]; then
    echo "  wpa_supplicant.conf does not exist yet on your device yet."
    echo "This means you have not used your wireless yet."
    echo ""
    echo "Taking our best shot at creating this file with default config.."

    echo "ctrl_interface=$WIRELESS_CTRL_INTERFACE" >> wpa_supplicant.conf
    echo "update_config=1" >> wpa_supplicant.conf
    echo "device_type=0-00000000-0" >> wpa_supplicant.conf
else
    echo $adbpull_status
    echo "  wpa_supplicant.conf exists!"
fi

echo ""
echo "Add network entry for wpa_supplicant.conf.."
echo "" >> wpa_supplicant.conf
echo "network={" >> wpa_supplicant.conf
echo "  ssid=\"$WIRELESS_SSID\"" >> wpa_supplicant.conf
echo "  key_mgmt=$WIRELESS_KEY_MGMT" >> wpa_supplicant.conf
echo "  eap=$WIRELESS_EAP" >> wpa_supplicant.conf
echo "  identity=\"$WIRELESS_USER\"" >> wpa_supplicant.conf
echo "  password=\"$WIRELESS_PASSWORD\"" >> wpa_supplicant.conf
echo "  priority=1" >> wpa_supplicant.conf
echo "}" >> wpa_supplicant.conf
echo "Pushing wpa_supplicant.conf.."
adb push wpa_supplicant.conf /data/misc/wifi/wpa_supplicant.conf
popd #/tmp

adb shell chown system.wifi /data/misc/wifi/wpa_supplicant.conf
adb shell chmod 660 /data/misc/wifi/wpa_supplicant.conf

echo ""
echo "Finished!"
adb shell am start -a android.intent.action.MAIN -n com.android.settings/.Settings
echo "Please toggle wifi off/on now.. (ifconfig not sufficient, monkey this)"

答案 1 :(得分:17)

参加晚会,但我想出了一种方法,可以在没有root 的设备上完成此任务。

它可能不漂亮,但它确实有效。

基本上我的建议是创建一个应用程序,该应用程序基于启动应用程序时给出的EXTRAS加入接入点。 然后使用EXTRAS命令的am参数提供-e <KEY> <VALUE>

我已经构建了一个应用程序,它可以在这里找到它:https://github.com/steinwurf/adb-join-wifi

安装应用程序后,可以使用以下ADB命令加入wifi接入点:

adb shell am start -n com.steinwurf.adbjoinwifi/com.steinwurf.adbjoinwifi.MainActivity -e ssid [SSID] -e password_type [PASSWORD_TYPE] -e password [WIFI PASSWORD]

Github上的README中有更多信息。

希望它有所帮助。

答案 2 :(得分:7)

作为附加组件: 您可以通过svc以root身份在设备上启用wifi

svc wifi enable

并通过

禁用
svc wifi disable

答案 3 :(得分:2)

作为另一个附加组件:虽然我的设备已根植但我得到了 尝试执行remote object ''/data/misc/wifi/wpa_supplicant.conf'' does not exist时出现adb pull错误。这是因为adb本身并不在ROOT模式下运行。要解决这个问题,你可以执行类似这样的事情

adb shell "su -c 'cp -R /data/misc/wifi/wpa_supplicant.conf /data/misc/wpa_supplicant.conf'"
adb shell "su -c 'chmod -R 777 /data/misc/wpa_supplicant.conf'"
adb pull /data/misc/wpa_supplicant.conf
adb shell "su -c 'rm /data/misc/wpa_supplicant.conf'"

答案 4 :(得分:2)

超级迟到但我希望这会帮助任何可能偶然发现这个帖子的人。

如果你正在尝试使用adb pull方法,但收到&#34;远程对象不存在&#34;,请尝试以下操作:

在同一个命令提示框中,

  • 键入adb root以root身份重新启动adb。点击进入。
  • 现在输入adb shell,点击Enter。确保提示显示root@[device]:
  • 在#提示符下输入cd /data/misc/wifi,点击“输入”。
  • 最后输入cat wpa_supplicant.conf,点击“输入”。

这应将您之前连接的WiFi数据转储到手机屏幕上。

这些命令在遇到“远程对象不存在”问题后在我的无根设备上运行。

答案 5 :(得分:1)

我解决了这个问题: adb pull /data/misc/wifi/wpa_supplicant.conf ~/Desktop,然后编辑文件,添加网络模块,我的整个conf文件是:

##### wpa_supplicant configuration file template #####
update_config=1
ctrl_interface=DIR=/data/system/wpa_supplicant GROUP=wifi
eapol_version=1
ap_scan=1
fast_reauth=1
network={
    ssid="your ssid"
    psk="your pswd"
    key_mgmt=WPA-PSK
    priority=241
}

然后rm原始文件,将其添加到/data/misc/wifi文件夹,重启设备。请注意,不同的设备在网络线上方有不同的内容,请勿修改该部分。