环境说明:win7系统
前言
平常通过电脑连接真机设备,可以正常连接,没有问题,一直没有连接过模拟器,今天因为需要用到root权限,而模拟器默认开启root 权限的,所以尝试连接模拟器,但是出现了问题,如下:
提示:显示adb server的版本号和当前的客户端不匹配,且查看设备时是没有设备号的,那么下一步操作也就无法进行
一、adb无法连接夜神模拟器处理过程
1.adb无法连接夜神模拟器,基础配置
百度找到解决办法:即夜神模拟器也要配置环境变量 ,具体过程如下:
(1)关闭所有的adb进程(如何通过命令行关闭进程见1.2节)
(2)找到sdk的adb.exe文件并复制
$where adb
E:\SDK\platform-tools\adb.exe
(3)进入到夜神模拟器的bin目录,粘贴复制的adb.exe
提示:夜神模拟器bin目录下有两个adb文件:adb.exe和nox_adb.exe,复制过去的sdk\adb.exe是去替换nox_adb.exe的,所以当出现粘贴的adb.exe与原有的adb.exe产生冲突时,那么需要保留两个adb.exe,然后将复制过来的adb.exe更名为:nox_adb.exe,删除掉之前的nox_adb.exe,完成替换
(4)配置完成,重启模拟器
(5)再次adb devices连接,验证是否成功,我的成功了,就显示如下:
配置过程参考地址:https://blog.csdn.net/cz9025/article/details/78665223
2.关闭进程,重启服务
来说说如何关闭进程,首先需要知道:adb服务默认的占用端口是5037
1.2.1根据端口号查看当前的进程号
$netstat -ano|grep '5037'
TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 13232
#LISTENING:表示在监听
#13232:这是进程号
1.2.2查看进程对应的是不是adb程序
$ tasklist |findstr "13232"
adb.exe 13232 Console 1 17,932 K
#第一列显示为:adb.exe,即就是adb的进程
#tip1:windows 下查看进程的命令:tasklist;Linux下查看进程命令是ps
#tip2:tasklist查看所有进程,tasklist|findstr "pid_number"查找对应进程的信息
1.2.3杀掉进程
杀掉进程可以选择两种方式:
方式1:打开任务管理器(Ctr+Alt+Delete),找到进程号:13232,点击该进程,结束进程
方式2:通过命令行的方式:taskkill
taskkill的具体用法详见:taskkill /?
$taskkill /?
TASKKILL [/S system [/U username [/P [password]]]]
{ [/FI filter] [/PID processid | /IM imagename] } [/T] [/F]
描述:
使用该工具按照进程 ID (PID) 或映像名称终止任务。
参数列表:
/S system 指定要连接的远程系统。
/U [domain\]user 指定应该在哪个用户上下文执行这个命令。
/P [password] 为提供的用户上下文指定密码。如果忽略,提示
输入。
/FI filter 应用筛选器以选择一组任务。
允许使用 "*"。例如,映像名称 eq acme*
/PID processid 指定要终止的进程的 PID。
使用 TaskList 取得 PID。
/IM imagename 指定要终止的进程的映像名称。通配符 '*'可用来
指定所有任务或映像名称。
/T 终止指定的进程和由它启用的子进程。
/F 指定强制终止进程。
/? 显示帮助消息。
筛选器:
筛选器名 有效运算符 有效值
----------- --------------- -------------------------
STATUS eq, ne RUNNING |
NOT RESPONDING | UNKNOWN
IMAGENAME eq, ne 映像名称
PID eq, ne, gt, lt, ge, le PID 值
SESSION eq, ne, gt, lt, ge, le 会话编号。
CPUTIME eq, ne, gt, lt, ge, le CPU 时间,格式为
hh:mm:ss。
hh - 时,
mm - 分,ss - 秒
MEMUSAGE eq, ne, gt, lt, ge, le 内存使用量,单位为 KB
USERNAME eq, ne 用户名,格式为 [domain\]user
MODULES eq, ne DLL 名称
SERVICES eq, ne 服务名称
WINDOWTITLE eq, ne 窗口标题
说明
----
1) 只有在应用筛选器的情况下,/IM 切换才能使用通配符 '*'。
2) 远程进程总是要强行 (/F) 终止。
3) 当指定远程机器时,不支持 "WINDOWTITLE" 和 "STATUS" 筛选器。
例如:
TASKKILL /IM notepad.exe
TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
TASKKILL /F /IM cmd.exe /T
TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"
TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe
TASKKILL /S system /U domain\username /FI "USERNAME ne NT*" /IM *
TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*"
taskkill也可以通过两种种方法杀掉指定进程:
(1)通过映像名称杀掉进程
$taskkill /im im_name -f
#im_name(映像名称)就是通过tasklist命令返回数据的第一列:adb.exe,详细可看下图
(2)通过进程号杀掉进程
$taskkill /pid pid_number -f
#pid_number就是通过netstat查看5037端口对应的进程号,可以通过tasklist再确认一下是不是adb的进程,再决定是否执行taskkill
温馨提示:
通过实践发现,如果不加强制终止:-f的参数,进程可能杀不死:
A:未加-f参数
B:加了-f参数
二、传输文件
需求是需要从手机中和电脑之间传输文件,adb提供了两个方法:adb pull 和push
(1)adb pull :从手机复制文件至电脑
#格式为:
$adb pull 手机存储路径 电脑存储路径
那么在执行此命令之前,首先需要连接上手机,知道要复制的文件存储路径是什么,所以完整步骤可参考以下:
-
$adb shell:进入到手机系统
-
$cd,ls:等来切换目录,找到你需要传输文件的地址
-
$pwd:通过pwd查看当前所在目录的地址,复制下来
-
$exit:然后退出,执行adb pull
执行成功如下:
(2)adb push :从电脑复制至手机
#格式为:
$adb push 电脑存储路径 手机存储路径