Android 使用adb操作WiFi连接扫描等相关指令

Android 使用adb操作WiFi连接扫描等相关指令

文章目录

一、前言

Android系统调试是,如果没有系统原生设置应用又需要调试验证WiFi功能时,

可以使用一些指令来验证调试WiFi相关功能,

最常用的就是 svc wifi enable/disable,或者使用iv dev来验证,

但对于AP功能就没办法验证了,并且可调试功能比较少,

其实Android系统自带有组很强大的shell指令集,

这里记录下平时使用的cmd wifi 相关指令。

系统初期开发或者定位一下wifi、热点问题会比较有用。

本文不仅详细介绍cmd wifi相关用法,并且后续有介绍系统Java代码中具体控制位置,

如果有特殊需求可以对命令进行扩展定制。

目前网上还没有这么全面介绍的文章,有wifi调试需求的可以先收藏后续慢慢查看。

二、adb shell cmd wifi 主要命令

### 1、adb shell cmd wifi -h

查看WiFi所有指令以及参数

命令具体信息太多,最后展示。

串口查看命令具体参数技巧,grep 某个关键字:

console:/ # cmd wifi -h | grep   connect-network                               
  connect-network <ssid> open|owe|wpa2|wpa3|wep [<passphrase>] [-x] [-m] [-d] [-b <bssid>] [-r auto|none|persistent|non_persistent]
console:/ # 

下面很多命令返回的结果是使用串口工具展示的,串口命令是不需要adb 连接的。

2、打开关闭WLAN

adb shell cmd wifi set-wifi-enabled enabled

adb shell cmd wifi set-wifi-enabled disabled

3、扫描WiFi 和查看扫描列表

adb shell cmd wifi start-scan             //扫描

adb shell cmd wifi list-scan-results    //查看扫描结果

cmd wifi list-scan-results 命令扫描到的信息:

console:/ # 
console:/ # cmd wifi list-scan-results  
    BSSID              Frequency      RSSI           Age(sec)     SSID   Flags
  48:5f:08:ed:f7:f1       5200        -68             10.148    synwcs_5G                         [WPA2-PSK-CCMP][RSN-PSK-CCMP][WPA-PSK-CCMP][ESS]
  34:f7:16:92:87:6c       2442        -38             10.148    syrj                              [WPA-PSK-CCMP][WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS]
  de:00:1a:bc:b3:4a       2422        -57             10.148    IFLYHub_86_7849                   [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS]
  80:ea:07:28:ef:1c       5240        -96             10.148    HorionRj_5G                       [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][RSN-PSK-CCMP+TKIP][ESS]
  48:5f:08:45:a6:c1       5805        -53             10.148    SYEBSW-5G                         [WPA-PSK-CCMP][WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS]
  f4:84:8d:24:19:35       5785        -77             10.148    synwcs-m_5G                       [WPA-PSK-CCMP][WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS]

console:/ # 

扫描列表中信息含义:

BSSID     :MAC地址
Frequency :信号频段,5G:5160到5865,2.4G:2401~2483MHz
RSSI      :wifi信号强度,RSSI >=-55为满格信号,level为4,每个level之间的Rssi的跳变为15
Age(sec)  :响应时间?
SSID      :wifi名称
Flags     :加密格式,包含加密相关字符

4、连接WiFi

adb shell cmd wifi connect-network wifiName wpa2 12345678

//wifiName 连接WiFi名称

//wpa2 加密方式,如果没有密码写 open ,最后的密码不用写

//12345678 密码

如果没有密码,连接xm名称的wifi:

cmd wifi connect-network xm open

5、查看WiFi状态

adb shell cmd wifi status

(1) wifi 正常连接下的信息:
C:\Users\As11040>adb shell cmd wifi status
Wifi is enabled //(1)查看到Wifi的开关状态
Wifi scanning is only available when wifi is enabled //(2)扫描状态
==== Primary ClientModeManager instance ====
Wifi is connected to "xm5G" //(3)wifi连接的名称,下面是详细信息
WifiInfo: SSID: "xm5G", BSSID: 8c:53:c3:53:c6:59, MAC: c0:f5:35:4f:a3:e0, IP: /192.168.31.17, Security type: 0, Supplicant state: COMPLETED, Wi-Fi standard: 5, RSSI: -46, Link speed: 702Mbps, Tx Link speed: 702Mbps, Max Supported Tx Link speed: 866Mbps, Rx Link speed: 780Mbps, Max Supported Rx Link speed: 866Mbps, Frequency: 5785MHz, Net ID: 2, Metered hint: false, score: 60, isUsable: true, CarrierMerged: false, SubscriptionId: -1, IsPrimary: 1, Trusted: true, Restricted: false, Ephemeral: false, OEM paid: false, OEM private: false, OSU AP: false, FQDN: <none>, Provider friendly name: <none>, Requesting package name: <none>"xm5G"openMLO Information: , Is TID-To-Link negotiation supported by the AP: false, AP MLD Address: <none>, AP MLO Link Id: <none>, AP MLO Affiliated links: <none>
successfulTxPackets: 317
successfulTxPacketsPerSecond: 2.4672825327175896
retriedTxPackets: 3898
retriedTxPacketsPerSecond: 0.4502428708131321
lostTxPackets: 42
lostTxPacketsPerSecond: 0.0
successfulRxPackets: 173
successfulRxPacketsPerSecond: 2.4364789031543634

C:\Users\As11040>
(2)串口查看wifi关闭情况的信息:
console:/ # cmd wifi status                                                    
Wifi is disabled
Wifi scanning is only available when wifi is enabled
console:/ # 
(3)串口查看wifi开启,但是未连接wifi情况的信息:
console:/ # cmd wifi status                                                    
Wifi is enabled
Wifi scanning is only available when wifi is enabled
==== ClientModeManager instance: ConcreteClientModeManager{id=2374293 iface=wlan0 role=ROLE_CLIENT_PRIMARY} ====
Wifi is not connected
console:/ # 

6、查看已保存或者连接的WiFi列表

Unknown command: list-network //未连接wifi前的情况
255|console:/ # cmd wifi list-networks                                         
No networks
console:/ # 

console:/ # cmd wifi list-networks //连接wifi后的打印   
Network Id      SSID                         Security type
0            xm5G                             open
0            xm5G                             owe^
1            syrj                             wpa2-psk
1            syrj                             wpa3-sae^
console:/ # 
console:/ # 

上面可以看到每连接一个wifi都会有重复多一个,另外一个信息是不准确的,这个不影响。

7、打开关闭热点

(1)打开热点
adb shell cmd wifi start-softap ap_ssidxx wpa2 12345678 -b 5

// ap_ssidxx 热点名称

// wpa2 加密方式

//12345678 密码

//-b 5 5G频段

实际运行运行中,运行上面代码,会有点小问题:

热点是开启了,也可以被搜到和连接上;

但是打开Setings应用发现,热点名称,密码,加密类型等信息并没有修改,重启后也是无效的;

所以说这个方法开启热点只能单次有效。

(2)关闭热点
adb shell cmd wifi stop-softap

关闭是没啥问题的。

三、其他

1、adb shell cmd wifi -h 完整信息

C:\Users\As11140>adb shell cmd wifi -h
Wi-Fi (wifi) commands:
  help or -h
    Print this help text.
  get-country-code //(1)获取国家码
    Gets country code as a two-letter string
  set-wifi-enabled enabled|disabled //(2)wifi打开和关闭
    Enables/disables Wifi on this device.
  set-scan-always-available enabled|disabled //(3)设置是否扫描状态
    Sets whether scanning should be available even when wifi is off.
  list-scan-results //(4)查看扫描到的列表
    Lists the latest scan results
  start-scan //(5)开始扫描
    Start a new scan
  list-networks //(6)保存的wifi,名称和networkid
    Lists the saved networks
  forget-network <networkId> //(7)忘记某个网络的networkid
    Remove the network mentioned by <networkId>
        - Use list-networks to retrieve <networkId> for the network
  status  //(8)wifi当前状态,打开状态和连接状态
    Current wifi status
  set-verbose-logging enabled|disabled  //(9)wifi打印等级是否调高
    Set the verbose logging enabled or disabled
  is-verbose-logging  //(10)wifi打印等级查看
    Check whether verbose logging enabled or disabled
  start-restricting-auto-join-to-subscription-id subId
    temporarily disable all wifi networks except merged carrier networks with the given subId
  stop-restricting-auto-join-to-subscription-id
    Undo the effects of start-restricting-auto-join-to-subscription-id
  add-suggestion <ssid> open|owe|wpa2|wpa3 [<passphrase>] [-u] [-o] [-p] [-m]  [-s] [-d] [-b <bssid>] [-e] [-i] [-a <carrierId>] [-c <subscriptionId>]
    Add a network suggestion with provided params
    Use 'network-suggestions-set-user-approved com.android.shell yes' to approve suggestions added via shell (Needs root access)
    <ssid> - SSID of the network
    open|owe|wpa2|wpa3 - Security type of the network.
        - Use 'open' or 'owe' for networks with no passphrase
           - 'open' - Open networks (Most prevalent)
           - 'owe' - Enhanced open networks
        - Use 'wpa2' or 'wpa3' for networks with passphrase
           - 'wpa2' - WPA-2 PSK networks (Most prevalent)
           - 'wpa3' - WPA-3 PSK networks
    -u - Mark the suggestion untrusted.
    -o - Mark the suggestion oem paid.
    -p - Mark the suggestion oem private.
    -m - Mark the suggestion metered.
    -h - Mark the network hidden.
    -s - Share the suggestion with user.
    -d - Mark the suggestion autojoin disabled.
    -b <bssid> - Set specific BSSID.
    -r - Enable non_persistent randomization (disabled by default)
    -a - Mark the suggestion carrier merged
    -c <carrierId> - set carrier Id
    -i <subscriptionId> - set subscription Id, if -a is used, this must be set
  remove-suggestion <ssid> [-l]
    Remove a network suggestion with provided SSID of the network
    -l - Remove suggestion with lingering, if not set will disconnect immediately
  remove-all-suggestions
    Removes all suggestions added via shell
  list-suggestions  //(12)对应List<WifiNetworkSuggestion> ,不清楚作用
    Lists the suggested networks added via shell
  set-coex-cell-channels [lte|nr <bandNumber 1-261> <downlinkFreqKhz or UNKNOWN: -1> <downlinkBandwidthKhz or UNKNOWN: 0> <uplinkFreqKhz or UNKNOWN: -1> <uplinkBandwidthKhz or UNKNOWN: 0>] ...
    Sets a list of zero or more cell channels to use for coex calculations. Actual device reported cell channels will be ignored until reset-coex-cell-channels is called.
  reset-coex-cell-channels
    Removes all cell channels set in set-coex-cell-channels and returns to listening on actual device reported cell channels
  get-coex-cell-channels
    Prints the cell channels being used for coex.
  set-connected-score <score>
    Set connected wifi network score (to choose between LTE & Wifi for default route).
    This turns off the active connected scorer (default or external).
    Only works while connected to a wifi network. This score will stay in effect until you call reset-connected-score or the device disconnects from the current network.
    <score> - Integer score should be in the range of 0 - 60
  reset-connected-score
    Turns on the default connected scorer.
    Note: Will clear any external scorer set.
  //(13)打开热点
  start-softap <ssid> (open|wpa2|wpa3|wpa3_transition|owe|owe_transition) <passphrase> [-b 2|5|6|any|bridged|bridged_2_5|bridged_2_6|bridged_5_6] [-x] [-f <int> [<int>]]
    Start softap with provided params
    Note that the shell command doesn't activate internet tethering. In some devices, internet sharing is possible when Wi-Fi STA is also enabled and isassociated to another AP with internet access.
    <ssid> - SSID of the network
    open|wpa2|wpa3|wpa3_transition|owe|owe_transition - Security type of the network.
        - Use 'open', 'owe', 'owe_transition' for networks with no passphrase
        - Use 'wpa2', 'wpa3', 'wpa3_transition' for networks with passphrase
    -b 2|5|6|any|bridged|bridged_2_5|bridged_2_6|bridged_5_6 - select the preferred bands.
        - Use '2' to select 2.4GHz band as the preferred band
        - Use '5' to select 5GHz band as the preferred band
        - Use '6' to select 6GHz band as the preferred band
        - Use 'any' to indicate no band preference
        - Use 'bridged' to indicate bridged AP which enables APs on both 2.4G + 5G
        - Use 'bridged_2_5' to indicate bridged AP which enables APs on both 2.4G + 5G
        - Use 'bridged_2_6' to indicate bridged AP which enables APs on both 2.4G + 6G
        - Use 'bridged_5_6' to indicate bridged AP which enables APs on both 5G + 6G
    Note: If the band option is not provided, 2.4GHz is the preferred band.
          The exact channel is auto-selected by FW unless overridden by force-softap-channel command or '-f <int> <int>' option
    -f <int> <int> - force exact channel frequency for operation channel
    Note: -f <int> <int> - must be the last option
          For example:
          Use '-f 2412' to enable single Soft Ap on 2412
          Use '-f 2412 5745' to enable bridged dual Soft Ap on 2412 and 5745
    -x - Specifies the SSID as hex digits instead of plain text (T and above)
  stop-softap
    Stop softap (hotspot) //(14)关闭热点
  pmksa-flush <networkId>
        - Flush the local PMKSA cache associated with the network id. Use list-networks to retrieve <networkId> for the network
  reload-resources
    Reset the WiFi resources cache which will cause them to be reloaded next time they are accessed. Necessary if overlays are manually modified.
  launch-dialog-simple [-t <title>] [-m <message>] [-l <url> <url_start> <url_end>] [-y <positive_button_text>] [-n <negative_button_text>] [-x <neutral_button_text>] [-c <timeout_millis>]
    Launches a simple dialog and waits up to 15 seconds to print the response.
    -t - Title
    -m - Message
    -l - URL of the message, with the start and end index inside the message
    -y - Positive Button Text
    -n - Negative Button Text
    -x - Neutral Button Text
    -c - Optional timeout in milliseconds
    -s - Use the legacy dialog implementation on the system process
  launch-dialog-p2p-invitation-sent <device_name> <pin> [-i <display_id>]
    Launches a P2P Invitation Sent dialog.
    <device_name> - Name of the device the invitation was sent to
    <pin> - PIN for the invited device to input
  launch-dialog-p2p-invitation-received <device_name> [-p] [-d <pin>] [-i <display_id>] [-c <timeout_millis>]
    Launches a P2P Invitation Received dialog and waits up to 15 seconds to print the response.
    <device_name> - Name of the device sending the invitation
    -p - Show PIN input
    -d - Display PIN <pin>
    -i - Display ID
    -c - Optional timeout in milliseconds
  query-interface <uid> <package_name> STA|AP|AWARE|DIRECT [-new]
    Query whether the specified could be created for the specified UID and package name, and if so - what other interfaces would be destroyed
    -new - query for a new interfaces (otherwise an existing interface is ok
  interface-priority-interactive-mode enable|disable|default
    Enable or disable asking the user when there's an interface priority conflict, |default| implies using the device default behavior.
  set-one-shot-screen-on-delay-ms <delayMs>
    set the delay for the next screen-on connectivity scan in milliseconds.
  set-network-selection-config <enabled|disabled> <enabled|disabled> -a <associated_network_selection_override>
    set whether sufficiency check is enabled for screen off case (first arg), and screen on case (second arg)
    -a - set as one of the int WifiNetworkSelectionConfig.ASSOCIATED_NETWORK_SELECTION_OVERRIDE_ values:
      0 - no override
      1 - override to enabled
      2 - override to disabled
  set-ipreach-disconnect enabled|disabled
    Sets whether CMD_IP_REACHABILITY_LOST events should trigger disconnects.
  get-ipreach-disconnect
    Gets setting of CMD_IP_REACHABILITY_LOST events triggering disconnects.
  take-bugreport
    take bugreport through betterBug. If it failed, take bugreport through bugreport manager.
  get-allowed-channel  //(15)当前设备支持的信道值,热点相关
    get allowed channels in each operation mode from wifiManager if available. Otherwise, it returns from wifiScanner.


C:\Users\As11140>

上面标记了15个 可能会用到的场景,其他的场景看不懂,也没怎么用过,有兴趣的可以自己看看。

整个信息太多了,有时候不好找。

可以在adb shell 或者设备串口中使用 grep 过滤关键字查看相关信息:

cmd wifi -h | grep xxx关键字    

2、 adb shell cmd wifi 命令在系统中的具体代码

Android cmd wifi 控制和查询wifi命令的控制代码都在 WifiShellCommand.java 里面。

WifiShellCommand.java 代码位置:

Android13 或者更新版本的 WifiShellCommand.java 的具体位置:
package\modules\Wifi\service\java\com\android\server\wifi\WifiShellCommand.java
Android11 或者更旧版本的 WifiShellCommand.java 的具体位置:
frameworks\opt\net\wifi\service\java\com\android\server\wifi\WifiShellCommand.java

关键代码如下:

public class WifiShellCommand extends BasicShellCommandHandler {
    @VisibleForTesting
    public static String SHELL_PACKAGE_NAME = "com.android.shell";

    // These don't require root access.
    // However, these do perform permission checks in the corresponding WifiService methods.
    private static final String[] NON_PRIVILEGED_COMMANDS = {//命令汇总
            "add-suggestion",
            "forget-network",
            "get-country-code",
            "help",
            "-h",
            "is-verbose-logging",
            "list-scan-results",
            "list-networks",
            "list-suggestions",
            "remove-suggestion",
            "remove-all-suggestions",
            "reset-connected-score",
            "set-connected-score",
            "set-scan-always-available",
            "set-verbose-logging",
            "set-wifi-enabled",
            "set-passpoint-enabled",
            "set-multi-internet-state",
            "start-scan",
            "start-softap",
            "status",
            "stop-softap",
            "query-interface",
            "interface-priority-interactive-mode",
            "set-one-shot-screen-on-delay-ms",
            "set-network-selection-config",
            "set-ipreach-disconnect",
            "get-ipreach-disconnect",
            "take-bugreport",
            "get-allowed-channel",
    };

    @Override
    public int onCommand(String cmd) {
        // Treat no command as help command.
        if (TextUtils.isEmpty(cmd)) {
            cmd = "help";
        }
        // Explicit exclusion from root permission
        if (ArrayUtils.indexOf(NON_PRIVILEGED_COMMANDS, cmd) == -1) {
            final int uid = Binder.getCallingUid();
            if (uid != Process.ROOT_UID) {
                throw new SecurityException(
                        "Uid " + uid + " does not have access to " + cmd + " wifi command "
                                + "(or such command doesn't exist)");
            }
        }
        final PrintWriter pw = getOutPrintWriter();
        try {
            switch (cmd) {
                case "set-ipreach-disconnect": {
                    boolean enabled = getNextArgRequiredTrueOrFalse("enabled", "disabled");
                    mWifiGlobals.setIpReachabilityDisconnectEnabled(enabled);
                    return 0;
                }
                case "set-wifi-enabled": { //开关wifi
                    boolean enabled = getNextArgRequiredTrueOrFalse("enabled", "disabled");
                    //调用 WifiService.setWifiEnabled 接口开关wifi
                    mWifiService.setWifiEnabled(SHELL_PACKAGE_NAME, enabled);
                    return 0;
                }
                case "list-networks":  //查看已连接或者已保存的wifi列表
                	//获取wifi列表
                    ParceledListSlice<WifiConfiguration> networks =
                            mWifiService.getConfiguredNetworks(SHELL_PACKAGE_NAME, null, false);
                    if (networks == null || networks.getList().isEmpty()) {
                        pw.println("No networks");
                    } else {
                        pw.println("Network Id      SSID                         Security type");
                        for (WifiConfiguration network : networks.getList()) {
                            String securityType = network.getSecurityParamsList().stream()
                                    .map(p -> WifiConfiguration.getSecurityTypeName(
                                                    p.getSecurityType())
                                            + (p.isAddedByAutoUpgrade() ? "^" : ""))
                                    .collect(Collectors.joining("/"));
                            pw.println(String.format("%-12d %-32s %-4s",
                                    network.networkId, WifiInfo.sanitizeSsid(network.SSID),
                                    securityType));
                        }
                    }
                    return 0;
                case ...
            }
        }
    }
    
}

上面只展示了set-wifi-enabled 和 list-networks 命令相关代码,

其他的也是类似的调用WifiService 相关api实现具体功能,部分接口是有用print打印返回的数据。

代码大概有两千多行,有兴趣的可以看看源码:

http://aospxref.com/android-13.0.0_r3/xref/packages/modules/Wifi/service/java/com/android/server/wifi/WifiShellCommand.java

3、svc控制 wifi、热点、蓝牙命令

svc 主要命令:

adb shell svc power|wifi|bluetooth|usb|nfc 

从上面介绍可以知道,其实只要记住 svc,那么就是提示其他相关命令,然后再输入功能命令,就会显示具体参数介绍。

svc 功能只能对某个模块开关等基础功能。

svc详解: https://blog.csdn.net/wenzhi20102321/article/details/132779708

4、iw dev命令

(1)iw dev 示例

iw dev 命令比较特殊,这个命令是直接对节点数据进行查询和设置的,不需要经过WifiService那些Java逻辑。

console:/ # iw dev //查看无线设备信息,和相关节点                                                           
phy#0
        Unnamed/non-netdev interface
                wdev 0x4
                addr c2:f5:35:4f:a3:e0
                type P2P-device
                txpower 31.00 dBm
        Interface wlan1 //热点 节点
                ifindex 17
                wdev 0x2
                addr d2:4e:71:f2:ce:56
                ssid AndroidAP_1026 //热点名称
                type AP
                channel 157 (5785 MHz), width: 80 MHz, center1: 5775 MHz
                txpower 31.00 dBm
        Interface wlan0 //wifi节点
                ifindex 16
                wdev 0x1
                addr c0:f5:35:4f:a3:e0
                ssid xm5G //wifi已连接的名称
                type managed
                channel 157 (5785 MHz), width: 80 MHz, center1: 5775 MHz
                txpower 31.00 dBm
console:/ # sched_stop 

这个命令我也不熟悉,是最近几天通过驱动底层开发人员一起调试设备了解到的命令。

(2)通过wifi节点搜索wifi列表

比如搜索wifi列表, iw wlan0 scan | grep SSID:

console:/ # iw wlan0 scan | grep SSID
        SSID: 
        SSID: syrj_5G
                 * SSID List
        SSID: B-LINK-5G_EE7180
        SSID: xm5G
        SSID: ktceb-vpn-5G
        SSID: VPN_5G
        SSID: SYEBSW-5G
        SSID: syrj
                 * SSID List
        SSID: ktceb-vpn-2.4G
        SSID: 
        SSID: SYEBSW-2.4G
console:/ # 

如果没有grep SSID会看到很多打印,比如每个wifi的加密情况和其他配置信息。

实际开发调试中系统有出现过上层接口无法打开wifi的情况(原因:上层调用IWifi接口卡死),

但是强制up打开 wlan0 后,是直接可以使用iw wlan0 命令搜索到wifi 列表,

说明内核是正常加载的,后面发现是binder IWifi异常了,是hardware 层的服务无法连接,

并不是WifiManager到WifiService的 binder异常,

底层适配修改了 usb_inotify 、ko驱动和相关加载逻辑进行解决。

(3)iw dev 主要命令
iw 命令后面加上不同的参数,例如:

iw dev interface add 用于添加一个新的接口

iw dev del 用于删除一个接口

iw dev scan 用于扫描可用的无线网络

iw dev support 用于查看设备支持的参数

dev 表示不同的节点名称,比我wifi的 wlan0

请注意,某些命令可能需要root权限才能运行。

常用的就是:iw dev del,iw dev scan ,其他命令简单执行了一下,发现返回的提示数据非常多,有点看不懂。

5、adb简介及常用命令总结

1、启动adb:adb start-server;adb shell start 包名/类名 启动应用
2、查看已经连接的设备:adb devices
3、adb logcat: 打印log信息
4、发送文件到设备:adb push
5、下载文件到电脑:adb pull 手机文件路径 电脑目标路径
6、截屏命令:adb shell screencap /sdcard/screen.png
传出到本地:adb pull /sdcard/screen.png
7、杀死adb:adb kill-server
8、adb连接:adb connect ...(ip地址)
9、adb 命令控制:adb shell
10、adb connect/disconnect:通过wifi远程连接手机调试.
11、adb shell am:am即activity manager.
备注:该命令用来执行一些系统动作, 例如启动指定activity, 结束进程, 发送广播, 更改屏幕属性等

12、 adb root:以root身份重新进入adb

13、adb remount刷新文件系统

14、adb pull sdcard/bk100 c:/ 取出bk100文件夹下面的所有文件到c盘根目录

15、adb push c:/log.txt sdcard/ 将c盘下的log文件复制到sdcard根目录

16、adb shell am force-stop 包名 停止应用

17、adb shell am kill 包名 停止应用并杀死进程

18、adb install c:/a.apk安装a.apk到设备

19、adb uninstall 包名 卸载应用

20、adb shell input tap 100,200 点击屏幕x,y坐标

21、adb shell input swipe 250 250 300 300 滑动操作

22、adb shell input keyevent 3 模拟按键,比如home键的keycode=3,back键的keycode=4

23、studio 连接不上夜神模拟器解决方法:进入夜神bin目录------M:\Program Files (x86)\Nox\bin------执行如下命令:
nox_adb.exe connect 127.0.0.1:62001

adb简介及常用命令总结详解:

https://blog.csdn.net/wenzhi20102321/article/details/113487927

相关推荐
H1001 小时前
Kotlin中对空的很多处理
android·开发语言·kotlin
松仔log1 小时前
Kotlin基础——异步和并发
android·开发语言·kotlin
H1002 小时前
Kotlin中的关键字
android·kotlin
苏呆仔3 小时前
如何使用PHP根据输入文字动态调整图片尺寸?
android·开发语言·php
花生君5 小时前
如何在Android Studio中查看APP客户端日志
android·ide·android studio
大浪淘沙10249 小时前
动态校验列表数据方案
android·数据库
霸道流氓气质10 小时前
Mysql中视图的使用以及常见运算符的使用示例和优先级
android·mysql·adb
snwrking10 小时前
各个版本Android上的Location与Notification权限的问题
android·flutter
longlongqin13 小时前
MySQL调优
android·数据库·mysql
devlei13 小时前
探索Koin框架:简单、灵活的依赖注入解决方案
android