【问题标题】:Connecting to WiFi using adb shell使用 adb shell 连接到 WiFi
【发布时间】:2012-01-03 06:53:50
【问题描述】:

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

【问题讨论】:

  • 你想达到什么目的?
  • 我必须自动化一些仅适用于 wi-fi 的事情。我可以使用猴子并点击设置->等,但最后一件事是我如何选择网络 ABC可能有多个网络可用。所以如果我能得到一个命令,我可以立即使用 SSID 和密码来做到这一点:)
  • 我用新的 SSID 和密码更新了 wpa_supplicant.conf 文件,启用了 wifi,但这似乎不适用于 Nexus 4,Lolipop 构建。 Wifi 打开,但又回到了我通过 UI 使用的原始 SSID。我还注意到我的更新文件被早期的 SSID 覆盖。我已将 chown 更改为 system.wifi 。我在这里做错了什么吗?我看到一些关于 sqlite3 的帖子。我们需要更改 db 中的任何内容吗?

标签: android linux adb


【解决方案1】:

您可以自己(或在您的脚本中)将网络条目添加到 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)"

【讨论】:

  • 可以在 Ubuntu 机器上使用:wpa_passphrase ssid passphrase 并将输出复制到 android 设备。它在三星平板电脑上对我有用。
  • 有根设备是可以的。但它确实帮助我解锁了我的设备。非常感谢您提供有用的路径。我没有切换设置,而是使用svc wifi disable,然后使用svc wifi enable
  • 经过 4 小时的密集搜索如何连接到 wifi 的解决方案后,绝对没有任何效果,这个解决方案简直就是魔法!还添加了 svc 重启的编辑建议,如 @ony 建议
【解决方案2】:

聚会迟到了,但我想出了一种方法,可以在无需 root 的设备上完成此操作。

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

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

我已经构建了一个应用程序,它可以在这里找到: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 中有更多信息。

希望对某人有所帮助。

【讨论】:

  • 谢谢你 - 好主意!
  • @JulianFrumar 如何知道路由器的密码类型?
  • @Suban Dhyako 它应该在您的路由器设置中告诉您它使用的密码/安全类型。此外,在 android wifi 屏幕中,如果您点击网络,它会告诉您安全类型。如今,大多数路由器都将设置为 WPA2 或 WPA,并且似乎在 adb 命令中键入 WPA 将适用于 WPA 或 WPA2。另外,作为对作者的说明,这非常有效,谢谢。但是github上的多行命令格式对我不起作用,而这里的单行命令可以。
  • @gamingexpert13 谢谢,很高兴听到它对你有用。多行可能只适用于 Linux :)
【解决方案3】:

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

svc wifi enable

并通过禁用

svc wifi disable

【讨论】:

  • 这需要设备root,出于安全考虑,我们不建议用户root设备。
  • @RajA.P.:感谢您的反馈。似乎除了@jpihl 之外的所有方法都需要设备植根,他们只是没有明确说明这一点。如果投反对票来自您:您是否都投反对票?
  • 我已经尝试了上面的命令,这些命令说我的设备要植根并且我正在使用我的企业设备,我不想妥协。
  • @RajA.P.:在这种情况下,jpihl 的上述答案可能会起作用(如您所见,这个答案有点老)
【解决方案4】:

作为另一个附加组件:虽然我的设备已植根,但我得到了 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'"

【讨论】:

    【解决方案5】:

    我解决了这个问题: 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源文件,添加push到/data/misc/wifi文件夹,重启设备。请注意,不同设备的网络线以上内容不同,不要修改该部分。

    【讨论】:

      【解决方案6】:

      太晚了,但我希望这会帮助任何可能偶然发现此线程的人。

      如果你正在尝试 adb pull 方法但收到“远程对象不存在”,试试这个:

      在同一命令提示符框中,

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

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

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

      【讨论】:

      • C:\Program Files (x86)\Minimal ADB and Fastboot>adb shell.......................... ................................外壳@android:/ $ cd /data/misc/wifi....... ....................................‌​........ ..........‌​........................‌​........ /system/bin/ sh: cd: /data/misc/wifi: 权限被拒绝....................... ..................‌​...... 2|shell@android:/ $ cat wpa_supplicant.conf...... .................................................................... ........‌​..................
      • /system/bin/sh: cat: wpa_supplicant.conf: 没有这样的文件或目录............ ......................... 1|shell@android:/ $ cd /data/misc/wifi.......... .................................................................... ................................... /system/bin/sh: cd: /data/misc/wifi : 没有权限............................................... .......‌​........
      • 这就是我运行这些命令时得到的结果?
      • 仅适用于有根设备:)
      猜你喜欢
      • 2018-12-06
      • 2014-05-14
      • 2016-12-09
      • 1970-01-01
      • 1970-01-01
      • 2015-03-03
      • 1970-01-01
      • 2016-03-15
      • 1970-01-01
      相关资源
      最近更新 更多