adb的使用

adb是什么?

   adb的全称为Android Debug Bridge,就是起到调试桥的作用。通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具。adb的工作方式比较特殊,采用监听Socket TCP 5554等端口的方式让IDE和Qemu通讯,默认情况下adb会daemon相关的网络端口,所以当我们运行Eclipse时adb进程就会自动运行。
adb有什么用?:借助adb工具,我们可以管理设备或手机模拟器的状态。还可以进行很多手机操作,如安装软件、系统升级、运行shell命令等等。其实简而言说,adb就是连接Android手机与PC端的桥梁,可以让用户在电脑上对手机进行全面的操作!

常用命令


adb devices    显示当前运行的全部模拟器
adb start-server     启动ADB
adb kill-server    停止ADB


adb install -r [apk文件]         安装应用程序
        -l #锁定该程序

         -r #重新安装该程序,保存数据

        -s #安装在SD卡内,而不是设备内部存储
    例:adb install --r D:\mm.apk
adb uninstall [packagename]     卸载应用程序
    例:adb uninstall com.tencent.mm
-k #不删除程序运行所产生的数据和缓存目录(如软件的数据库文件)
例:adb uninstall -k com.tencent.mm


adb pull 设备目录 本地目录         例:adb pull /sdcard/mm.txt  D:\(内存卡根目录的txt文件copy到D盘根目录)
adb push 本地目录 手机设备目录       例:adb push D:\mm.txt  /sdcard   (把D盘的mm.txt目录copy到手机sdcard目录)


adb help  帮助命令
adb shell screencap -p 截图文件路径     截图
adb shell dumpsys dbinfo[packagename]   查看指定包名应用的数据库储存信息(包括储存的SQL语句)

adb shell dumpsys meminfo[packagename/pid]     可以查看进程当前的内存情况
adb shell dumpsys [packagename]     例:adb shell dumpsys packagename  查看指定包名应用的详细信息(相当于AndroidMainfest.xml中内容)
13.adb shell dumpsys activity top     查看当前应用的activity信息
adb bugreport      查看bug报告

adb shell pm list packages      列出手机装的所有apk包名
adb shell pm list packages -s   系统应用
adb shell pm list packages -3   第三方应用
adb shell pm list packages | grep qq    可用grep qq过滤


adb shell pm clear [packagename]   清楚应用缓存信息

adb shell am start -n[包名+activity名]    通过adb启动应用程序页面
    例:adb shell am start -n com.tencent.mm/.ui.SplashAcitvity


强制停止应用有些时候应用卡死了,需要强制停止,则执行命令:adb shell am force-stop <packagename>

SQLite3 adb shell   访问数据库
sqlite3#cd system/sd/data //进入系统内指定文件夹
#ls //列表显示当前文件夹内容
#rm -r xxx //删除名字为xxx的文件夹及其里面的所有文件
#rm xxx //删除文件xxx
#rmdir xxx //删除xxx的文件夹

adb get-product   获取设备的ID

adb get-serialno   获取设备序列号

导出设备信息

adb get-serialno > 序列号.txt
adb shell cat /sys/class/net/wlan0/address > MAC地址.txt
adb shell getprop ro.product.model > 设备型号.txt
adb shell getprop ro.build.version.release> 系统版本.txt
adb shell pm list packages -s > 系统应用的所有包名.txt
adb shell pm list packages -3 > 第三方应用包名.txt
adb shell wm size > 屏幕分辨率.txt
adb shell wm density > 屏幕密度.txt
adb shell cat /proc/cpuinfo > CPU信息.txt
adb shell pm list permissions -f > 权限.txt
adb shell pm list users -f > 用户.txt

adb reboot   重启
 

 adb backup [-f <file>] [-apk|-noapk][-shared|-noshared] [-all] [-system|nosystem] [<packages...>]     备份
   例:adb backup -f mm.ab -noapk -noshared -nosystemcom.tencent.mm


adb backup -all      使用默认方式备份应用和设备的数据(不包含apk)到当前目录下并保存为文件backup.ab
※这个命令有可能不对每个设置都有效,如果你出现像这种 "adb: cannot open file ./backup.ab"的错误,使用 adb backup -all -fC:\backup.ab来代替,其中路径C:\可根据喜好替换

对各个参数的解释:
-f <file>
用这个来选择备份文件存储在哪里,例如-f /backup/mybackup.ab将会使文件存储在根磁盘(Windows的C盘等等)下一个名为backup的文件夹里,并且备份文件名为mybackup.ab
-apk|-noapk

这个决定是否在备份里包含apk或者仅仅只备份应用数据,个人推荐使用-apk以免有的应用在应用市场找不到,如果不使用则默认的是-noapk
-shared|-noshared
这个参数用于决定是否备份设备共享的SD card内容,默认是-noshare,主要包括内部存储中的音乐、图片和视频,因此为保险起见,建议加上-share
-all
这个参数是一种简单地表达“所有应用”的说法,package参数可以选择备份单独的应用,如果你不是备份某个应用,使用-all备份整个系统
-system|-nosystem
这个参数决定-all标签是否包含系统应用,默认的是-system,根据情况可选择是否用-nosystem
<packages...>
如果你知道应用安装包的名称(例如com.google.android.apps.plus),就可以使用该参数备份特定应用。
 

adb抓取log

(四类log buffer是main,radio,system,events)

adb wait-for-device logcat
adb logcat -v time > logcat.txt //默认是-b main -b system
adb logcat -v time -b main //main log
adb logcat -v time -b radio //radio log    
adb logcat -v time -b system //system log
adb logcat -v time -b events

adb pull /data/anr         anr log

adb pull /data/tombstones         tombstone log

adb pull /data/log/core             core log

adb shell dmesg > dmesg.txt         开机log

adb pull /data/logcatch          logcatch

adb pull /sdcard/logs         qxdm log

hprof log
在分析app 时,我们通常需要分析app 的java heap 资料,如分析java 的memory leak, 追查heap
中相关变量情况等。
在android 中抓取app 的hprof 操作方式有下面几种:
第一种方式: 使用am 命令
adb shell am dumpheap {Process} file
如 adb shell am dumpheap com.android.phone /data/anr/phone.hprof
adb pull /data/anr/phone.hprof
第二种方式: 使用DDMS 命令
在DDMS 中选择对应的process, 然后在Devices 按钮栏中选择Dump Hprof file, 保存即可
第三种方式: 通过代码的方式
在android.os.Debug 这个class 中有定义相关的抓取hprof 的method.
如: public static void dumpHprofData(String fileName) throws IOException;
这样即可在代码中直接将这个process 的hprof 保存到相对应的文件中,注意这个只能抓取当时的
process.
如果想抓其他的process 的hprof, 那么就必须通过AMS 帮忙了。
可以先获取IActivityManager 接口,然后调用它的dumpheap 方法。具体的代码,大家可以参考
frameworks/base/cmds/am/src/com/android/commands/am/am.java 中的调用代码
抓取回hprof 后,就可以用hprof-conv 命令将DVM 格式的hprof 转换成标准的java 命令的hprof
hprof-conv in.hprof out.hprof
然后使用如MAT 之类的工具进行具体的分析


adb bugreport > bugreport.txt             bugreport

cat proc/kmsg > kmsg.txt                  kernel log(只有从当前时间起的很少的log)


 

adb shell dumpstate //各类信息,比如进程信息,内存信息,进程是否异常,kernnel的log等
adb shell dumpcrash
adb shell dumpsys //查询所有service的状态


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值