adb的常见操作和命令

        最近学习adb的时候,整理了一些adb的使用场景,如:adb与设备交互,adb的安装、卸载,adb命令启动,通过命令清除缓存,文件传输和日志操作。

        adb的两大作用:在app测试的时候可以提供监控日志方便定位问题,可以进行自动化很多,很多软件可以进行自动化测试都是对adb进行了封装和调用。

1.adb与设备交互

        我们在测试app的时候,可以选择真机,也可以选择在模拟器上进行测试,模拟器给我们提供了更大的可选择范围,常用的模拟器如下:

  • Android Studio emulator(官方)
  • Genymotion(依赖网络)
  • mumu,雷电,夜神,逍遥等第三方模拟器(强烈推荐)

1.1.adb连接手机设备

1.1.1.连接模拟器

        在这里我们以MuMu模拟器为例来进行连接,在windows上和mac电脑上会有所不同。

        windows:

adb connect 127.0.0.1:7555    #MuMu的端口是7555,其它模拟器的端口可以看各自官网。

         Mac:

adb kill-server    #杀掉之后会自动重启然后连接
1.1.2.连接真机

        手机通过usb线连接到电脑上,然后手机开启调试模式,在电脑端安装手机驱动。

1.2.adb查看设备状态

1.2.1.查看状态命令

        可以通过以下两个命令来查看设备的连接状态。

        命令一:

adb devices

        命令二:

adb get-state

1.2.2.设备状态分类:
  • device 正常
  • offline 连接出现异常,设备无响应
  • unauthorized 未授权

2.adb安装卸载应用

2.1.安装

        普通安装,命令:adb install <apk路径>,安装包可以在app官网下载或者通过豌豆荚等第三方助手来下载。

        比如安装微信:

覆盖安装,命令:adb install -r <apk路径>,覆盖安装会将之前的进行覆盖。

2.2.卸载

2.2.1.卸载命令

卸载应用命令:

adb uninstall 包名

卸载应用(不删除配置文件,保存数据缓存信息),命令:

adb uninstall -k 包名

2.2.2.查看包名

方式一:

        卸载app需要知道app的包名,可以通过如下命令来获得。

adb shell
cd /data/data
ls

        执行ls命令的时候系统可能会提示:opendir failed, Permission denied

        解决方法:在模拟机上开启root权限,然后执行su命令后再进入data/data目录然后执行ls命令。

方式二:

        如果安装的是第三方应用可以通过这个命令进行查看。

adb shell pm list packages -3

3.adb命令启动页面

3.1.获取页面的activity

3.1.1.已打开页面

        命令:

adb shell "dumpsys window | grep mCurrentFocus"

        如打开的微信页面,然后执行命令可以获取当前页面的名称

3.1.2.动态启动页

        动态启动页面可能有多个activity但是实际上只有一个是可用的,直接从当前已打开页面获取的不一定保真,可以通过下面命令获取到所有的,然后进行尝试。

        命令:

win:adb logcat ActivityManager:I | findstr "cmp"
mac:adb logcat ActivityManager:I | grep "cmp"

        例如进入微信注册页面。

3.2.启动页面

        命令:

adb shell am start -n <包名>/<avticity名>

        比如自动打开微信注册页面,使用上面获取到的avticity。

adb shell am start -n "com.tencent.mm/.plugin.account.ui.RegByMobileRegAIOUI"

启动命令报错:

C:\Users\29442>adb shell am start -n "com.tencent.mm/com.tencent.mm.plugin.account.ui.RegByMobileRegAIOUI"
Starting: Intent { cmp=com.tencent.mm/.plugin.account.ui.RegByMobileRegAIOUI }
java.lang.SecurityException: Permission Denial: starting Intent { flg=0x10000000 cmp=com.tencent.mm/.plugin.account.ui.RegByMobileRegAIOUI } from null (pid=3579, uid=2000) not exported from uid 10035
        at android.os.Parcel.readException(Parcel.java:1620)
        at android.os.Parcel.readException(Parcel.java:1573)
        at android.app.ActivityManagerProxy.startActivityAsUser(ActivityManagerNative.java:2726)
        at com.android.commands.am.Am.runStart(Am.java:875)
        at com.android.commands.am.Am.onRun(Am.java:359)
        at com.android.internal.os.BaseCommand.run(BaseCommand.java:47)
        at com.android.commands.am.Am.main(Am.java:100)
        at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
        at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:259)

        解决方法:

adb root
adb shell am start -n "com.tencent.mm/com.tencent.mm.plugin.account.ui.RegByMobileRegAIOUI"

4.adb命令清除缓存

adb shell pm clear <包名>

5.adb文件传输

  • adb push 电脑路径 设备路径
  • adb pull 设备路径 电脑路径

6.adb日志操作

        命令:

adb logcat

        查看日志常用的参数:

  • adb logcat   打印默认日志数据
  • adb logcat -v time 打印时间
  • adb logcat -v color 使用不同的颜色来显示每个优先级
  • adb logcat -f <filename> 将日志输出到文件
  • adb logcat > log.log 保存日志到PC上
  • adb logcat -c 清理已存在的日志

本帖最后由 591691826 于 2013-4-10 13:32 编辑 0.我只说些常用的以及目前用的到的 1.下载附件。解压后拷到c:windows\system32里面。 2.打开运行(快捷键windows键+R)输入cmd 回车。 3.输入adb devices 可以获取当前连接的设备。 4.输入adb shell 回车 接着输入su。这时候$变成#。说明你已经取得权限了,可以进行各项调试命令了。 5.如果要从电脑上传送文件到手机的话,使用adb push命令。格式:adb push 本地路径 手机路径 ;举例:把c盘根目录下的456.txt传送到system。则:adb push c:\456.txt /system/ 传送文件到system文件夹的话。需要先挂载system分区。再改读写权限。 如下:mount -o rw,remount -t yaffs2 /dev/block/mtdblock1 /system回车 (这是挂载分区) chmod 777 /system回车 (修改权限为可读) 这两步做完后退出shell指令端(exit回车 exit回车)就可以push文件到system里面去了。 如果push文件到sdcard卡的话。一般来说直接push就行。如果出现premission denied 的话,需要修改sdcard权限为可读写。即chmod 777 sdcard。 6。adb pull 是从手机传送文件到电脑上。格式: adb pull 手机路径 电脑路径 。会push的话pull很简单。大同小异嘛。 7.关于这个地方的权限,具体说下: 在UnixLinux的各种操作系统下,每个文件(文件夹也被看作是文件)都按读、写、运行设定权限。例如我用ls -l命令列文件表时,得到如下输出: -rw-r--r-- 1 bu users 2254 2006-05-20 13:47 tt.htm 从第二个字符起rw-是说用户bu有读、写权,没有运行权,接着的r--表示用户组users只有读权限,没有运行权,最后的r--指其他人(others)只有读权限,没有写权运行权。这是系统默认设置,我可以改写tt.htm,同组的人其他人只有权读,没人有权运行,因为只是一个html文件,不必运行。这在Novell的directory services之前很先进。 读、写、运行三项权限可以用数字表示,就是r=4,w=2,x=1。所以,rw-r--r--用数字表示成644。 反过来说777就是rwxrwxrwx,意思是该登录用户(可以用命令id查看)、他所在的组其他人都有最高权限。 再多说一句。我用chmod o-r tt.htm命令改权限,o-r是others的权限中减掉读。结果是 -rw-r----- 1 bu users 2254 2006-05-20 13:47 tt.htm 如果用命令chmod 777 tt.htm,结果是 -rwxrwxrwx 1 bu users 2254 2006-05-20 13:47 tt.htm 任何人都有读、写、运行三项权限。8。以后比如替换系统文件神马的不能开机。可以通过救援模式下adb命令替换系统文件并该权限即可。 .想写的就是这么多了。仅把我的心得告诉大家。内容编辑可能有些混乱。不好意思。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值