一.adb的常用命令

1.adb下直接拉起当前应用

     eg:  am start -n com.android.settings/.FallbackHome

1).启动activity
adb shell am start -n {包(package)名}/{包名}.{活动(activity)名称}
2).启动service
adb shell am startservice -n {包(package)名}/{包名}.{服务(service)名称}

2.adb remount //将 /system 部分置于可写入的模式,默认情况下 /system'部分是只读模式的, 这个命令只适用于已被 root 的设备

3.adb shell  //进入 android 设备的shell后,eng版本可进入/system,/data 下进行相关操作

     1).adb shell cat /proc/cpuinfo  //查看cpu信息

     2).adb shell cat /sys/class/net/wlan0/address    //获取 wifi mac 地址

     3).adb shell cat /system/build.prop    //获取设备编译属性(手机属性和手机配置信息)

     4).adb shell cat /data/misc/wifi/*.conf   //获取 wifi 配置信息

     5).adb shell am start -W 包名/类名  //可以冷启动或者热启动应用

     6).输入adb shell进入设备后,可以查看sharepreference存储位置(eng版本)

  android7.0所在目录:

  /data/user_de/0/pkgname/databases/

  /data/user_de/0/pkgname/shared_prefs/

  android 6.0所在目录:

        /data/data/pkgname/shared_prefs/  

 7).输入adb shell进入设备后,可进入/data/data/packagename/databases进行数据库的操作(eng版本),如下:

      sqlite>.help  //帮助查看命令

      sqlite> .exit //命令退出sqlite,返回到#提示符

      sqlite>.tables //查看所有表

      sqlite> select * from table //查询来自表table的所有数据

 sqlite> update table set value="1" where _id=1 //修改表table的数据

 sqlite> delete from table where name="**" // 删除table中name="**"的数据

    sqlite> select * from table where name like "%***%" //查询table name中含有字符***的记录

  8). adb shell top | grep app_name //查看app_name的pid进程

  9). adb shell kill PIDNumber  //杀死后台进程 

 10).adb shell ps  //查看当前终端中的进程信息

  adb shell ps | grep "com.**.update"
  adb shell dumpsys package com.**.update

  adb shell kill pid号

 11).adb shell top -n 1 -d 0.5 | grep proc_ id //查看进程占用cpu的情况

 12).android8.0 settings_system.xml 所在的目录/data/system/users/0
 adb shell settings put system xxxx 

 adb shell settings get system xxx

 adb shell settings put global xxx 0

13).adb shell getprop ro.build.display.id//获取系统属性

14).adb shell wm density 220 //密度修改为220

15).adb shell screencap /sdcard/screen.png 截屏

16).通知类型查看及修改:eg:

adb shell cat /system/etc/ssui_notification | grep "deskclock"
adb pull /data/system/notification_policy.xml
  /system/etc/ssui_notification

17).查找字符串命令

windows查找 adb logcat | findstr "HttpHelper"

linux 查找 adb logcat | grep "HttpHelper"

18).grep -rn "搜索的内容"  路径  //过滤已有文件的日志
eg: grep  -rn "Parameter" /home/test/shell/*

19).adb shell wm size //获取屏幕宽高

      adb shell dumpsys window displays //获取屏幕分辨率

20).adb shell am force-stop com.***.clock//强制停止某个应用

21). adb命令打印activity堆栈

adb shell dumpsys activity activities | sed -En -e '/Running activities/,/Run #0/p'
adb shell dumpsys activity | grep  clock

22).adb shell pm clear com.***.home//清除某个应用的缓存

23).图形设备适配,屏幕切换:
利用现有方形手表适配图形设备:
第一步,把设备分辨率调整为正方形(宽x宽):
adb shell cmd window size 320x320
第二步:打开圆形设备调试开关:1为打开,0为关闭
adb shell settings put global ***_debug_show_round_overlay 1

24).adb shell dumpsys window|grep mFocus //过滤window窗口相关,哪些窗口处于focus状态

4.adb install **.apk //安装**.apk,有时在install后面会添加 -r和-d的命令,分别为强制和降级版本安装apk(eng版本)

5.adb push **.apk  dir //将**.apk 放置到dir目录下,如之前存在则替换(eng版本)

6.adb pull /**.apk  dir //将/**.apk 拷贝出来到dir目录下

7.adb logcat  |  grep  "**" //logcat终端日志中过滤出只含有"**"的日志信息

 adb logcat | grep -i "**"  //-i 不区分大小写

8.adb shell am  broadcast -a action  //模拟action广播

9.adb logcat | grep "AndroidRuntime" //过滤运行错误,过滤多个字符串,用"\|"分割开

adb logcat | grep "AndroidRuntime\|System.err"

二.logcat日志命令

1.EventLog:终端命令

    1).adb logcat -b events

    2).adb logcat -b events -d

    3).logcat -b events -v threadtime

    4).adb logcat -b main

    5).adb logcat -b radio

    6).adb logcat -b system

    7). adb logcat | grep -iE "settingupdate|recovery|uncrypt" 打印系统级log

2.adb logcat  -b events | grep am_  //过滤activity相关日志

三.logcat日志分析(如果event中出现anr,搜索“am_anr”关键字,如果是logcat log,搜索关键字“ANR”,接着需要看/data/anr下traces.txt文件的栈信息再进行分析)

1.查看工具:一般建议用notepad++或者editplus查看比较方便

2.ActivityManager日志相关分析

  1).TagName分析

 am_low_memory //位于AMS.killAllBackgroundProcesses或者AMS.appDiedLocked,记录当前Lru进程队列长度。
 am_pss  //位于AMS.recordPssSampleLocked()
 am_meminfo  //位于AMS.dumpApplicationMemoryUsage
 am_proc_start  //位于AMS.startProcessLocked,启动进程
 am_proc_bound  //位于AMS.attachApplicationLocked
 am_kill  //位于ProcessRecord.kill,杀掉进程
 am_anr  //位于AMS.appNotResponding
 am_crash  //位于AMS.handleApplicationCrashInner
 am_wtf  /位于AMS.handleApplicationWtf
 am_activity_launch_time  //位于ActivityRecord.reportLaunchTimeLocked(),后面两个参数分别是thisTime和 totalTime.
 am_activity_fully_drawn_time  //位于ActivityRecord.reportFullyDrawnLocked, 后面两个参数分别是thisTime和 totalTime
 am_broadcast_discard_filter  //位于BroadcastQueue.logBroadcastReceiverDiscardLocked
 am_broadcast_discard_app  //位于BroadcastQueue.logBroadcastReceiverDiscardLocked

  2).Activity生命周期相关分析

   am_on_resume_called  //位于AT.performResumeActivity
   am_on_paused_called  //位于AT.performPauseActivity, performDestroyActivity
   am_resume_activity  //位于AS.resumeTopActivityInnerLocked
   am_pause_activity  //位于AS.startPausingLocked
   am_finish_activity  //位于AS.finishActivityLocked, removeHistoryRecordsForAppLocked
   am_destroy_activity  //位于AS.destroyActivityLocked
   am_focused_activity  //位于AMS.setFocusedActivityLocked, clearFocusedActivity
   am_restart_activity  //位于ASS.realStartActivityLocked
   am_create_activity  //位于ASS.startActivityUncheckedLocked
   am_new_intent  //位于ASS.startActivityUncheckedLocked
   am_task_to_front  //位于AS.moveTaskToFrontLocked

  3).Window相关分析

   wm_task_moved  //位于TaskStack.positionTask()
  TaskId, toTop ? 1 : 0, position;
  206,1,3,  //是指把TaskId=206的移动到栈顶(即该栈的长度为4)
  am_home_stack_moved  //位于ASS.moveHomeStack
  CurrentUser, toFront ? 1:0 , homStackId, FocusedStackId
  0,1,0,0,   //是指userId=0, home栈顶的StackId=0, 当前focusedStackId=0,

 3.power分析

  power_sleep_requested  //位于PMS.goToSleepNoUpdateLocked
  power_screen_state  //位于Notifer.handleEarlyInteractiveChange, handleLateInteractiveChange

  battery_level: [22,3660,34.8]  //剩余电量22%, 电池电压3.66v, 电池温度34.8℃
  power_screen_state: [0,3,0,0]  // 灭屏状态(0), 屏幕超时(3). 当然还有其他设备管理策略(1),其他理由都为用户行为(2)
  power_screen_state: [1,0,0,0]  // 亮屏状态(1)

4.Activities分析
 1).看焦点activity, 关键字am_focused_activity
    2).进程启动历史, 关键字Start proc
    3).确认设备是否抖动, 关键字am_proc_died和am_proc_start,检查是否在短时间内出现了大量的这样的log

5.android 解锁步骤

adb shell settings put global device_provisioned 1
– boot to Home Screen
– go to setting -> system -> Developer options -> OEM unlocking

– adb reboot bootloader
– fastboot flashing unlock
  (fastboot getvar unlocked)
– press volume up key
– fastboot reboot
– adb root
– adb disable-verity
– adb reboot
– adb root
– adb remount

adb shell getprop "ro.boot.flash.locked",返回值0表示已解锁,1表示未解锁

adb root ; adb disable-verity;adb reboot//adb多条命令执行,可以用分号隔开

6.终端启动gitk提交代码,最后在push orignal
    sudo apt-get install gitk
    sudo apt-get install git-gui