环境说明:win7系统
前言
平常通过电脑连接真机设备,可以正常连接,没有问题,一直没有连接过模拟器,今天因为需要用到root权限,而模拟器默认开启root 权限的,所以尝试连接模拟器,但是出现了问题,如下:
提示:显示adb server的版本号和当前的客户端不匹配,且查看设备时是没有设备号的,那么下一步操作也就无法进行
一、adb无法连接夜神模拟器处理过程
1.adb无法连接夜神模拟器,基础配置
百度找到解决办法:即夜神模拟器也要配置环境变量 ,具体过程如下:
(1)关闭所有的adb进程(如何通过命令行关闭进程见1.2节)
(2)找到sdk的adb.exe文件并复制
$where adbE:\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连接,验证是否成功,我的成功了,就显示如下:
配置过程参考地址:/cz9025/article/details/78665223
2.关闭进程,重启服务
来说说如何关闭进程,首先需要知道:adb服务默认的占用端口是5037
1.2.1根据端口号查看当前的进程号
$netstat -ano|grep '5037'TCP127.0.0.1:50370.0.0.0:0LISTENING13232
#LISTENING:表示在监听
#13232:这是进程号
1.2.2查看进程对应的是不是adb程序
$ tasklist |findstr "13232"adb.exe13232 Console117,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, neRUNNING |NOT RESPONDING | UNKNOWNIMAGENAMEeq, 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 - 秒MEMUSAGEeq, ne, gt, lt, ge, le 内存使用量,单位为 KBUSERNAMEeq, ne用户名,格式为 [domain\]userMODULES eq, neDLL 名称SERVICESeq, ne服务名称WINDOWTITLE eq, ne窗口标题说明----1) 只有在应用筛选器的情况下,/IM 切换才能使用通配符 '*'。2) 远程进程总是要强行 (/F) 终止。3) 当指定远程机器时,不支持 "WINDOWTITLE" 和 "STATUS" 筛选器。例如:TASKKILL /IM notepad.exeTASKKILL /PID 1230 /PID 1241 /PID 1253 /TTASKKILL /F /IM cmd.exe /TTASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exeTASKKILL /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 电脑存储路径手机存储路径