使用命令与Android设备交互

通过命令行创建Android模拟器以及利用adb命令与其进行交互。

1.前言

由于接下来的命令都是基于Android SDK工具包中的工具(如adb等),所以在使用前需要将sdk的安装路径下的platform-toolstools文件夹的路径添加到系统的环境变量中,或者就在使用命令时加上对应的路径信息(如下图所示)。

2.使用命令行创建使用Android虚拟设备(AVD)

  • 删除AVD(模拟器):android delete avd --name 名称
  • 创建SDCard:mksdcard 1024M ~/名称.img
  • AVD(模拟器)所在位置:Linux(~/.android/avd)
  • AVD(模拟器)所在位置:Windows(C:\Documents and Settings\Administrator\.android\avd)
  • 显示系统中全部AVD(模拟器):android list avd
  • 启动模拟器:emulator -avd 名称

3.使用adb与AVD交互

一些与浏览和使用Android文件系统相关的命令

adb命令

  • 显示当前运行的全部模拟器:adb devices
  • 对某一模拟器执行命令:adb -s 模拟器编号 命令
  • 安装应用程序:adb install -r 应用程序.apk
  • 获取模拟器中的文件:adb pull <remote> <local>
  • 向模拟器中写文件:adb push <local> <remote>
  • 进入模拟器的shell模式:adb shell
  • 启动SDK,文档,实例下载管理器:android
  • 缷载apk包:adb shell——>cd data/app——>rm apk包——>exit——>adb uninstall apk包的主包名
  • 查看adb命令帮助信息:adb help
  • 在命令行中查看LOG信息:adb logcat -s 标签名
  • 删除系统应用:adb remount (重新挂载系统分区,使系统分区重新可写)——>adb shell——>cd system/app——>rm *.apk
  • 获取管理员权限:adb root
  • 启动Activity:adb shell am start -n 包名/包名+类名(-n 类名,-a action,-d date,-m MIME-TYPE,-c category,-e 扩展数据,等)
  • 发布端口:你可以设置任意的端口号,做为主机向模拟器或设备的请求端口。如: adb forward tcp:5555 tcp:8000
  • 记录无线通讯日志:一般来说,无线通讯的日志非常多,在运行时没必要去记录,但我们还是可以通过命令,设置记录: adb shell logcat -b radio

注:adb shell后面跟的命令主要来自:源码\system\core\toolbox目录和源码\frameworks\base\cmds目录。

4.通过adb与Activity管理器交互

前置条件

打开Android模拟器,并且在命令行中输入adb shell获取Android设备上的shell。

相关adb命令

  • pm list packages,获取Android设备中已安装的activity的列表。
  • am start [包名],运行包名对应的activity。
  • am startservice <package name>/<component name><INTENT>,启动服务。
  • kill < --user UID | current ><package>,使用activity管理器杀掉一个进程。

am start命令的intent参数

命令原型

am start < –user UID | current >

其中可选参数--user指定app以哪个用户的权限运行,如果activity不支持这个参数,它就将以ADB用户的权限运行。

参数

实例

遇到的问题

在实际使用am start命令时,出现如下图所示情况并导致接连几个activity都启动失败,这应该是因为在没有指定intent参数的情况下,该命令默认会去寻找Intent {act=android.intent.action.MAIN}的activity启动,而有的应用程序中并没有这样的activity,所以导致启动应用程序失败。

5.通过ADB提取app里的资源(设备需要root权限)

  1. 获取shell:adb shell
  2. 切换到data/data目录:cd data/data
  3. 查看目录下文件的详细信息:ls -al
  4. 一次性查看app的所有资源和元数据:ls -alR */
  5. 只显示数据库/文件:ls -alR */databases/以及ls -alR */files/
  6. 搜索指定类型的文件(根据扩展名):`ls -al //*.xml……

在PC上查看app中的.db文件

参考资料

《Android安全攻防实战》
adb操作命令详解及大全