一.adb的常用命令
1.adb下直接拉起当前应用
eg: am start -n com.android.settings/.FallbackHome
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 //查看当前终端中的进程信息
11).adb shell top -n 1 -d 0.5 | grep proc_ id //查看进程占用cpu的情况
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" //过滤运行错误
二.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
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