adb shell常用命令

1. linux下 adb连接无权限或必须切换usb到文件传输才可连接、或fastboot无法识别到手机:

      使用时报no permissions (missing udev rules? user is in the plugdev group); see [http://developer.android.com/tools/device.html]  或 直接就识别不到

      解决方法:

$adb start-server
$lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 17ef:6099 Lenovo
Bus 001 Device 002: ID 17ef:608d Lenovo
Bus 001 Device 033: ID 18d1:4ee7 Google Inc. //android xxx
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

$sudo vim /etc/udev/rules.d/90-android.rules

   编辑文本内容为

SUBSYSTEM=="usb",ATTRS{idVendor}=="18d1",ATTRS{idProduct}=="4ee7",MODE="0666",GROUP="plugdev",SYMLINK+="android",SYMLINK+="android_adb"

   需要改的信息为:

ATTRS{idVendor}=="有Google字样此行的ID的左侧数字 我这里是18d1" 
ATTRS{idProduct}=="有Google字样此行的ID的右侧数字 我这里是4ee7"

重启 abd 服务

sudo udevadm control --reload-rules
sudo service udev restart
sudo udevadm trigger
adb kill-server
adb start-server

 

2. 文件中字符串查询

grep -rn "hello,world!" ./  (具体用法可以 grep --help 查看)【grep是默认区分大小写的!但也默认非全词匹配!(但这两点都可以通过参数改变)『opengrok是默认不区分大小写的,却默认全词匹配,正好和grep相反!】
-r 是递归查找
-n 是显示行号
-R 查找所有文件包含子目录
-i 忽略大小写
-l 只列出匹配的文件名
-L 列出不匹配的文件名
-w 只匹配整个单词,而不是字符串的一部分(匹配 hello,不匹配helloo)

或 find / | xargs grep function 查找系统根目录下面的所有文件的内容中包含有function字符串的文件列表。

 

3. 目录查找文件所在位置:

find ./ -name 文件名

 

4. 查看包列表:

adb shell pm list packages [options] <FILTER>

打印所有软件包,可选择只打印软件包名称中包含<FILTER>的软件包。

不使用参数:adb shell pm list packages,打印设备/模拟器上的所有软件包

不使用参数:adb shell pm list packages,打印设备/模拟器上的所有软件包

使用-f参数:adb shell pm list packages -f,输出包和包相关联的文件

使用-d参数:adb shell pm list packages -d,只输出禁用的包。由于本机禁用没有,输出为空。

使用-e参数:adb shell pm list packages -e,只输出启用的包。

使用-s参数:adb shell pm list packages -s,只输出系统的包。

使用-3参数:adb shell pm list packages -3,只输出第三方的包。

使用-i参数:adb shell pm list packages -i,只输出包和安装信息(安装来源)。

使用-u参数:adb shell pm list packages -u,只输出包和未安装包信息(安装来源)。

 

5. 查看某个包路径:

adb shell pm path 包名

 

6. 查看某个包信息:

adb shell dumpsys package com.xxxx.lfeh

 

7. 发广播:

adb shell am broadcast -a "xxxx.intent.action.SIM_LOCK_STATE_CHANGE" --ei "operator_type" 10

也可以adb shell am broadcast -a "xxxx.intent.action.SIM_LOCK_STATE_CHANGE" -e "operator_type" 10

 

8. 启动activity

am start -n com.cota.notification/com.cota.notification.xxxxxActivity --es state "complete" --es display_name "Vodafone"

 

9. adb解锁:

先在开发者选项中选择OEM解锁

adb reboot bootloader

fastboot flashing unlock

选择unlock

 

10. 获取属性值:

adb shell getprop ro.xxx.operator 可以返回运营商

ro.vendor.xxx.operator

adb shell pm -p com.a.b. 返回包所在的手机路径

 

11. 获取手机硬件信息等:

命令adb shell dumpsys engineer --query_indicate_info

OK:WIFI: 38:8a:be:6b:b0:37

WIFI2: null

BT: 38:8A:BE:6B:B0:36

PCBA: 0020031C0C10031200000650

Carrier: 10010111

IMEI1: 869802059893379

IMEI2: 869802059893361

MEID: A00000DDA2F80B

GUID: 093a141bc00d9b1738dcbea70219447437bde4a98691437f40bbaef4ed7bd1a3

Storage: Total:235458252, Used:9310100, Free:226148152

 

12. 动态wm开关启停WMS系列和部分AMS系列bug的ProtoLog(可启停的开关收集于ProtoLogGroup.java文件中):

wm logging enable-text/disable-text [group…]  如: wm logging enable-text WM_DEBUG_STATES

logcat

(  或                   adb shell dumpsys window -d enable                                                       打开全局WindowManager:的log、 

      或                   adb shell dumpsys activity -d enable                                                        打开全局Activity的log

      或                   adb shell setprop sys.inputlog.enbaled true  + adb shell dumpsys input  打开 input log   )

 

13. Logcat使用:

logcat -b all > log.xml (all 会有些eventlog之类,比较全)

adb logcat |findstr abcdefg  (也可以使用grep但grep搜索默认区分大小写的,findstr不清楚)

adb logcat -c (清除之前的log,因为打开logcat后会把之前的log也打印下来)

 

 

14. 允许更新安装已有系统app

adb shell setprop debug.allow.persist.update true

 

15. 屏幕截图:

adb exec-out screencap -p <截图存放路径> 示例: adb exec-out screencap -p /sdcard/img.jpg(将命名为img的截图保存在sd卡中)

adb shell screencap -p filepath

 

16. 屏幕录制:

adb shell screenrecord [--time-limit time] <录制文件存放的路径> --time-limit参数的单位是s,可选可不选,无此参数默认录制时间和最长录制时间为180s。

示例: adb shell screenrecord --time-limit 30 /sdcard/video.mp4(录制一个30s的视频命名为video保存在sd卡中)

 

17. 查看当前界面是哪个Activity:

adb shell dumpsys activity top | grep ACTIVITY
如果未安装 grep for window.exe,请分开执行:

adb shell
dumpsys activity top | grep ACTIVITY

 

18. 强行停止某应用运行

adb shell am force-stop <包名>

 

19. 查看进程:

ps -ef | grep jiolock (查看所有正在运行的e关联jiolock的进程并打印扩展f信息)

lsof -p 1234 (lists列出1234进程号p打开open的所有文件file)(如动态链接库等)

 

20. 查询命令所使用的工具的位置:

which 命令

 

21. linux系统下载\更新代码的命令repo:

repo(一个python脚本工具),repo 文件内写明远程访问路径用户等信息,通过如

repo init -u ssh://xxx@gerrit.rnd.meizu.com:29999/platform/manifest -b 分支名字 的命令下载 .repo 文件(包含仓库信息),再通过repo sync命令按照  .repo文件中的仓库信息下载代码,支持中断后再次sync继续下载。
repo sync -j8 -c -d --no-tags --force-sync 常用下载命令  (具体参数含义可自行搜索)
repo forall -c 'git reset --hard && git clean -df' && repo sync -j8 -c -d --no-tags  清理脏代码 (所有代码执行git命令,回退到HEAD)

 

22. 使用tee工具将输出到终端的信息同时打印到文件:

命令内容 | tee qssi.log

 

23. 查看硬盘各个目录容量和使用量:

df -h

查看指定目录总共占的容量,而不单独列出各子项占用的容量:

du -sh 【指定的目录】

 

24. 查看某目录结构:

tree -L 5  【指定目录】 (以树状结构输出目录下5层的结构)(不想显示文件可以用-d)

 

25. 查看手机所有通过ServiceManager.addService添加到manager里的运行的Service

service list

 

26. 调用service代码里实现的dump函数

adb shell dumpsys activity service com.flyme.mobileservice/.fcts.FCTSService + 自定义的命令(空格为分割符)

 

27. 通过仓库名查找对应代码路径

在.repo/manifests目录下执行grep -rn -A2 仓库名(注意大小写)   就找到path了
xjsd@xjsh01601:/media/disk1/flyme/EcarxP417/.repo/manifests$ grep -rn -A2 ecarxbus
ecarx-cn-overrides.xml:101:    name="ecarx/android/vendor/packages/ecarxbusinessservice"
ecarx-cn-overrides.xml-102-    path="android/vendor/ecarx/packages/EcarxBusinessService"
ecarx-cn-overrides.xml-103-    revision="verify_p417_cn" />

 

28. 更新各个仓库的新增分支情况

在.repo/manifests目录下执行git pull
xjsd@xjsh01601:/media/disk1/flyme/EcarxP417/.repo/manifests$ git pull
Warning: Permanently added '[gerrit.ecarxgroup.com]:29418,[10.168.59.127]:29418' (ECDSA) to the list of known hosts.
remote: Counting objects: 20727, done
remote: Finding sources: 100% (1508/1508)
remote: Total 1508 (delta 492), reused 807 (delta 492)
接收对象中: 100% (1508/1508), 1.56 MiB | 879.00 KiB/s, 完成.
处理 delta 中: 100% (492/492), 完成 2 个本地对象.
来自 ssh://gerrit.ecarxgroup.com:29418/p417-cn/ecarx/manifest
 * [新分支]              0229_input2                                    -> origin/0229_input2
 * [新分支]              0301/EESB-60729                                -> origin/0301/EESB-60729
 * [新分支]              0301_test_chrome                               -> origin/0301_test_chrome
 * [新分支]              EESB-53508                                     -> origin/EESB-53508
 * [新分支]              EESB-53512_pascd                               -> origin/EESB-53512_pascd
 * [新分支]              EESB-54233                                     -> origin/EESB-54233

 

29. Android编译命令m、mm、mmm区别及工程搭建示例

要使用m、mm、mmm命令对Android代码进行模块编译,需要先执行如下命令初始化环境。
    source build/envsetup.sh
    lunch
执行lunch时一般会通过命令行提示选择版型,输入对应的序号回车即可。

各命令作用及用法:
   mmm命令:编译指定路径下的模块,需要指定模块路径(必须为该模块的根目录,包含Android.mk的目录)。
   mm命令:编译当前目录下的模块,需要进到模块所在目录,本质上跟mmm没什么区别。
   m命令:编译全部模块。

或直接bash build.sh -j16 dist --qssi_only 2>&1 | tee mars.log这种公司常见编译命令

posted @ 2022-03-25 14:57  小汀  阅读(1685)  评论(0编辑  收藏  举报