一.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