夏雨初晴 發表於 2021-1-2 17:07:00

Android ADB原理及常用命令

<p>Android调试桥(ADB, Android Debug Bridge)是一个Android命令行工具,包含在SDK 平台工具包中,adb可以用于连接Android设备,或者模拟器,实现对设备的控制,比如安装和调试应用。和Appium一样,adb也是基于C/S架构实现的。</p>
<p></p><div class="toc"><div class="toc-container-header">目录</div><ul><li>一、ADB运行原理</li><li>二、ADB安装</li><li>三、ADB常用命令<ul><li>1. adb server启动和连接</li><li>2. adb常用命令</li><li>3. 查看appPackage和appActivity</li><li>4. adb 模拟控制手机<ul><li>拉起、停止Activity</li><li>模拟按键</li><li>文本框输入</li><li>点击</li><li>滑动</li></ul></li><li>5. adb文件管理(同Linux)<ul><li>目录操作</li><li>文件操作(同Linux)</li><li>退出</li><li>手机和电脑文件传输</li></ul></li><li>6. 其它实用功能<ul><li>屏幕截图</li><li>录制屏幕</li><li>联网</li><li>切换飞行模式</li><li>svc命令</li><li>安卓busybox</li><li>wpa_spplicant</li></ul></li></ul></li><li>四、Python获取ADB返回结果</li><li>五、常见问题</li></ul></div><p></p>
<h1 id="一adb运行原理">一、ADB运行原理</h1>
<p>adb分为三个部分:PC上的adb client,adb server和手机(也可能是PC上的模拟器)上的adb daemon。这是一个<strong>多多连接</strong>的设计。即一台PC可以连接多个手机,一台手机也可以连接多个PC。</p>
<div align="center">
<img src="https://img2020.cnblogs.com/blog/2229336/202012/2229336-20201220132302933-357914074.jpg">
</div>
<ol>
<li><strong>Client本质上就是Shell</strong>,用来发送命令给<strong>Server</strong>。发送命令时,首先检测PC上有没有启动Server,如果没有Server,则自动启动一个Server,绑定 TCP 的 5037 端口,然后将命令发送到Server,并不关心命令发送过去以后会怎样。</li>
<li><strong>ADB Server</strong>:运行在PC上的后台程序,目的是检测USB接口何时连接或者移除设备。ADB Server维护着一个“已连接的设备的链表”,并且为每一个设备标记了一个状态:<strong>offline,bootloader,recovery或者online</strong>;Server一直在做一些循环和等待,,监听从 clients 发来的命令,协调client和Server还有daemon之间的通信。</li>
<li><strong>ADB Daemon</strong>:程序“adbd”作为一个<strong>后台进程</strong>在Android设备或模拟器系统中运行。它的作用是<u>连接ADB服务器</u>,并且为运行在主机上的客户端提供一些服务;</li>
</ol>
<p>Client和Server之间通过<strong>TCP/IP</strong>通信,Server侦听本机的<strong>5037端口</strong>,Client试图去连接这个端口。基于ADB的工具有 DDMS 、monkey 测试等</p>
<ul>
<li>adb源码:https://android.googlesource.com/platform/system/core/+/refs/heads/android10-c2f2-release/adb/</li>
</ul>
<pre><code class="language-shell">netstat -nao | findstr 5037
</code></pre>
<div align="center">
<img src="https://img2020.cnblogs.com/blog/2229336/202012/2229336-20201220132329710-1838273749.jpg">
</div>
<h1 id="二adb安装">二、ADB安装</h1>
<p><code>adb</code> 包含在 Android SDK 平台工具软件包中,有两种方法安装adb工具:</p>
<ol>
<li>使用SDK Manager安装,会安装到 <code>platform-tools</code> 目录下。具体安装方法可参考Appium 介绍及环境安装中的<strong>安装Android SDK</strong>部分。</li>
<li>单独下载平台工具,下载地址:https://developer.android.com/studio/releases/platform-tools。下载完成后解压,添加到环境变量即可。</li>
</ol>
<p>查看是否安装成功:</p>
<pre><code class="language-bash">$ adb --version
Android Debug Bridge version 1.0.40
Version 4986621
Installed as D:\android-sdk-windows\platform-tools\adb.exe
</code></pre>
<h1 id="三adb常用命令">三、ADB常用命令</h1>
<h2 id="1-adb-server启动和连接">1. adb server启动和连接</h2>
<ul>
<li>启动 adb server<pre><code class="language-shell">adb start-server
</code></pre>
</li>
<li>停止 adb server<pre><code class="language-shell">adb kill-server
</code></pre>
</li>
<li>指定 adb server 的网络端口&lt;adb默认端口为5037&gt;<pre><code class="language-shell">adb -P &lt;port&gt; start-server
</code></pre>
</li>
</ul>
<p>在发送adb命令时,如果没有pc没有启动Server,则会自动启动一个Server,然后将命令发送到Server。</p>
<ul>
<li>通过adb usb打开设备上的tcpip服务并绑定一个端口<pre><code class="language-shell">adb tcpip 5555
adb -s 611DKBQC22SH2 tcpip 5555&nbsp;&nbsp;# 设备在 5555 端口监听 TCP/IP 连接
</code></pre>
</li>
</ul>
<p>无线连接要将 Android 设备与将运行 adb 的电脑连接到<strong>同一个局域网</strong></p>
<ul>
<li>
<p>ADB Client通过命令adb connect ip连接远程的终端</p>
<pre><code class="language-bash">adb connect 127.0.0.1:62001 #夜游神模拟器
adb connect 127.0.0.1:7555 #网易mumu模拟器
adb disconnect &lt;device-ip-address&gt; # 断开连接
</code></pre>
</li>
</ul>
<p><strong>USB连接</strong><br>
开启Android 设备的开发者选项和 USB 调试模式</p>
<h2 id="2-adb常用命令">2. adb常用命令</h2>
<p>以 root 权限运行 adbd</p>
<pre><code class="language-shell">adb root&nbsp;
adb -s 611DKBQC22SH2 root
</code></pre>
<p>查看 adb 版本</p>
<pre><code class="language-shell">adb version
</code></pre>
<p>查看设备名称</p>
<pre><code class="language-shell">adb devices
</code></pre>
<p>重启手机</p>
<pre><code class="language-shell">adb reboot
</code></pre>
<p>安装卸载apk包<br>
模拟器可以直接把安装包拖入模拟器进行安装</p>
<p>adb安装卸载方法:</p>
<pre><code class="language-bash"># 卸载
adb uninstall 包名
# 安装
adb install app.apk
adb install -r app.apk # 强制安装
</code></pre>
<p>打印手机日志</p>
<pre><code class="language-bash">adb logcat | findstr -i displayed # 打印手机日志
</code></pre>
<h2 id="3-查看apppackage和appactivity">3. 查看appPackage和appActivity</h2>
<p>测试某个APP时,通常是先拉起这个APP,需要知道APP包名appPackage,appium启动APP时还需要知道APP某个页面的activity名称appActivity,可以通过adb命令来获取。</p>
<p>获取所有活动</p>
<pre><code class="language-bash">adb shell dumpsys activity | grep tencent # linux
adb shell dumpsys activity | findstr tencent # windows
</code></pre>
<p>或者先进入shell环境:</p>
<pre><code class="language-bash">$ adb shell
root@shamu:/ # dumpsys activity | grep tencent
</code></pre>
<p>获取当前APP的Package和Activity名:</p>
<pre><code class="language-bash">adb shell dumpsys activity activities | findstr mResumedActivity
</code></pre>
<p>例如,打开微信(android 10):</p>
<pre><code class="language-bash">$ adb shell dumpsys activity activities | findstr mResumedActivity
    mResumedActivity: ActivityRecord{3a7bec6 u0 com.tencent.mm/.ui.LauncherUI t50558}
</code></pre>
<p>获取最顶层的activity,也可用来获取当前打开应用的Package和Activity名。</p>
<pre><code class="language-bash">adb shell dumpsys activity top
</code></pre>
<p>上面的命令会打印大量日志信息,需要过滤一下:</p>
<pre><code class="language-bash">adb shell dumpsys activity | findstr mFocusedActivity
adb shell dumpsys window windows|findstr "mCurrentFocus"
</code></pre>
<p>如果是Android 8.0及以上的版本,上面的命令可能不能获取到任何信息,因为没有 <code>mFocusedActivity</code> 和<code>mCurrentFocus</code> 字符。可使用如下命令:</p>
<pre><code class="language-bash">adb shell dumpsys activity top | findstr "ACTIVITY"
</code></pre>
<p>返回结果中的最后一行就是当前应用,先打开微信(Android 10),执行如下命令:</p>
<pre><code class="language-bash">adb shell dumpsys activity top | findstr "ACTIVITY"
ACTIVITY com.eg.android.AlipayGphone/.AlipayLogin 39a2048 pid=32182
ACTIVITY com.tencent.mobileqq/.activity.SplashActivity 3984ac6 pid=(not running)
ACTIVITY com.android.contacts/.activities.ContactDetailActivity 393a983 pid=(not running)
ACTIVITY tv.danmaku.bili/.MainActivityV2 3a7bf44 pid=19466
ACTIVITY com.android.email/.activity.Welcome 3c09b05 pid=29831
ACTIVITY com.tencent.mp/.feature.main.ui.MainActivity 39e2448 pid=4217
ACTIVITY com.huawei.browser/.BrowserMainActivity 3a13583 pid=15562
ACTIVITY com.yinxiang/.main.activity.MainActivity 32faf05 pid=5081
ACTIVITY com.huawei.android.launcher/.unihome.UniHomeLauncher 3906ac6 pid=3143
ACTIVITY com.tencent.mm/.ui.LauncherUI 3a7bec6 pid=30547
</code></pre>
<p>也可以使用aapt2工具来获取APP的包名,它也是Android SDK 平台工具软件包中的工具,是一款Android 资源打包工具,可使用如下命令获取apk文件包名:</p>
<pre><code class="language-bash">$ aapt2 dump badging apk文件名.apk
</code></pre>
<p>示例(东方财富APP):</p>
<pre><code class="language-bash">$ aapt2 dump badging dfcf_0005564.apk
package: name='com.eastmoney.android.berlin' versionCode='10003000' versionName='10.3' platformBuildVersionName='' platformBuildVersionCode='' compileSdkVersion='29' compileSdkVersionCodename='10'
sdkVersion:'16'
targetSdkVersion:'28'
.................
</code></pre>
<p>查看应用列表</p>
<pre><code class="language-bash">adb shell pm list packages #所有应用列表
adb shell pm list packages -s # 系统应用
adb shell pm list packages -3 # 第三方应用
adb shell pm list packages smart # 包名包含smart字符串的应用
</code></pre>
<h2 id="4-adb-模拟控制手机">4. adb 模拟控制手机</h2>
<h3 id="拉起停止activity">拉起、停止Activity</h3>
<p>adb shell am start <intent> :调起 Activity<br>
adb shell am force-stop <packagename> : 强制停止应用</packagename></intent></p>
<pre><code class="language-bash">adb shell am start -n com.tenda.smarthome.app/.activity.main.MainActivity # 打开smarthome APP
adb shell am force-stop com.tenda.smarthome.app&nbsp;# 强制停止应用
adb shell pm clear &lt;packagename&gt;&nbsp;&nbsp;# 清除应用数据与缓存
adb shell am start -a android.intent.action.VIEW -d https://www.baidu.com # 打开网页
</code></pre>
<h3 id="模拟按键">模拟按键</h3>
<p>adb shell input keyevent <keycode>&nbsp;模拟按键</keycode></p>
<pre><code class="language-bash">adb shell input keyevent 3 # 按下HOME 键
adb shell input keyevent 4 # 按下返回键

adb shell input keyevent 26 # 按下电源键
adb shell input keyevent 82 # 按下菜单键

adb shell input keyevent 223 # 熄灭屏幕
adb shell input keyevent 224 # 点亮屏幕

adb shell input keyevent 67&nbsp;# 删除
</code></pre>
<h3 id="文本框输入">文本框输入</h3>
<pre><code class="language-bash">adb shell input text "text"&nbsp;# 向文本框中输入文字,不支持中文
</code></pre>
<h3 id="点击">点击</h3>
<pre><code class="language-bash">adb shell input tap 458 573&nbsp;根据坐标点击
</code></pre>
<h3 id="滑动">滑动</h3>
<p>adb shell input swipe&nbsp;<x1> <y1> <x2> <y2> x:屏幕左到右 y:从上到下&nbsp; &nbsp; &nbsp;左上角为0点-<strong>图像坐标系</strong></y2></x2></y1></x1></p>
<pre><code class="language-bash">adb shell input swipe 550 1200 550 375&nbsp;# 滑动解锁
adb shell input swipe 700 200 100 200&nbsp;# 左翻页
adb shell input swipe 100 200 1000 200&nbsp;# 右翻页
</code></pre>
<h2 id="5-adb文件管理同linux">5. adb文件管理(同Linux)</h2>
<h3 id="目录操作">目录操作</h3>
<pre><code class="language-bash">C:\Users\DELL&gt;adb shell
root@M5:/data # su&nbsp;&nbsp;提取到root权限,显示井号即可
su
root@M5:/ # ls
ls
@btmtk
acdapi
adb
agps_supl
...
root@M5:/data # ls -l
ls -l
drwxrwx--- bluetooth net_bt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2019-03-01 14:26 @btmtk
drwxrwx--- system&nbsp;&nbsp;&nbsp;system&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2019-03-01 14:26 acdapi
drwx------ root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2019-03-01 14:26 adb
drwxrwx--x gps&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2019-07-19 10:49 agps_supl
drwxrwx--- system&nbsp;&nbsp;&nbsp;system&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2019-03-01 14:26 amit
drwxrwxr-x system&nbsp;&nbsp;&nbsp;system&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2019-07-22 09:13 anr
drwxrwx--x system&nbsp;&nbsp;&nbsp;system&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2019-08-01 09:00 app
drwx------ root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2019-03-01 14:26 app-asec

root@M5:/data # pwd&nbsp; &nbsp;当前路径
pwd
/data

root@M5:/data/system # cd -&nbsp;切换到上次目录
cd -
/data
root@M5:/data # cd ..&nbsp;切换到上级目录
cd ..
2|root@M5:/ # cd d*a&nbsp;
cd d*a
root@M5:/data # cd s*m&nbsp;目录名较长时建议使用通配符"*",如cd到system目录
cd s*m
root@M5:/data/system #
</code></pre>
<h3 id="文件操作同linux">文件操作(同Linux)</h3>
<pre><code class="language-bash">rm -r crash # 删除文件夹及内容
rmdir # 文件夹&nbsp;删文件夹
rm # 文件 删文件
cat filename # cat,more less显示文件内容
cp /data/data/com.android.contacts/databases/contacts_app.db /mnt/sdcard/&nbsp;# 复制
mkdir&nbsp;# 创建目录
du # 显示目录空间大小
df&nbsp;# 显示磁盘空间大小
touch test.txt&nbsp;# 创建文件
ps&nbsp;# 显示进程
top&nbsp;# 动态显示进程状态
chmod 644&nbsp;# 改变权限
</code></pre>
<h3 id="退出">退出</h3>
<p>CTRL+C&nbsp;退出shell模式</p>
<pre><code class="language-bash">root@M5:/mnt/sdcard #&nbsp;^C
C:\Users\DELL&gt;d:
</code></pre>
<h3 id="手机和电脑文件传输">手机和电脑文件传输</h3>
<p>1、将手机文件pull到电脑</p>
<pre><code class="language-bash">D:\&gt;adb pull sdcard/cmcc_sso_config.dat&nbsp;&nbsp;# 将手机sdcard中的cmcc_sso_config.dat 文件copy到电脑D:根目录下
D:\&gt;adb pull sdcard/cmcc_sso_config.dat D:\adbtest
D:\&gt;
</code></pre>
<div align="center">
<img src="https://img2020.cnblogs.com/blog/2229336/202101/2229336-20210102170249509-1344276066.png">
</div>
<p>2、将电脑文件push到手机目录下</p>
<pre><code class="language-bash">D:\&gt;adb push D:/adbtest/cmcc_sso_config111.dat /sdcard/ # 将D:中的cmcc_sso_config111.dat copy到手机sdcard 文件夹下
D:\&gt;adb shell
root@M5:/ # cd /mnt/sdcard
cd /mnt/sdcard

root@M5:/mnt/sdcard # ls *cmcc_sso_config*
ls *cmcc_sso_config*
cmcc_sso_config.dat
cmcc_sso_config111.dat

root@M5:/mnt/sdcard # find /data -name "cmcc_sso_config*"
find /data -name "cmcc_sso_config*"
/data/media/0/cmcc_sso_config.dat
/data/media/0/cmcc_sso_config111.dat
</code></pre>
<h2 id="6-其它实用功能">6. 其它实用功能</h2>
<h3 id="屏幕截图">屏幕截图</h3>
<p>可使用 <code>screencap</code> 工具进行截图。下面介绍两种方法:</p>
<p>1、截图保存到SD卡里再导出</p>
<pre><code class="language-bash">D:\&gt;adb shell screencap -p /sdcard/screen.png
D:\&gt;adb pull /sdcard/screen.png
D:\&gt;adb shell rm /sdcard/screen.png
</code></pre>
<p>2、 <code>adb exec-out</code> 命令直接保存到PC</p>
<p>Android 5.0及之后的版本引入了shell V2协议,可直接使用 <code>adb exec-out</code> 命令将文件保存到PC:</p>
<pre><code class="language-bash">D:\&gt; adb exec-out screencap -p &gt; D:\adbtest\test.png
</code></pre>
<p>与第一种方式相比,<code>adb exec-out</code> 命令效率更高。</p>
<h3 id="录制屏幕">录制屏幕</h3>
<pre><code class="language-bash">D:\&gt;adb shell screenrecord /sdcard/filename22.mp4
D:\&gt;adb pull /sdcard/filename22.mp4
D:\&gt;adb shell rm /sdcard/filename22.mp4

D:\&gt;adb shell screenrecord&nbsp;&nbsp;--time-limit 10 /sdcard/demo.mp4
adb shell screenrecord --size 1280*720 /sdcard/demo.mp4
adb shell screenrecord --bit-rate 6000000 /sdcard/demo.mp4
</code></pre>
<h3 id="联网">联网</h3>
<pre><code class="language-bash">D:\&gt;adb shell svc wifi disable # 关闭WiFi
D:\&gt;adb shell svc wifi enable&nbsp;&nbsp;# 开启WiFi

D:\&gt;adb shell ping -w 3 8.8.8.8&nbsp; # &nbsp;查看是否能联网
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
--- 8.8.8.8 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms   
D:\&gt;adb shell cat /data/misc/wifi/*.conf&nbsp;&nbsp;# 查看连接过的 WiFi 密码
.....
device_name=meizu_M5
manufacturer=Meizu
model_name=M611D
model_number=M611D
serial_number=611DKBQC22SH2
device_type=10-0050F204-5
os_version=01020300
config_methods=physical_display virtual_push_button
p2p_no_group_iface=1
external_sim=1
wowlan_triggers=disconnect


network={
      ssid="Plug_C415"
      key_mgmt=NONE
      priority=1
      flag=1
}

network={
      ssid="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"
      key_mgmt=NONE
      priority=2
      flag=1
}

network={
      ssid="test"
      psk="12345678"
      key_mgmt=WPA-PSK
      priority=3
      flag=1
}
</code></pre>
<h3 id="切换飞行模式">切换飞行模式</h3>
<p>通过adb shell,输入命令,可以切换飞行模式<br>
开启飞行模式</p>
<pre><code class="language-bash">adb shell settings put global airplane_mode_on 1
adb shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true
</code></pre>
<p>关闭飞行模式</p>
<pre><code class="language-bash">adb shell settings put global airplane_mode_on 0
adb shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false
</code></pre>
<h3 id="svc命令">svc命令</h3>
<p>这个脚本在/system/bin目录下,可以用来控制电源管理,wifi开关,数据开关(就是上网流量)<br>
控制usb插入的时候屏幕是否常亮</p>
<pre><code class="language-bash">svc power stayon
</code></pre>
<p>关闭数据连接(上网流量),这个命令不会更改app的任何设置,直接在底层关闭数据连接。</p>
<pre><code class="language-bash">svc data disable
</code></pre>
<p>打开上网数据连接</p>
<pre><code class="language-bash">svc data enable
</code></pre>
<p>控制3g数据连接比wifi优先。</p>
<pre><code class="language-bash">svc data prefer
</code></pre>
<p>关闭wifi 连接</p>
<pre><code class="language-bash">svc wifi disable
</code></pre>
<p>开启wifi连接</p>
<pre><code class="language-bash">svc wifi enable
</code></pre>
<p>设置wifi优先</p>
<pre><code class="language-bash">svc wifi prefer
</code></pre>
<p>上面的命令都要在shell中执行,需要root。可以用script ,然后输入这些命令做成在快捷方式放在桌面,跟那些开关软件一样方便使用。</p>
<h3 id="安卓busybox">安卓busybox</h3>
<p>android busybox解决adbshell命令不全</p>
<p>安卓虽然是基于linux,但是精简了很多linux工具,很多常用的linux指令不能使用。busybox相当于一个打包的工具箱,打包了很多的常用的linux可执行文件和其依赖。安装了busybox你就可以在安卓下下载一个模拟终端然后在里面运行一些之前不能运行的指令。</p>
<h3 id="wpa_spplicant">wpa_spplicant</h3>
<p>wpa_supplicant本是开源项目源码,被谷歌修改后加入Android移动平台,它主要是用来支持WEP,WPA/WPA2和WAPI无线协议和加密认证的,控制漫游和无线驱动的IEEE 802.11 验证和关联。通过socket(不管是wpa_supplicant与上层还是wpa_supplicant与驱动都采用socket通讯)与驱动交互上报数据给用户,而用户可以通过socket发送命令给wpa_supplicant调动驱动来对WiFi芯片操作。 简单的说,wpa_supplicant就是WiFi驱动和用户的中转站外加对协议和加密认证的支持。</p>
<p>wpa_supplicant工具主要包含wpa_supplicant(命令行模式,属于服务端)与wpa_cli(交互模式,属于客户端)两个程序来达到无线认证连接。通过wpa_cli来进行WiFi的配置和连接,也可以直接调用wpa_supplicant接口实现网络控制。<br>
部分命令:</p>
<pre><code class="language-shell">wpa_cli -i wlan0 scan   \\扫描热点
wpa_cli -i wlan0 scan_result   \\打印热点信息
wpa_cli -i wlan0 set_network 0 ssid"wifi_name" \\配置WiFi热点的名称ssid
wpa_cli -i wlan0 set_network 0 psk '"12345678"' \\配置WiFi热点的密码psk
</code></pre>
<h1 id="四python获取adb返回结果">四、Python获取ADB返回结果</h1>
<pre><code class="language-python">cmd = "adb shell pm list packages smarthome"
result = os.popen(cmd)
f = result.read() #result只能读取一次
if "smarthome" in f:
    print(f)
</code></pre>
<p>ADB获取手机时间</p>
<pre><code class="language-python">def&nbsp;now_time_new(self):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;now_time_new&nbsp;=&nbsp;datetime.datetime.now().strftime('%H:%M')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;print&nbsp;"now_time_new",self.now_time_new
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;time_a=os.popen('adb&nbsp;shell&nbsp;date&nbsp;"+%Y-%m-%d+%H:%M:%S"')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;time_a=time_a.read()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;time_a=time_a.strip()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dates=time_a.split('+')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;times=time_a.split('+')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(dates,times)
</code></pre>
<h1 id="五常见问题">五、常见问题</h1>
<p>没有运行模拟器,而<code>adb devices</code>显示多余的设备emulator-5576</p>
<pre><code class="language-sh">C:\Users\DELL&gt;adb devices
List of devices attached
emulator-5576   offline
611DKBQC22SH2   device
</code></pre>
<p>解决方法:<br>
运行<code>adb kill-server</code></p>
<pre><code class="language-sh">C:\Users\DELL&gt;adb kill-server

C:\Users\DELL&gt;adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
611DKBQC22SH2   device
</code></pre>
<center><b>--THE END--<b></b></b></center><b><b>
<blockquote>
<p>欢迎关注公众号:「测试开发小记」及时接收最新技术文章!</p>
</blockquote>
</b></b><br><br>
来源:https://www.cnblogs.com/hiyong/p/14163307.html
頁: [1]
查看完整版本: Android ADB原理及常用命令