shell 命令

shell 命令


看完了这篇文章,就进入 Android 的内部了

adb shell 命令

shell 命令的指的是:进入到设备内,然后执行的命令;
用大白话讲,就是“给手机下达指令”。

怎么进入?

<code>adb shell>>/<code>

这样就进入了,然后就可以给他下达指令了。

好了,回顾一下,上一节,我们使用了

adb shell dumpsys

命令获得了 手机上安装的应用的一些信息

这里面用到了 shell,只不过,他是在“电脑端” “传递命令”进入“手机”,然后获取到的信息;

现在我们直接“进入设备”,然后“下达指令”。

当然,这里的前提是你的设备最好是 “root” 之后的,否则一些命令就会出现 “permission denied” 的问题


进入正题

1、dumpsys 命令

这个命令等同于上节提到的对应的命令,功能是等效的,所以这里不再赘述。

2、run-as

在手机中查看指定 包名的 应用的数据,适用于 非 root 的手机。

但是这里注意一下,不能用于查看“上架到应用市场的app”。

为什么呢?

因为这些 app 是正式版本的,不是 debug 版本的,如果你执意操作的话:

比如像通过这个命令查看「瑞幸」的app数据,

执行

run-as com.lucky.luckyclient

他会报错错误

如下图所示:


shell 命令


爆出了:

run-as:package not debuggable:com.lucky.luckyclient

的问题。

所以需要注意的是:

利用 run-as 能查看的是属于你自己开发的 app ,并且安装到 android 手机上面的应用是 debug 版本的应用才可以。

3、ps

哈哈哈,不是 photoshop
他是:查看设备的进程信息,或者查看指定进程的线程信息。

使用方法:

直接使用 ps 查看所有进程

如图

shell 命令


这样,就拿到了所有进程的信息

查看进程信息,可以通过 |grep 去过滤信息。

ps |grep 过滤内容

从上面的图片我们看到,terminal列出了系统、应用的一些进程信息,我们可以找一个单独看,那么就可以使用 |grep去过滤这些内容了。

ps |grep smpboot_th

得到下面的结果:

shell 命令


这样做的好处是,看的更加清晰了。

查看指定进程下的线程信息

使用方法

ps -t 进程id

从第一种方法中,看到了 smpboot_th的其中一个进程 id 是 3。
如图

shell 命令


的进程id,下面我们直接拿

使用

ps -t 3 获取 pid 为 3 的 线程信息。

看下结果:

shell 命令


4、pm clear

清除指定包名应用的数据

用法

pm clear 包名

pm.clear io.moreless.tide 清空「潮汐」的数据

如果当前正在开启这这个应用,那么一执行这个命令,就会关闭,并且清空所有数据

再次打开「潮汐」时,就像安装新的应用一样。

5、pm install

安装 apk 文件

等同于 在电脑下使用的 adb install apk文件

使用方法:

pm install apk在手机的路径

前提是,你手机上有这个包,所以这个命令并不实用。

这里就不再演示了。

6、pm uninstall

卸载指定包名的应用

用法:

pm uninstall 包名

pm uninstall com.lucky.luckyclient

等同于电脑端使用的

adb uninstall com.lucky.luckyclient

这样就卸载掉了手机上安装的「瑞幸」的包了。

这里不再演示了。

7、am start 启动一个应用

下面这个方法十分实用,可以直接定位到页面

用法:打开app

am start -n 包名/activity名称 打开指定页面

甚至,你还可以 “以debug模式打开”,只需要在命令中添加 -D 即可

非常实用啦。

好,我们来看一下 潮汐的包名和其中的一个页面的路径

使用

dumpsys package io.moreless.tide

查看 「潮汐」的“清单文件”:

shell 命令


“红线部分” 是输入的命令,“浅蓝色部分” 是稍后我们要跳转的界面。

好,我们先跳转到

io.moreless.tide/.play.PlayActivity

这个界面,看他的单词意思应该是“播放界面”,如下图:

执行的命令是:

am start -n io.moreless.tide/io.moreless.tide.play.PlayActivity

shell 命令


先将手机上开启的 「潮汐」的 app 关闭,然后通过上面的命令打开

8、am startservice

开启一个服务

用法

am startservice -n 包名/服务名

在我们演示之前,先看看「潮汐」有哪些服务吧!

使用命令

dumpsys activity services |grep moreless

我们得到这样的结果。


shell 命令


红色框框 是我们执行的命令

浅蓝色框框 是我们得到的一些 service 的结果

看看前缀发现「潮汐」里面不是「友盟」的服务,就是「淘宝」的服务。

那么我们来演示一下,使用 am startservice -n 开启一个服务看看是什么情况吧

am startservice -n io.moreless.tide/com.umeng.message.UmengIntentService

出现了错误

shell 命令


那我们把 「潮汐」打开看看呢
这里结合了上面打开 activity 的命令

shell 命令


这样就不报错了,但是因为这个 service 的功能不会显示到界面上,所以这里手机屏幕的内容没有变化。

9、am broadcast

发送一个广播,这个命令就很实用了,比如我们对系统广播做了处理,对广播做出的相应的反应,就可以使用这个命令去模拟真实的广播接收

使用方法

am broadcast -a 广播 action

比如:

发送一个“电量低广播”

am broadcast -a Intent.ACTION_BATTERY_LOW

再比如:

发一个 “网络状态变化的广播”

am broadcast -a android.net.conn.CONNECTIVITY_CHANGE

看下命令执行情况


shell 命令


发现 “ 电量的广播 ” 可以发送,但是 “ 网络变化的广播 ”的需要权限

再试一下 “ 锁屏广播 ”

shell 命令


看到了,还是需要权限。


现在看来,真机的话必须root , 有必要使用虚拟机了!
  • 通过 Android Studio 开启一个虚拟机
  • 打开 terminal
  • adb root 将虚拟机 root
  • adb shell 进入虚拟机

使用 root 之后的虚拟机再执行以下上面两个命令
看看如何?

shell 命令


我们可以看到,广播发送成功,但是手机并没有做出反应,不过这不重要,因为我们要测试的是自己应用内对特定的广播的处理。

不过,我发现发送 “ 锁屏通知,虚拟机会有反应 ”

请看

shell 命令


ps:刚开始我把手机界面切到了应用菜单页面,收到通知后,手机界面回到了桌面。

10、netstat

查看手机端口号信息

如图

shell 命令


通过此命令可以查看手机完整的网络状态

11、dalvikvm运行一个dex 文件

我们都知道,android 应用,是把 class 文件打包成为 dex 文件,然后交给 dalvik 虚拟机运行的

所以,可以直接通过命令来跑 dex 文件

使用方法

dalvikvm -cp dex文件 运行主类

我把 「潮汐」的 apk 文件进行了解压,得到这样的文件夹

shell 命令


我们看到,里面有 classes.dex 文件,还有 classex2.dex 文件

那么我们来跑一下 classes.dex 文件看看会怎么样

首先,把这个文件放到手机里面去:

  • 退出 shell 模式
  • adb push dex文件 /sdcard/

具体操作如图

shell 命令


这样就把「潮汐」的 dex 文件放到了手机里面了。

然后,再进入 shell 模式,运行这个 dex 文件

  • adb shell
  • dalvikvm -cp /sdcard/classes.dex 运行主类

不过,到这里,我们就不能往下进行了,原因是找不到 「潮汐」的主类,即使是知道了它的启动 activity,但是因为混淆等原因,主类无法定位。

所以,这里就留一个小小的遗憾吧

shell 命令


12、top

查看当前应用 cpu 的消耗情况

单独执行

top
会输出默认查询结果

shell 命令


当然,我们可以使用一些字符限制一下

使用方法

top -n -d -s -t

-n 表示刷新次数

-d 刷新间隔时间(默认为5s)

-s 按照哪列排序

-t 显示线程信息不显示进程信息

这些 命令挑选你需要的即可,不用全部输入

我们执行以下这个命令看一下

top -d 4 -n 2

间隔 4s 刷新一次,共刷两次

看看情况 :

shell 命令


只间隔 4s 刷两次,然后就停止了

13、getprop

获得设备信息

使用方法

getprop查看设备的所有属性

shell 命令


如图,我们看到了 debug 、gsm、dalvik 、hwservicemanager 等信息

我们再用
getprop 属性名

这个方法查看具体的属性信息,比如我们看一下hwservicemanager.ready

getprop hwservicemanager.ready

查看一下


shell 命令


总结一下

shell 内部命令对 “更深一步进入 Android” 有很大的帮助,如果有的同学感兴趣,不妨多花点时间熟悉一下这些命令,shell 命令 和前两章提到的命令经常会一起用,所以大家还是多多联系吧!加油!!!


分享到:


相關文章: