1.adb devices , 获取设备列表及设备状态
2.adb get-state , 获取设备的状态
设备的状态有 3 钟,device , offline , unknown
device:设备正常连接
offline:连接出现异常,设备无响应
unknown:没有连接设备
3.安装卸载应用程序
adb install 用于安装
安装成功,返回成功提示 "Success";
安装失败,会返回以下:
INSTALL_FAILED_ALREADY_EXISTS
此时需要用 -r 参数来重新安装。
INSTALL_FAILED_SIGNATURE_ERROR
应用的签名不一致,可能是发布版和调试版签名不同所致。也有可能是没卸载旧应用导致。
INSTALL_FAILED_INSUFFICIENT_STORAGE
存储空间不足,需要检查设备存储情况。
adb uninstall 用于卸载
adb uninstall 后面带的是应用的包名,而不是应用名。
查看系统所有应用的包名:
adb shell pm list packages –f
4.上传、下载文件
adb push 命令将PC机上的文件推到 DLT-RK3288 机器上;
adb pull 命令将DLT-RK3288机器上的文件拉到PC机上;
例如:
adb push d:/new.txt /sdcard/
将D盘下new.txt文件 推到内部存储器
adb pull /sdcard/new.txt d:\
将DLT-RK3288 内部存储器根目录下的new.txt 拉到D盘
5.adb shell pm list package
Package Manager , 可以用获取到一些安装在 Android 设备上得应用信息
-s:列出系统应用
-f:列出应用包名及对应的apk名及存放位置
过滤应用
6.adb shell
通过adb shell 命令,就可以进入设备或者模拟器的shell环境了,在这个Linux shell中,我们就可以执行各种Linux命令了。
如果只想执行一条shell命令,就可以采用:adb shell [shell_command],在实际使用中,经常与grep或findstr一起使用,起到过滤作用,查看自己需要的关键信息。
7.常见命令:
如 ls, cd, rm, mkdir, touch, pwd, cp, mv, ifconfig, netstat, ping, ps, top等,进入adb shell即可执行,与linux相似
8.adb logcat
一.在cmd窗口查看手机的Log日志
有时候我们在手机程序上的日志要在其他地方调试,然后要看里面的Log日志。在cmd窗口中输入如下命令:
//格式1:打印默认日志数据
adb logcat
//格式2:需要打印日志详细时间的简单数据
adb logcat -v time
//格式3:需要打印级别为Error的信息
adb logcat *:E
//格式4:需要打印时间和级别是Error的信息
adb logcat -v time *:E
//格式5:将日志保存到电脑固定的位置,比如D:\log.txt
adb logcat -v time >D:\log.txt
这时手机日志更新什么日志,cmd窗口也会同步更新数据。
但是这样没有过滤条件,如果Log日志很多,很难找到我们想要的信息,
当然也可以复制cmd中的数据到一个文本中慢慢处理的,就是效率不高。
下面介绍adb logcat中的详细参数命令以及如何才能高效的打印日志,或者把日志保存到我们指定的位置。
以下是用Ida调试真机过程以及步骤
1~创建模拟器(Arm架构)(有真机可以忽略这个)
2~在IDA里面找到android_server(dbgsrv目录)
3~把android_server文件放到手机/data/local/tmp
adb push 文件名 /data/local/tmp/as
4~打开一个cmd窗口:运行android_server
1)adb shell 连接手机
2)给一个最高权限:su
3)来到/data/local/tmp cd /data/local/tmp
4)给androi_server一个最高的权限:chomd 777 android_server
5)查看android_server是否拥有权限:ls -l
6)运行andorid_server: ./android_server(端口号默认是:23946)
补充:运行andorid_server并且修改端口号:./android_server -p端口号
5~端口转发:
adb forward tcp:端口号 tcp:端口号(之前转发的端口号是什么,这里就是什么)
6~打开DDMS:观察程序的端口号
7~挂起程序:
adb shell am start -D -n 包名/类名
例子:adb shell am start -D -n com.example.javandk1/.MainActivity
补充:此时观察DDMS,被调试的程序前面有一个红色的虫子;
8~IDA里面勾选三项
1)打开ida,选择debugger -第二项-Remote ARMlinux(第四项)
2)添加hostname和portt:
hostname:主机号(默认127.0.0.1)
port:端口号(之前android_server运行时的端口号或者端口转发的端口号)
3)出来进程列表:选择要调试的程序(可以ctrl+f,搜索包名)
4)进来后,勾选三项:
Suspend on process entry point 程序入口点 断下
Suspend on thread start/exit 线程的退出或启动 断下
Suspend on library load/unload 库的加载和卸载 断下
补充:可以直接在这里F9(左上角有一个三角形)运行程序,然后放手;
也可以,直接执行第九步,然后IDA运行程序
9~挂载、释放(放手)
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=端口号
补充:此时观察DDMS,被调试的程序前面有一个绿色的虫子;
调试smali命令
adb shell am start -D -n 包名/启动页面名称 com.leiting.app/.ui.SplashActivity
adb forward tcp:8700 jdwp:第一步得到的端口号
查找当前页面类名
adb shell dumpsys window | findstr mCurrentFocus
层次显示
adb shell dumpsys activity top
APP调试 标签,如果在真机下必须设置此属性 android:debuggable="true"