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

一、基础命令

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

第一个: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 开发中常用的一些命令,有了这些命令对于我们开发来说起到非常高效的助推作用了,当然还有其他命令,但是本文觉得有些命令不是那么好用也没多大用途这里就没做介绍了。四哥把这么多年的私藏命令都交代给大家了。如果真的对你有用。记得回来点个赞和分享哈!

更多内容:点击这里

关注微信公众号,最新技术干货实时推送

编码美丽技术圈
微信扫一扫进入我的"技术圈"世界

扫一扫加小编微信
添加时请注明:“编码美丽”非常感谢!

Android中开发需要的高效助推的命令总结的更多相关文章

  1. Android中开发习惯

    我觉得首先是命名规范.命名规范这种东西每个人都有自己的风格,Google 也有自己的一套规范(多看看 Android 系统源码就明白了).好的规范可以有效地提高代码的可读性,对于将来接手代码的小伙伴也 ...

  2. 在android 中开发java.net.SocketException: socket failed: EACCES (Permission denied) 报错

    在android中下载文件,写好下载文件的代码后需要配置相应的权限 <uses-permission android:name="android.permission.INTERNET ...

  3. Android中开发Service

    Service的开发分为两个步骤:定义Service和配置Service1.定义Service定义一个Service子类继承于Service2.配置Service在AndroidManifest.xm ...

  4. Android中开发工具Android Studio修改created用户(windows环境)

    最近经常有朋友反馈说我的安卓项目中,在一些类中会出现Created by panchengjia on 2016/12/30的字样,是如何自动实现的(默认一般为Administrator),如下图: ...

  5. 02_JNI中Java代码调用C代码,Android中使用log库打印日志,javah命令的使用,Android.mk文件的编写,交叉编译

     1  编写以下案例(下面的三个按钮都调用了底层的C语言): 项目案例的代码结构如下: 2 编写DataProvider的代码: package com.example.ndkpassdata; ...

  6. Android NDK开发初识

    神秘的Android NDK开发往往众多程序员感到兴奋,但又不知它为何物,由于近期开发应用时,为了是开发的.apk文件不被他人解读(反编译),查阅了很多资料,其中有提到使用NDK开发,怀着好奇的心理, ...

  7. Android相机开发那些坑

    版权声明:本文由王梓原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/168 来源:腾云阁 https://www.qclou ...

  8. Android中的一些小知识

    android中开发常用快捷键alt+/ 自动补全ctrl+1 有问题提示生成接收的参数 ctrl+L 在按2 注释// 注释 ctrl+//**/ 多行注释 ctrl+shift+/ android ...

  9. Android中怎样做到自己定义的广播仅仅能有指定的app接收

    今天没吊事.又去面试了,详细哪家公司就不说了,由于我在之前的blog中注明了那些家公司的名字,结果人家给我私信说我泄露他们的题目.好吧,我错了... 事实上当我们已经在工作的时候.我们能够在空暇的时间 ...

随机推荐

  1. 《JAVA程序设计》第五次实验报告

    20145333 实验五 Java网络编程及安全 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.05.06 18:30-21:3 ...

  2. [翻译]解读CSS中的长度单位

    测量,在WEB设计上是非常重要的.在CSS中有至少10种不同的测量单位.每种单位都有其独特的作用,使用它们,可以使页面,在各种设备上,很好的工作.一旦你熟悉了所有这些单位,你可以更准确地设定元素的大小 ...

  3. [翻译]如何在HTML5中有效使用ARIA

    ARIA是Accessible Rich Internet Application的简称,指无障碍富互联网应用.可以使一些有功能障碍(如听力,视力)的人群,使用你的网站.下面看一下做为开发人员的我们, ...

  4. 永久更改hostname主机名

    vim /etc/sysconfig/network NETWORKING=yesHOSTNAME=keepalived-nginx1GATEWAY=192.168.33.2 vim /etc/hos ...

  5. 【pytorch】pytorch基础学习

    目录 1. 前言 # 2. Deep Learning with PyTorch: A 60 Minute Blitz 2.1 base operations 2.2 train a classifi ...

  6. MATLAB 图形图像处理

    theme: MATLAB author: pprp date: 2018/2/2 --- MATLAB 图形图像处理 二维绘图命令 plot 线性空间 plot(t,[x1,x2,x3]) : 在同 ...

  7. 解题报告:hdu2602 Bone collector 01背包模板

    2017-09-03 15:42:20 writer:pprp 01背包裸题,直接用一维阵列的做法就可以了 /* @theme: 01 背包问题 - 一维阵列 hdu 2602 @writer:ppr ...

  8. 04_zookeeper客户端使用及常用命令

    zookeeper客户端的使用 (1)   首先找到zookeeper自带客户端的位置 简单来说,zookeeper自带客户端位于zookeeper安装目录的bin目录下,以我的为例: (2)   运 ...

  9. Sql Server中的DBCC命令详细介绍

    一:DBCC 1:什么是DBCC 我不是教学老师,我也说不到没有任何无懈可击的定义,全名:Database Console Commands.顾名思义“数据库控制台命令”,说到“控制台“,我第一反应就 ...

  10. Java新建线程的3种方法

    Java新建线程的3种方法 =================== Java创建线程有3种方法:(1)继承Thread;(2)实现Runnable接口:(3)实现Callable接口; 由于Java只 ...