adb命令

1.adb shell命令

adb shell cat /system/build.prop 查看设备信息

cat /system/build.prop | grep "product 查看手机型号,名称等

cat /proc/cpuinfo 查看手机cpu架构

cat /data/misc/wifi/*.conf 查看wifi 需要root权限,凡是在data目录下的东西,都需要root权限,因为这存储的是app的数据

adb shell /system/bin/screencap -p /sdcard/screenshot.png保存截图

进入指定的device的shell

1
adb shell

或者

1
adb -s 47Q6R17104004796 shell

adb 查看所有安装的包

1
pm list packages

 根据某个关键字查找包

1
shell@hwliszt:/ $ pm list packages | grep tencent

查看包安装位置

1
pm list packages -f

 同样可以进行筛选

1
pm list packages -f | grep tencent

2.adb命令

常用命令

adb pull /data/app/com.tencent.tbs-1/base.apk ~/Downloads/   将apk拉到pc中 

adb start-server 启动adb服务

adb kill-server 终止adb服务

adb shell 进入adb运行环境

adb version 查看adb版本

adb reboot [bootloader|recovery] 重启设备,可选参数进入bootloader(刷机模式)或recovery(恢复模式)

adb shell dumpsys window | findstr mCurrentFocus 命令查看当前运行的包名和Activity更清晰一些。

adb install test.apk -r 覆盖安装,保留数据和缓存文件 -d 解决低版本version问题 -s 安装apk到sd卡

adb uninstall -k <package_name> 可选参数-k的作用为卸载软件但是保留配置和缓存文件

adb shell dumpsys package <package_name> 查看app相关所有信息,包括action,codepath,version,需要的权限等等信息

adb shell pm path <package_name>查看app的路径

adb shell dumpsys package <package_name> | grep version 查看apk的版本信息

如果你得到的是下图的两个version版本,则为系统app,下面是系统app本身的版本,上面是升级之后的系统app的版本信息

versionCode=8 targetSdk=22 versionName=V0.08 versionCode=6 targetSdk=22 versionName=V0.0

adb shell am start -n <package_name>/.<activity_class_name>启动activity

adb shell cat /system/build.prop/ 查看设备名称,豌豆荚等应用就是通过此来获得设备的名称

adb shell getprop | grep product查看手机型号信息

adb get-serialno 获取序列号,获取到的序列号即为adb devices列出来的序列号

adb devices 查看连接的设备

adb -s 1b71651 shell 进入1b71651设备的命令为

adb shell cat data/misc/wifi/*.conf 查看wifi密码(需要root权限)

adb shell cat /sys/class/net/wlan0/address 查看wifi_mac

文件操作相关:

1、拷贝文件/目录到设备

adb push <local>...<remote>
2、从设备拷贝文件/目录,-a参数保留了文件的时间戳和模式

adb pull [-a] <remote>...<local>
3、查看设备log,和studio和eclipse的logcat相同,可通过参数控制输出的日志

adb logcat -s 过滤指定参数log -v time 保留日志时间 >> 追加写 > 覆盖写
下面的命令含义为:打印出log信息中的时间并且包含关键字 “Test” 的所有log以覆盖写的方式保存到test文件

adb logcat -v time -s Test > test.txt
4、列出目录下的文件和文件夹,可选参数-al可查看文件和文件夹的详细信息

adb shell ls [-al]
5、进入文件夹

adb shell cd <folder>
6、查看文件

adb shell cat <filename>
7、重命名文件

adb shell rename path/oldfilename path/newfilename
8、删除文件/文件夹

adb shell rm path/filename -r 可选参数用于删除文件夹及下面的所有文件 eg:adb shell rm -r <folder>
9、移动文件

adb shell mv path/filename newpath/filename
10、拷贝文件

adb shell cp file newpath/file1
11、创建目录

adb shell mkdir path/folder
12、设置文件最高读写权限

adb shell chmod 777 filename
13、手机未root 查看data/data/某一app文件信息

笔者的小米3没有root,但是又想方便地查看data/data/目录下的一些文件,直接进入data会提示没有权限,查看的方式为进入data/data/后,运行下面的命令,就能直接进入你应用的包下了,可通用cp或者mv拷贝或移动到sdcard目录进行其他操作

run-as package_name

数据库相关

 

数据库的操作和今天的主题关系不大,增删改查操作不再列举。但是平时的开发过程中只是查看数据库中某个表或者某个字段,也无需每次都pull出来之后再查看,用命令行会更加方便快捷,进入到test.db的目录后,运行如下命令1、操作db

sqlite3 test.db
2、对db使用sqlite3命令后,通过.help查看各种使用指导

.help
3、列举数据库的table名称

.tables
4、列表数据库的schema,个人觉得下面两个命令很有用,效果等同,可以方便快捷地查看数据库字段对应的数据类型,.schema更加简洁

.schema
或者

select * from sqlite_master where type = "table";

 

3.理解adb

http://blog.csdn.net/recordgrowth/article/details/79146038

http://blog.csdn.net/hehe26/article/details/52766329

https://www.cnblogs.com/szy123618/p/4064038.html

 

3.1组成

 

adb工具位于android_sdk目录/platform-tools/,作为一个客户端-服务器程序,它包括三个组件:

客户端,该组件发送命令。客户端在开发计算机上运行。您可以通过发出 adb 命令从命令行终端调用客户端。

后台程序,该组件在设备上运行命令。后台程序在每个模拟器或设备实例上作为后台进程运行。

服务器,该组件管理客户端和后台程序之间的通信。服务器在开发计算机上作为后台进程运行。

启动一个 adb 客户端时,此客户端首先检查是否有已运行的 adb 服务器进程。如果没有,它将启动服务器进程。

当服务器启动时,它与本地 TCP 端口 5037 绑定,之后所有 adb 客户端均通过该端口 与 adb 服务器通信。

然后,服务器设置与所有运行的模拟器/设备实例的连接。

它通过扫描 5555 到 5585 之间(模拟器/设备使用的范围)的奇数号端口查找模拟器/设备实例。

服务器一旦发现 adb 后台程序,它将设置与该端口的连接。

请注意,每个模拟器/设备实例将获取一对按顺序排列的端口:

用于控制台连接的偶数号端口和用于 adb 连接的奇数号端口。例如:

模拟器 1,控制台:5554

模拟器 1,adb:5555

模拟器 2,控制台:5556

模拟器 2,adb:5557

以此类推…

如上所示,在端口 5555 与 adb 连接的模拟器实例与侦听端口 5554 的控制台的实例相同。

3.2androidstudio应用


Android Debug Bridge,Android调试桥接器,简称adb,是用于管理模拟器或真机状态的万能工具。

平时大家在开发android应用过程中,可能没有直接用到adb,因为大家用的开发工具(不管是AS,还是安装了ADT插件Eclipse)已经提供了透明的集成。
比如点击运行按钮运行程序,程序就安装到模拟器或者真机上去了,然后启动起来,这其中原理就是先使用了 adb push命令先将该apk文件拷贝到模拟器或真机上去。
然后使用adb shell 命令在目标模拟器或手机上启动远程SHELL 运行android系统的一些程序 比如pm,am去安装程序,启动程序。
下面是我用AS(android studio)开发,运行一个应用程序,输出的一下日志:

 

拷贝文件,安装程序,运行程序,其实都是AS通过adb工具实现。上面的过程,我们自己也可以在命令行中使用adb完成。稍后演示一下。

 

3.3通信


在网络上搜罗了一下,基本上关于ADB的原理用了两张图表示:

      

首先知道adb的通信有Socket,那么socket是什么呢?

套接字(socket)概念
套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。
应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。应用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。
套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
socket的位置在什么地方:


 实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。 实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议
综上所述,我的理解:(1)Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。(2)socket可以说是两个端口的称呼.adb连接时,一个serversocket,一个clientsocket,这就形成了两端端口,通过socket连接到TCP/IP协议,从而实现PC端和手机端的通信
4.跑monkey
adb shell monkey -v -p your.package.name 500

 
posted @ 2018-03-02 15:41  Gaoyongxian666  阅读(531)  评论(0编辑  收藏  举报