前言

Android开发中我们有时候需要借助一些命令帮助更好的高效率定位解决问题,本文就来介绍一些可能有些隐藏的而却非常好用的命令,可以帮我们快速找到问题,这些命令都是本人在开发中实践总结,个人觉得非常实用,所以可能对于你不是很有用,但是了解也是很好的,而Android中的命令很多的,有些个人觉得没多大用就不在这里提了,好了,下面就开始命令的分析总结。

文章目录

  • 前言
  • 基础命令
  • 常用的非shell命令
  • 常用的shell命令
  • 操作apk命令
  • 进程相关命令
  • 注意:
  • 总结
基础命令

在说这些命令之前,得先提及一些基本命令用法:

第一个:cat命令

主要用于查看文件内容,这个命令的重要性不言而喻,有时候我们想查看文件信息,当然可以借助软件查看,但是这个命令非常便捷,更重要的是他可以结合grep进行过滤内容信息。

记住一点:Linux中过滤用grep,Windows过滤用findstr就可以了。

第二个:echo/touch命令

cat命令用于查看文件,echo和touch命令就可以方便的写文件

下面看一下这两个命令的结合使用:

这里可以看到用echo和touch写内容到文件中,然后在cat读取文件信息,这里还用到了内容重定向符号’>‘和’>>’;关于这两个符号也是非常有用的,有时候我们在执行一条命令的时候可能输出结果非常多,那么这时候就需要借助重定向把结果输出到文本中即可。后面介绍命令会说到这点。

常用的非shell命令

在常用命令中,我们会区分非shell命令和shell命令,当然区分的有点不合常规,但是为了好理解,这里就是把需要提前adb shell一下运行的命令叫做shell命令,直接adb shell运行命令的叫做非shell命令。

1、adb shell dumpsys activity top

说明:

​ 可以查看当前应用的activity信息

用法:

​ 运行需要查看的应用,然后运行此命令即可

案例: adb shell dumpsys activity top

延伸: 如果我们直接运行adb shell dumpsys也是可以的,只是会把当前系统中所有应用运行的四大组件都会打印出来,而这时候会发现打印的内容非常多,就需要借助之前说到的信息重定向了,我们可以这么做:

adb shell dumpsys > info.txt

这里还借助了Windows中的start命令,可以直接利用系统默认程序打开文本内容。而且需要注意的是,在以往我们逆向应用的时候,很多时候都用到这个命令来找到突破口的。

2、adb shell dumpsys package

说明:

​ 可以查看指定包名应用的详细信息(相当于应用的AndroidManifest.xml中的内容)

用法:

​ adb shell dumpsys package [pkgname]

案例:

​ adb shell dumpsys cn.wjdiankong.demo

这里看到就是相当于把应用的清单文件打印出来而已。

3、adb shell dumpsys meminfo

说明:

​ 可以查看指定进程名或者是进程id的内存信息

用法:

​ adb shell dumpsys meminfo [pname/pid]

案例:

​ adb shell dumpsys meminfo 11976

利用这个命令可以查看进程当前的内存情况,和下面的top命令可以结合利用分析应用的性能消耗情况。

4、adb shell dumpsys dbinfo

说明

​ 可以查看指定包名应用的数据库存储信息(包括存储的sql语句)

用法:

​ adb shell dumpsys dbinfo [packagename]

案例:

​ adb shell dumpsys dbinfo cn.wjdiankong.demo

这里可以清晰的看到应用执行过的sql语句信息。在对应用逆向的时候具有一定用途。毕竟可以查看应用操作数据库信息了。

5、adb intall

说明: 安装应用包apk文件

**用法: ** adb install [apk文件]

案例: adb install D:\demo.apk

注意:如果应用已经安装了,需要使用adb install –r [apk文件] 相当于升级安装

这个命令就不多说了,非常简单。

6、adb uninstall

说明: 卸载应用

用法: adb uninstall [packagename]

案例: adb uninstall cn.wjdiankong.demo

和上面那个命令对应,也不多说了,非常简单。

7、adb pull

说明 将设备中的文件放到到本地

用法: adb pull 设备目录文件本地目录

案例: adb pull /sdcard/tmp.txt D:\

命令简单,不在多说,只是在操作的时候可能遇到文件权限问题,用chmod改一下权限即可。

8、adb push

说明: 将本地文件放到设备中

用法: adb push 本地目录文件设备目录

案例: adb push D:\tmp.txt /sdcard

命令简单,不在多说,只是在操作的时候可能遇到文件权限问题,用chmod改一下权限即可。

9、adb shell screencap

说明: 截屏操作

用法:

​ adb shell screencap –p 截图文件路径

案例:

​ adb shell screencap –p /sdcard/tmp.png

这个命令对于测试人员非常有用,有时候想快速截取手机屏幕,速度打开,我们就可以利用这个命令写一个简单的脚本文件,内容如下:

adb shell screencap -p /sdcard/tmp.png

*adb pull /sdcard/tmp.png D:*

start D:\tmp.png

这样就一步到位,分分钟打开一个截图图片。这个是Windows中的bat命令格式。

延伸:一些恶意软件,利用设备root之后,运行该命令就可以获取用户当前屏幕信息,对于盗取账号非常危险。

10、adb shell screenrecord

说明: 录屏操作

用法:

​ adb shell screenrecord 视频保存路径

案例:

​ adb shell screenrecord /sdcard/tmp.mp4

这个命令其实和上面截屏差不多,只不过这个是录制评论,对于测试人员来说更是重要了,有时候想复现问题步骤,那么就可以采用这个命令进行录屏功能。

**延伸:**现在很多录屏软件,在5.0一下可以利用root之后用这个命令进行录屏功能。

11、adb shell input text

说明: 输入文本内容

用法:

​ adb shell input text [需要输入文本框内容]

案例:

​ 让需要输入内容的文本框获取焦点,adb shell input text ‘HelloWorld’

**延伸:**这个命令也可以模拟物理按键,虚拟键盘,滑动,滚动等事件

**用途:**这个命令对于我们在需要输入一大堆信息到文本框中的时候非常有用,比如现在你在PC端有一段内容,想输入到手机的某个搜索框中,那么你可以通过把这段内容发送到手机,然后在复制操作。但是有了这个命令就非常简单,先让你想要输入的文本框获取焦点,然后运行这个命令即可。

12、adb forward

说明: 设备的端口转发

用法:

​ adb forwrad [(远程端)协议:端口号] [(设备端)协议:端口号]

案例:

​ adb forward tcp:23946 tcp:23946

​ adb forward tcp:8700 jwdp:1786

这个命令对于我们在调试的时候非常有用,特别在IDA调试中。

13、adb jdwp

说明: 查看设备中可以被调试的应用的进程号

用法: adb jdwp

案例: adb jdwp

这个命令或许用途不是很多,但是对于调试的时候还是有点用途。可以忽略这个命令。

14、adb logcat

说明: 查看当前日志信息

用法: adb logcat -s tag

案例: adb logcat -s fb

用法:

​ adb logcat |findstr pname/pid/keyword

案例:

​ adb logcat |findstr cn.wjdiankong.demo

这个命令大家都不陌生,也是重中之重,有的同学或许会好奇,为何不用AS查看日志了,但是有时候AS不能满足我们,比如我们想开多个日志窗口,这时候我们可以打开多个cmd窗口利用这个命令查看日志信息即可。用的最多的就是-s参数,可以直接查看对应的tag日志信息,可以利用findstr进行信息过滤:

这里因为是Windows下的所以用findstr进行信息过滤了,当然这个命令也可以直接在adb shell运行之后,比如:

>>adb shell

>> logcat |grep tencent

这样就可以用grep进行过滤信息了。

常用的shell命令

以下命令运行的前提是先运行:adb shell,而这些命令和上面adb shell命令都是互通的,所谓互通就是要想在设备中运行就优先adb shell一下,比如查看当前包信息,也可以这么做:

>>adb shell

>>dumpsys package [pkgname]

而以下介绍的这些shell命令也都可以直接在外部运行,比如清空应用数据:

adb shell pm clear [pkgname]

15、run-as

说明: 可以在非root设备中查看指定debug模式的包名应用沙盒数据

用法: run-as [package name]

案例: run-as cn.wjdiankong.demo

这个在之前的文章中详细介绍过这个命令的原理,不了解的同学可以查看这里:Android中run-as命令原理解析;利用这个命令,我们在开发中有时候有一个非root手机,但是又想看debug应用的沙盒数据,那么这个命令就可以帮助我们进行这项操作了。

16、ps

说明: 查看设备的进程信息,或者是指定进程的线程信息

用法: ps | grep 过滤内容

​ ps –t [pid] 查看pid对应的线程信息

案例: ps |grep cn.wjdiankong.demo

​ ps –t 11798

这个命令不多说了,基本命令,重要程度不多说了,可以结合grep进行过滤信息。

17、pm clear

说明: 清空指定包名应用的数据

用法: pm clear [packagename]

案例: pm clear cn.wjdiankong.demo

有时候想清空一个应用的数据,可能需要去设置页面去操作,可以不用那么麻烦,直接用这个命令即可。

18、pm install

说明: 安装设备中的apk文件,功能和adb install一样

用法: pm install [apk文件]

案例: pm install /sdcard/demo.apk

这个和adb install命令一样的效果,不多解释。

19、pm uninstall

说明: 卸载设备中的应用,功能和adb uninstall 一样

用法: pm uninstall [packagename]

案例: pm uninstall cn.wjdiankong.demo

这个命令和adb uninstall命令一样的效果,不多解释了。

20、am start

说明: 启动一个应用

用法:

​ am start -n [包(package)名]/[包名].[活动(activity)名称]

案例:

​ am start -n com.android.browser/com.android.browser.BrowserActivity

注意:可以以debug方式启动应用:am start –D –n ….

特别在我们反编译调试应用的时候,可能需要以debug方式启动应用

21、am startservice

说明: 启动一个服务

用法:

​ am startservice -n [包(package)名]/[包名].[服务(service)名]

案例:

​ am startservice -n com.android.traffic/com.android.traffic.maniservice

和上面命令类似,启动服务,不多解释了。

22、am broadcast

说明: 发送一个广播

用法: am broadcast -a [广播动作]

案例: am broadcast -a android.NET.conn.CONNECTIVITY_CHANGE

和上面的命令类似,发送一个广播,不多解释了。 有时候我们定义了一个广播,可能需要测试,就可以借助这个功能模拟发送一个广播。

23、netcfg

说明: 查看设备的ip地址

用法: netcfg

案例: netcfg

有时候想查看设备的ip地址,去设置页面太费劲了,可以直接用这个命令即可:

24、netstat

说明: 查看设备的端口号信息

用法: netstat

案例: netstat

有时候想查看设备的端口号信息,这个命令也是非常重要的:

25、app_process

说明: 运行Java代码

用法:

​ app_process [运行代码目录] [运行主类]

案例:

​ export CLASSPATH=/data/demo.jar

​ exec /system/bin/app_process /data/cn.wjdiankong.Main

这个主要用于在Android中一些特殊开发场景中,我们想启动一个jar包,不过这个jar包有要求的:需要用dx命令把dex文件转化成jar包功能,实际上他不是一个正常的jar包了,而是一个包含了classes.dex文件的压缩文件了。

26、dalvikvm

说明: 运行一个dex文件

用法: dalvikvm –cp [dex文件] [运行主类]

案例: dalvikvm –cp /data/demo.dex cn.wjdiankong.Main

这个有时候为了测试一个dex文件功能可以用到,这个命令和上面的命令有很大相似之处,只是运行的文件不一样。

27、top

说明: 查看当前哪些应用的cpu消耗信息

用法: top [-n/-m/-d/-s/-t]

​ -m // 最多显示多少个进程

​ -n// 刷新次数

​ -d// 刷新间隔时间(默认5秒)

​ -s // 按哪列排序

​ -t// 显示线程信息而不是进程

案例:

​ top –d –m 10 |grep cn.wjdiankong.demo

这个在分析应用性能的时候非常有用,我们可以用grep过滤我们想要分析的应用信息,查看他的当前cpu使用率。

28、getprop

说明: 查看系统属性值

用法: getprop [属性值名称]

案例: getprop ro.debuggable

这个可以查看设备的信息,比如设备版本号,系统属性等,记得以前我们以前介绍过在root设备之后,还可以去修改这些系统属性。比如debug开关,让所有的应用都处于可调式状态。

操作apk命令

以下这两个命令是直接获取apk的信息

29、aapt

说明: 查看apk中的信息以及编辑apk程序包

用法:

​ aapt dump xmltree [apk包] [需要查看的资源文件xml]

案例:

​ aapt dump xmltree demo.apk AndroidManifest.xml

这里我们依然用重定向把输出信息保存到文件中,然后再打开查看。可以看到就是非常详细的apk清单文件了。所以有时候我们想查看一个apk中清单文件,也没必要进行复杂的反编译工作。

30、dexdump

说明: 可以查看一个dex文件的相信信息

用法: dexdump [dex文件路径]

案例: dexdump D:\classes.dex

这个命令用于查看apk中dex文件的详细信息,有时候也没必要反编译,可以直接用这个命令即可。

进程相关命令

最后再说一下关于一个应用的常用信息查询,这个主要利用cat命令查看当前应用进程信息,对于开发中可能用得到:

第一个:查看当前进程的内存加载情况

可以使用

cat /proc/[pid]/maps

查看当前进程的内存映射信息,比如加载了哪些so文件,dex文件等:

第二个:查看进程的状态信息

可以利用

cat /proc/[pid]/status

查看当前进程的状态信息,比如我们熟知的TracerPid:

第三个:查看当前应用使用的端口号信息

可以使用

cat /proc/[pid]/net/tcp/tcp6/udp/udp6

获取当前应用使用到的端口号信息:

注意:

上面介绍一些在adb shell中运行的命令,那么这些命令也可以在手机中直接运行,我们需要去下载一个"终端模拟器"应用,直接在里面输入这些shell命令即可。这样不用电脑就可以进行操作了。

总结

到这里,就分析了Android开发中常用的一些命令,有了这些命令对于我们开发来说起到非常搞笑的助推作用了,当然还有其他命令,但是本文觉得有些命令不是那么好用也没多大用途这里就没做介绍了。

ADB及shell命令总结相关推荐

  1. 基于adb和shell命令的Android Mac电脑日常开发效率小工具

    一.制作一个能双击执行的mac command指令 Mac快捷键comand+空格,输入terminals打开terminals 输入touch 文件名.command touch test.comm ...

  2. EasyClick adb shell命令大全

    EasyClick adb.shell命令大全目录 EasyClick adb.shell命令大全 ADB包安装步骤 使用教程 ADB高级命令 Android 常用的Linux命令 Android a ...

  3. Android adb shell 命令

    adb 概述 SDK的Tools文件夹下包含着Android模拟器操作的重要命令 adb,adb的全称为(Android Debug Bridge就是调试桥的作用.通过adb我们可以在Eclipse中 ...

  4. Adb shell命令打电话测试4G

    Adb shell命令打电话测试4G 在没有显示屏的情况下,怎么测试4G的打电话和上网功能: 1.上网功能测试 用route命令看路由信息 Kernel IP routing tableDestina ...

  5. 怎么打开python shell_Python之使用adb shell命令启动应用的方法详解

    一直有一个心愿希望可以用Python做安卓自动化功能测试,在一步步摸索中,之前是用monkeyrunner,但是发现对于控件ID的使用非常具有局限性,尤其是ID的内容不便于区分 具有重复性时,后面又发 ...

  6. adb shell 命令详解,android, adb logcat

    http://www.miui.com/article-275-1.html http://noobjava.iteye.com/blog/1914348 adb shell 命令详解,android ...

  7. dos命令行输入adb shell命令为什么报错

    在命令行(就是开始--运行--输入cmd)模式下输入adb shell命令一般会报两种错误,一是"adb不是内部命令或外部命令,也不是可运行的程序或批处理文件",二是"e ...

  8. adb 输入回车命令_adb adb shell 相关命令

    在Mac上配置adb命令 在Mac OS中使用adb命令时,应进行变量配置,步骤如下: 一.终端中输入 cd ~ 二.输入touch .bash_profile 回车 touch:如果没有,则创建文件 ...

  9. adb android源码分析,Android源码分析(十六)----adb shell 命令进行OTA升级

    一: 进入shell命令界面 adb shell 二:创建目录/cache/recovery mkdir /cache/recovery 如果系统中已有此目录,则会提示已存在. 三: 修改文件夹权限 ...

最新文章

  1. GoAhead2.5源代码分析之6-访问验证(security.c)
  2. .net上传,一个选择直接上传(ashx)和byteArray上传
  3. Keil C 里面Lib库文件的生成与调用
  4. centos65安装RabbitMQ3.6.5
  5. 用 JavaScript 验证只能输入数字,并做数字加总
  6. 跨越语言障碍!哈工大联合MSRA提出多任务、多模态、多语言的统一预训练模型M3P (CVPR 2021)...
  7. java的学习步骤方法书籍大总结
  8. EMUI10 亮相开发者大会:分布式设计打造全场景体验
  9. Java float型数据判断是否相等
  10. 天正编辑文字出现形未定义_天正双击不能编辑文字
  11. lua——牛牛牌型处理相关算法(中)——牌型判定
  12. Leetcode#183. Customers Who Never Order
  13. 最简单的输出四位数的每个位上的数字
  14. 星号下三角形python答案_Python利用for循环打印星号三角形的案例
  15. VMWare安装使用、Linux命令、Docker安装和Linux项目部署
  16. Centos服务器 查看不到IP地址
  17. Qt中国象棋之棋子的实现
  18. 带上CSDN一起游国庆
  19. vue-cli3.0+webpack4中关于svg-sprite-loader踩坑,让svg组件徜徉我的web项目
  20. 使用计算机传真,如何用电脑发网络传真?在电脑里怎么发传真?

热门文章

  1. (1)学习ArduPilot代码库
  2. 全书重点总结 |《Java并发编程的艺术》| 持续更新
  3. Java中 9 种常见的 CMS GC 问题分析与解决
  4. Scarpy爬取当当网书籍
  5. 城市信息area.js
  6. 量子计算机芯片用什么材料,量子计算机可能会使用金刚石制成的芯片
  7. GPGPU-SIM(原码阅读)(流多处理器部分完成)
  8. 进程、线程、协程、管程
  9. 双目相机实现物体三维重建,得到三维点云
  10. 数据埋点是什么?设置埋点的意义是什么?