ADB命令看完这篇就够了 |
您所在的位置:网站首页 › adb命令修改文件权限 › ADB命令看完这篇就够了 |
欢迎关注公众号[喵先生课堂] adb是什么? adb的全称为Android Debug Bridge。通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具,默认端口为5037。 adb有什么用? 借助adb工具,我们可以管理设备或手机模拟器的状态。还可以进行很多手机操作,如安装软件、系统升级、运行shell命令等等。其实简而言说,adb就是连接Android手机与PC端的桥梁,可以让用户在电脑上对手机进行全面的操作! 环境搭建 本文以windows为例: adb 的安装可以有多种方式: 直接下载adb相关文件到本地。通SDK 平台工具(https://developer.android.com/studio/releases/platform-tools?hl=zh_cn)下载 SDK Platform Tools。下载Android 的SDk(文件较大,包含上述两个文件)。这里以下载 SDK Platform Tools 为例: 访问SDK平台工具(https://developer.android.com/studio/releases/platform-tools?hl=zh_cn), 在"下载"一栏中选择 "下载适用于Windows的SDK Platform-Tools",点击直接下载即可。解压已下载的SDK Platform-Tools文件夹,路径最好不要存在中文,以免出现不必要的麻烦。添加环境变量:找到 “此电脑”,右键选择属性-->高级系统设置-->环境变量,在系统变量中找到 “Path” 项,选中并点击“编辑”,将“SDK Platform-Tools”文件夹的绝对路径添加到Path中,依次点击确定即可。按住 win+R 键打开cmd窗口,输入"adb version",展示adb版本信息即表示安装成功。——————————————————————————————— 基本用法 启动/停止: 启动 adb server 命令: adb start-server停止 adb server 命令: adb kill-server查看 adb 版本命令: adb version示例输出: Android Debug Bridge version 1.0.41指定 adb server 的网络端口: adb -P start-server默认端口为 5037。 设备连接管理 查询已连接设备/模拟器: adb devices输出示例: List of devices attached APH7N19529019277 device输出格式为 [serialNumber] [state],serialNumber 即SN,state 有如下几种: `offline` —— 表示设备未连接成功或无响应。 `device` —— 设备已连接。注意这个状态并不能标识 Android 系统已经完全启动和可操作,在设备启动过程中设备实例就可连接到 adb,但启动完毕后系统才处于可操作状态。 `no device` —— 没有设备/模拟器连接。以上输出显示当前已经连接了三台设备/模拟器 常见异常输出: 没有设备/模拟器连接成功。List of devices attached设备/模拟器未连接到 adb 或无响应。List of devices attached cf264b8f offlineUSB 连接 通过 USB 连接来正常使用 adb 需要保证几点: 硬件状态正常。包括 Android 设备处于正常开机状态,USB 连接线和各种接口完好。Android 设备的开发者选项和 USB 调试模式已开启。可以到「设置」-「开发者选项」-「Android 调试」查看。如果在设置里找不到开发者选项,那需要通过一个彩蛋来让它显示出来:在「设置」-「关于手机」连续点击「版本号」7 次。设备驱动状态正常。这一点貌似在 Linux 和 Mac OS X 下不用操心,在 Windows 下有可能遇到需要安装驱动的情况,确认这一点可以右键「计算机」-「属性」,到「设备管理器」里查看相关设备上是否有黄色感叹号或问号,如果没有就说明驱动状态已经好了。否则可以下载一个手机助手类程序来安装驱动先。通过 USB 线连接好电脑和设备后确认状态。adb devices如果能看到 xxxxxx device说明连接成功。 应用管理 查看应用列表 adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]即在 `adb shell pm list packages` 的基础上可以加一些参数进行过滤查看不同的列表,支持的过滤参数如下: 参数显示列表无所有应用-f显示应用关联的 apk 文件参数-d只显示 disabled 的应用-e只显示 enabled 的应用-s只显示系统应用-3只显示第三方应用-i显示应用的 installer-u包含已卸载应用``包名包含 `` 字符串所有应用命令: adb shell pm list packages输出示例: package:com.taobao.taobao package:com.huawei.ca package:com.huawei.skytone package:com.huawei.assetsyncservice package:jnhyjt.tjgamsfwpt.tjga package:com.qq.qcloud package:com.huawei.aod package:com.huawei.def package:com.huawei.hbm package:com.huawei.hff package:com.huawei.ims package:com.huawei.lbs package:com.android.bluetooth package:com.xiaomi.hm.health package:com.ggyd.EarPro package:com.android.providers.contacts package:com.netease.cloudmusic package:tv.danmaku.bili package:com.android.captiveportallogin package:com.huawei.audioaccessorymanager package:com.huawei.hiaction package:com.huawei.trustedthingsauth package:com.eg.android.AlipayGphone package:com.huawei.android.airsharing package:cn.wps.moffice_eng package:com.huawei.rcsserviceapplication package:com.lucky.luckyclient package:com.huawei.ohos.famanager ...查看系统应用: adb shell pm list packages -s查看第三方应用: adb shell pm list packages -3包名包含某字符串的应用: adb shell pm list packages jingdong使用 grep 过滤(windows 改用 findstr): adb shell pm list packages | grep jingdong安装 APK命令格式: adb install [-lrtsdg]参数: `adb install` 后面可以跟一些可选参数来控制安装 APK 的行为,可用参数及含义如下: 参数含义-l将应用安装到保护目录 /mnt/asec-r允许覆盖安装(常用)-t允许安装 AndroidManifest.xml 里 application 指定 `android:testOnly="true"` 的应用-s将应用安装到 sdcard-d允许降级覆盖安装(常用)-g授予所有运行时权限(常用)运行后如果见到类似如下输出(状态为 `Success`)代表安装成功: [100%] /data/local/tmp/1.apk pkg: /data/local/tmp/1.apk Success而如果状态为 `Failure` 则表示安装失败,比如: [100%] /data/local/tmp/map-20160831.apk pkg: /data/local/tmp/map-20160831.apk Failure [INSTALL_FAILED_ALREADY_EXISTS]卸载应用命令: adb uninstall [-k]`` 表示应用的包名,`-k` 参数可选,表示卸载应用但保留数据和缓存目录。 命令示例: adb uninstall -k com.jingdong.app.mall表示卸载 京东App。 清除应用数据与缓存命令: adb shell pm clear命令示例: adb shell pm clear com.jingdong.app.mall清除 京东App的数据和缓存。 查看前台 Activity命令: adb shell dumpsys activity activities | grep mResumedActivity输出示例: mResumedActivity: ActivityRecord{c6b5f44 u0 com.tencent.mm/.ui.LauncherUI t36978}其中的 `com.tencent.mm/.ui.LauncherUI` 就是当前处于前台的 Activity。 *在 Windows 可以尝试 `adb shell dumpsys activity activities | findstr mResumedActivity` 查看正在运行的 Services命令: adb shell dumpsys activity services []查看应用详细信息命令: adb shell dumpsys package输出中包含很多信息,包括 Activity Resolver Table、Registered ContentProviders、包名、userId、安装后的文件资源代码等路径、版本信息、权限信息和授予状态、签名版本信息等。 `` 表示应用包名。 输出示例: Activity Resolver Table: Full MIME Types: vnd.android.cursor.item/vnd.com.tencent.mm.chatting.profile: be9b872 com.tencent.mm/.plugin.account.ui.ContactsSyncUI filter be5cecc Action: "android.intent.action.VIEW" Action: "com.tencent.mm.login.ACTION_LOGIN" Category: "android.intent.category.DEFAULT" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.login" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.chatting.profile" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.chatting.voip" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.chatting.voip.video" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.plugin.sns.timeline" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.chatting.phonenum" vnd.android.cursor.item/vnd.com.tencent.mm.plugin.sns.timeline: be9b872 com.tencent.mm/.plugin.account.ui.ContactsSyncUI filter be5cecc Action: "android.intent.action.VIEW" Action: "com.tencent.mm.login.ACTION_LOGIN" Category: "android.intent.category.DEFAULT" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.login" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.chatting.profile" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.chatting.voip" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.chatting.voip.video" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.plugin.sns.timeline" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.chatting.phonenum" application/*: be5c38a com.tencent.mm/.ui.tools.ShareImgUI filter be2b1c3 Action: "android.intent.action.SEND" Category: "android.intent.category.DEFAULT" Type: "image" Type: "video" Type: "text" Type: "application" mPriority=0, mOrder=0, mHasPartialTypes=true be5c398 com.tencent.mm/.ui.tools.AddFavoriteUI filter be2b1ea Action: "android.intent.action.SEND" Category: "android.intent.category.DEFAULT" Type: "image" Type: "video" Type: "text" Type: "application" Type: "audio" mPriority=0, mOrder=0, mHasPartialTypes=true vnd.android.cursor.item/vnd.com.tencent.mm.chatting.voip: be9b872 com.tencent.mm/.plugin.account.ui.ContactsSyncUI filter be5cecc Action: "android.intent.action.VIEW" Action: "com.tencent.mm.login.ACTION_LOGIN" Category: "android.intent.category.DEFAULT" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.login" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.chatting.profile" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.chatting.voip" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.chatting.voip.video" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.plugin.sns.timeline" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.chatting.phonenum" text/*: be5c38a com.tencent.mm/.ui.tools.ShareImgUI filter be2b1c3 Action: "android.intent.action.SEND" Category: "android.intent.category.DEFAULT" Type: "image" Type: "video" Type: "text" Type: "application" mPriority=0, mOrder=0, mHasPartialTypes=true be5c398 com.tencent.mm/.ui.tools.AddFavoriteUI filter be2b1ea Action: "android.intent.action.SEND" Category: "android.intent.category.DEFAULT" Type: "image" Type: "video" Type: "text" Type: "application" Type: "audio" mPriority=0, mOrder=0, mHasPartialTypes=true audio/*: be5c398 com.tencent.mm/.ui.tools.AddFavoriteUI filter be2b1ea Action: "android.intent.action.SEND" Category: "android.intent.category.DEFAULT" Type: "image" Type: "video" Type: "text" Type: "application" Type: "audio" mPriority=0, mOrder=0, mHasPartialTypes=true vnd.android.cursor.item/vnd.com.tencent.mm.chatting.phonenum: be9b872 com.tencent.mm/.plugin.account.ui.ContactsSyncUI filter be5cecc Action: "android.intent.action.VIEW" Action: "com.tencent.mm.login.ACTION_LOGIN" Category: "android.intent.category.DEFAULT" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.login" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.chatting.profile" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.chatting.voip" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.chatting.voip.video" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.plugin.sns.timeline" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.chatting.phonenum" vnd.android.cursor.item/vnd.com.tencent.mm.chatting.voip.video: be9b872 com.tencent.mm/.plugin.account.ui.ContactsSyncUI filter be5cecc Action: "android.intent.action.VIEW" Action: "com.tencent.mm.login.ACTION_LOGIN" Category: "android.intent.category.DEFAULT" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.login" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.chatting.profile" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.chatting.voip" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.chatting.voip.video" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.plugin.sns.timeline" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.chatting.phonenum" vnd.android.cursor.item/vnd.com.tencent.mm.login: be9b872 com.tencent.mm/.plugin.account.ui.ContactsSyncUI filter be5cecc Action: "android.intent.action.VIEW" Action: "com.tencent.mm.login.ACTION_LOGIN" Category: "android.intent.category.DEFAULT" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.login" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.chatting.profile" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.chatting.voip" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.chatting.voip.video" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.plugin.sns.timeline" Type: "vnd.android.cursor.item/vnd.com.tencent.mm.chatting.phonenum" video/*: be5c38a com.tencent.mm/.ui.tools.ShareImgUI filter be2b1c3 Action: "android.intent.action.SEND" Category: "android.intent.category.DEFAULT" Type: "image" Type: "video" Type: "text" Type: "application" mPriority=0, mOrder=0, mHasPartialTypes=true be5c391 com.tencent.mm/.ui.tools.ShareToStatusUI filter be2b1dd Action: "android.intent.action.SEND" Category: "android.intent.category.DEFAULT" Type: "image" Type: "video" mPriority=0, mOrder=0, mHasPartialTypes=true be5c398 com.tencent.mm/.ui.tools.AddFavoriteUI filter be2b1ea Action: "android.intent.action.SEND" Category: "android.intent.category.DEFAULT" Type: "image" Type: "video" Type: "text" Type: "application" Type: "audio" mPriority=0, mOrder=0, mHasPartialTypes=true */heic: be5c3bb com.tencent.mm/.ui.tools.ShareScreenImgUI filter be5ce23 Action: "android.intent.action.VIEW" Category: "android.intent.category.DEFAULT" Type: "image" Type: "*/heic" mPriority=0, mOrder=0, mHasPartialTypes=true be5c3c9 com.tencent.mm/.ui.tools.ShareScreenToTimeLineUI filter be5ce3d Action: "android.intent.action.VIEW" Category: "android.intent.category.DEFAULT" Type: "image" Type: "*/heic" mPriority=0, mOrder=0, mHasPartialTypes=true image/*: be5c38a com.tencent.mm/.ui.tools.ShareImgUI filter be2b1c3 Action: "android.intent.action.SEND" Category: "android.intent.category.DEFAULT" Type: "image" Type: "video" Type: "text" Type: "application" mPriority=0, mOrder=0, mHasPartialTypes=true be5c38a com.tencent.mm/.ui.tools.ShareImgUI filter be2b1d0 Action: "android.intent.action.SEND_MULTIPLE" Category: "android.intent.category.DEFAULT" Type: "image" mPriority=0, mOrder=0, mHasPartialTypes=true be5c391 com.tencent.mm/.ui.tools.ShareToStatusUI filter be2b1dd Action: "android.intent.action.SEND" Category: "android.intent.category.DEFAULT" Type: "image" Type: "video" mPriority=0, mOrder=0, mHasPartialTypes=true be5c398 com.tencent.mm/.ui.tools.AddFavoriteUI filter be2b1ea Action: "android.intent.action.SEND" Category: "android.intent.category.DEFAULT" Type: "image" Type: "video" Type: "text" Type: "application" Type: "audio" mPriority=0, mOrder=0, mHasPartialTypes=true be5c398 com.tencent.mm/.ui.tools.AddFavoriteUI filter be5ce09 Action: "android.intent.action.SEND_MULTIPLE" Category: "android.intent.category.DEFAULT" Type: "image" mPriority=0, mOrder=0, mHasPartialTypes=true be5c39f com.tencent.mm/.ui.tools.ShareToTimeLineUI filter be5ce16 Action: "android.intent.action.SEND" Category: "android.intent.category.DEFAULT" Type: "image" mPriority=0, mOrder=0, mHasPartialTypes=true be5c3bb com.tencent.mm/.ui.tools.ShareScreenImgUI filter be5ce23 Action: "android.intent.action.VIEW" Category: "android.intent.category.DEFAULT" Type: "image" Type: "*/heic" mPriority=0, mOrder=0, mHasPartialTypes=true be5c3c9 com.tencent.mm/.ui.tools.ShareScreenToTimeLineUI filter be5ce3d Action: "android.intent.action.VIEW" Category: "android.intent.category.DEFAULT" Type: "image" Type: "*/heic" mPriority=0, mOrder=0, mHasPartialTypes=true查看应用安装路径命令: adb shell pm path输出应用安装路径 输出示例: adb shell pm path com.tencent.mm package:/data/app/com.tencent.mm-Khc5y5damU6A9MMQerHRgA==/base.apk启动应用/ 调起 Activity 指定Activity名称启动命令格式:adb shell am start [options]例如: adb shell am start -n com.tencent.mm/.ui.LauncherUI表示调起微信主界面。 强制停止应用命令: adb shell am force-stop命令示例: adb shell am force-stop com.tencent.mm表示停止 微信的一切进程与服务。 文件管理 复制设备里的文件到电脑命令: adb pull [电脑上的存放目录]其中 `电脑上的目录` 参数可以省略,默认复制到当前目录。 例: adb pull /sdcard/adn.mp4 ~/tmp/复制电脑里的文件到设备命令: adb push例: adb push ~/adb.mp4 /sdcard/模拟按键/输入 `adb shell input` ,通过它可以做很多事情。 比如使用 `adb shell input keyevent ` 命令,不同的 keycode 能实现不同的功能,完整的 keycode 列表详(https://developer.android.com/reference/android/view/KeyEvent.html),摘引部分如下: keycode含义3HOME 键4返回键5打开拨号应用6挂断电话24增加音量25降低音量26电源键27拍照(需要在相机应用里)64 打开浏览器82菜单键85播放/暂停86停止播放87播放下一首88播放上一首122移动光标到行首或列表顶部123移动光标到行末或列表底部126恢复播放127暂停播放164静音176打开系统设置187切换应用207打开联系人208打开日历209打开音乐210 打开计算器220降低屏幕亮度221提高屏幕亮度223系统休眠224点亮屏幕231打开语音助手276如果没有 wakelock 则让系统休眠下面是 `input` 命令的一些用法举例。 电源键命令: adb shell input keyevent 26执行效果相当于按电源键。 菜单键命令: adb shell input keyevent 82其它命令使用方式如上,这里不再做过多演示 滑动解锁 锁屏通过滑动手势解锁,可以通过 `input swipe` 来实现。: adb shell input swipe 300 1000 300 500参数 `300 1000 300 500` 分别表示`起始点x坐标 起始点y坐标 结束点x坐标 结束点y坐标`。 输入文本 点击某文本框后,可以通过 `input` 命令来输入文本: adb shell input text hello现在 `hello` 出现在文本框了。 查看日志 Android 日志命令: [adb] logcat [] ... [] ...常用用法列举如下: #### 按级别过滤日志 Android 的日志优先级(priority): V —— Verbose(最低,输出得最多)D —— DebugI —— InfoW —— WarningE —— ErrorF —— FatalS —— Silent(最高,啥也不输出)按某级别过滤日志则会将该级别及以上的日志输出。 比如,命令: adb logcat *:W会将 Warning、Error、Fatal 和 Silent 日志输出。 按 tag 和级别过滤日志 `` 可以由多个 `[:priority]` 组成。 比如,命令: adb logcat ActivityManager:I MyApp:D *:S表示输出 tag `ActivityManager` 的 Info 以上级别日志,输出 tag `MyApp` 的 Debug 以上级别日志,及其它 tag 的 Silent 级别日志(即屏蔽其它 tag 日志)。 日志格式 可以用 `adb logcat -v ` 选项指定日志输出格式。 日志支持按以下几种 ``: * brief 默认格式。格式为: /():示例: D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0* process 格式为: ()示例: D( 1785) Disconnected process message: 10, size: 0 (HeadsetStateMachine)* tag 格式为/: 示例: D/HeadsetStateMachine: Disconnected process message: 10, size: 0* raw 格式为: 示例: Disconnected process message: 10, size: 0* time 格式为: /():示例: 08-28 22:39:39.974 D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0* threadtime 格式为: :示例: 08-28 22:39:39.974 1785 1832 D HeadsetStateMachine: Disconnected process message: 10, size: 0* long 格式为: [ : / ]示例: [ 08-28 22:39:39.974 1785: 1832 D/HeadsetStateMachine ] Disconnected process message: 10, size: 0指定格式可与上面的过滤同时使用。比如: adb logcat -v long ActivityManager:I *:S清空日志 adb logcat -c内核日志 adb shell dmesg输出示例: [14201.684016] PM: noirq resume of devices complete after 0.982 msecs [14201.685525] PM: early resume of devices complete after 0.838 msecs [14201.753642] PM: resume of devices complete after 68.106 msecs [14201.755954] Restarting tasks ... done. [14201.771229] PM: suspend exit 2016-08-28 13:31:32.679217193 UTC [14201.872373] PM: suspend entry 2016-08-28 13:31:32.780363596 UTC [14201.872498] PM: Syncing filesystems ... done.中括号里的 `[14201.684016]` 代表内核开始启动后的时间,单位为秒。 通过内核日志我们可以做一些事情,比如衡量内核启动时间,在系统启动完毕后的内核日志里找到 `Freeing init memory` 那一行前面的时间就是。 查看设备信息 型号命令: adb shell getprop ro.product.model输出示例: VOG-AL10电池状况 adb shell dumpsys battery输入示例: Current Battery Service state: AC powered: false USB powered: true Wireless powered: false Max charging current: 500000 Max charging voltage: 4718000 Charge counter: 450000 status: 2 health: 2 present: true level: 85 scale: 100 voltage: 4203 temperature: 240 technology: Li-poly其中 `scale` 代表最大电量,`level` 代表当前电量。上面的输出表示还剩下 44% 的电量。 屏幕分辨率 adb shell wm size输出示例: Physical size: 1080x2340该设备屏幕分辨率为 1080px * 2340px。 屏幕密度 adb shell wm density输出示例: Physical density: 480显示屏参数 adb shell dumpsys window displays输出示例: WINDOW MANAGER DISPLAY CONTENTS (dumpsys window displays) Display: mDisplayId=0 init=1080x2340 480dpi cur=1080x2340 app=1080x2265 rng=1080x1005-2265x2265 deferred=false mLayoutNeeded=false mTouchExcludeRegion=SkRegion((0,0,1080,2458)) mLayoutSeq=355690 mDeferredRotationPauseCount=0 mCurrentFocus=Window{c5dd371 u0 com.tencent.mm/com.tencent.mm.ui.LauncherUI} mFocusedApp=AppWindowToken{c67d8b1 token=Token{c617f21 ActivityRecord{c04d409 u0 com.tencent.mm/.ui.LauncherUI t37102}}} mLastStatusBarVisibility=0xa518 displayId=0 mWallpaperTarget=null mLastWallpaperX=0.5 mLastWallpaperY=0.5 mDeferUpdateImeTargetCount=0 ...android\_id adb shell settings get secure android_id输出示例: aadf190ed474a1ae Android 系统版本 adb shell getprop ro.build.version.release输出示例: 10CPU 信息 adb shell cat /proc/cpuinfo输出示例: Processor : AArch64 Processor rev 0 (aarch64) processor : 0 BogoMIPS : 3.84 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp CPU implementer : 0x41 CPU architecture: 8 CPU variant : 0x1 CPU part : 0xd05 CPU revision : 0 processor : 1 BogoMIPS : 3.84 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp CPU implementer : 0x41 CPU architecture: 8 CPU variant : 0x1 CPU part : 0xd05 CPU revision : 0 processor : 2 BogoMIPS : 3.84 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp CPU implementer : 0x41 CPU architecture: 8 CPU variant : 0x1 CPU part : 0xd05 CPU revision : 0 processor : 3 BogoMIPS : 3.84 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp CPU implementer : 0x41 CPU architecture: 8 CPU variant : 0x1 CPU part : 0xd05 CPU revision : 0 processor : 4 BogoMIPS : 3.84 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp CPU implementer : 0x48 CPU architecture: 8 CPU variant : 0x1 CPU part : 0xd40 CPU revision : 0 processor : 5 BogoMIPS : 3.84 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp CPU implementer : 0x48 CPU architecture: 8 CPU variant : 0x1 CPU part : 0xd40 CPU revision : 0 processor : 6 BogoMIPS : 3.84 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp CPU implementer : 0x48 CPU architecture: 8 CPU variant : 0x1 CPU part : 0xd40 CPU revision : 0 processor : 7 BogoMIPS : 3.84 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp CPU implementer : 0x48 CPU architecture: 8 CPU variant : 0x1 CPU part : 0xd40 CPU revision : 0 Hardware : vendor Kirin980这是华为P30pro 的 CPU 信息 内存信息 adb shell cat /proc/meminfo输出示例: MemTotal: 7789200 kB MemFree: 552980 kB MemAvailable: 3076176 kB Buffers: 8228 kB Cached: 2675048 kB SwapCached: 35740 kB Active: 1518432 kB Inactive: 2521564 kB Active(anon): 313244 kB Inactive(anon): 1172720 kB Active(file): 1205188 kB Inactive(file): 1348844 kB Unevictable: 154676 kB Mlocked: 154676 kB SwapTotal: 4194300 kB SwapFree: 1386624 kB Dirty: 76 kB Writeback: 0 kB AnonPages: 1505672 kB Mapped: 1369448 kB Shmem: 42384 kB Slab: 558428 kB SReclaimable: 215332 kB SUnreclaim: 343096 kB SlabLarge: 16224 kB KernelStack: 113808 kB PageTables: 141496 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 8088900 kB Committed_AS: 118311256 kB VmallocTotal: 262143936 kB VmallocUsed: 0 kB VmallocChunk: 0 kB CmaTotal: 1187840 kB CmaFree: 0 kB IonTotalCache: 0 kB IonTotalUsed: 282752 kB Protected: 0 kB RsvTotalUsed: 361988 kB其中,`MemTotal` 就是设备的总内存,`MemFree` 是当前空闲内存。 修改设置 **注:** 修改设置之后,运行恢复命令有可能显示仍然不太正常,可以运行 `adb reboot` 重启设备,或手动重启。 修改设置的原理主要是通过 settings 命令修改 /data/data/com.android.providers.settings/databases/settings.db 里存放的设置值。 分辨率 adb shell wm size 480x1024表示将分辨率修改为 480px * 1024px。 恢复原分辨率命令: adb shell wm size reset屏幕密度 adb shell wm density 160表示将屏幕密度修改为 160dpi。 恢复原屏幕密度命令: adb shell wm density reset显示区域 adb shell wm overscan 0,0,0,200四个数字分别表示距离左、上、右、下边缘的留白像素,以上命令表示将屏幕底部 200px 留白。 恢复原显示区域命令: adb shell wm overscan reset关闭 USB 调试模式 恢复: 用命令恢复不了了,毕竟关闭了 USB 调试 adb 就连接不上 Android 设备了。 去设备上手动恢复吧:「设置」-「开发者选项」-「Android 调试」。 允许/禁止访问非 SDK API 允许访问非 SDK API: adb shell settings put global hidden_api_policy_pre_p_apps 1 adb shell settings put global hidden_api_policy_p_apps 1禁止访问非 SDK API: adb shell settings delete global hidden_api_policy_pre_p_apps adb shell settings delete global hidden_api_policy_p_apps不需要设备获得 Root 权限。 命令最后的数字的含义: 值含义0禁止检测非 SDK 接口的调用。该情况下,日志记录功能被禁用,并且令 strict mode API,即 detectNonSdkApiUsage() 无效。不推荐1仅警告——允许访问所有非 SDK 接口,但保留日志中的警告信息,可继续使用 strick mode API2禁止调用深灰名单和黑名单中的接口3禁止调用黑名单中的接口,但允许调用深灰名单中的接口状态栏和导航栏的显示隐藏 本节所说的相关设置对应 Cyanogenmod 里的「扩展桌面」。 adb shell settings put global policy_control`` 可由如下几种键及其对应的值组成,格式为 `=:=`。 key含义immersive.full同时隐藏immersive.status隐藏状态栏immersive.navigation隐藏导航栏mmersive.preconfirms?这些键对应的值可则如下值用逗号组合: value含义apps所有应用*所有界面packagename指定应用-packagename排除指定应用例如: adb shell settings put global policy_control immersive.full=*表示设置在所有界面下都同时隐藏状态栏和导航栏。 adb shell settings put global policy_control immersive.status=com.package1,com.package2:immersive.navigation=apps,-com.package3表示设置在包名为 `com.package1` 和 `com.package2` 的应用里隐藏状态栏,在除了包名为 `com.package3` 的所有应用里隐藏导航栏。 实用功能 屏幕截图 截图保存到电脑: adb exec-out screencap -p > sc.png如果 adb 版本较老,无法使用 `exec-out` 命令,这时候建议更新 adb 版本。无法更新的话可以使用以下麻烦点的办法: 先截图保存到设备里: adb shell screencap -p /sdcard/sc.png然后将 png 文件导出到电脑: adb pull /sdcard/sc.png录制屏幕 录制屏幕以 mp4 格式保存到 /sdcard: adb shell screenrecord /sdcard/filename.mp4需要停止时按 Ctrl-C,默认录制时间和最长录制时间都是 180 秒。 如果需要导出到电脑: adb pull /sdcard/filename.mp4可以使用 `adb shell screenrecord --help` 查看 `screenrecord` 命令的帮助信息,下面是常见参数及含义: 参数含义--size WIDTHxHEIGHT视频的尺寸,比如 `1280x720`,默认是屏幕分辨率。--bit-rate RATE视频的比特率,默认是 4Mbps。--time-limit TIME录制时长,单位秒--verbose输出更多信息。设置系统日期和时间 **注:需要 root 权限。** adb shell su date -s 20160823.131500表示将系统日期和时间更改为 2016 年 08 月 23 日 13 点 15 分 00 秒。 重启手机 adb reboot检测设备是否已 root adb shell此时命令行提示符是 `$` 则表示没有 root 权限,是 `#` 则表示已 root。 使用 Monkey 进行压力测试 Monkey 可以生成伪随机用户事件来模拟单击、触摸、手势等操作,可以对正在开发中的程序进行随机压力测试。 简单用法: adb shell monkey -p -v 500表示向 `` 指定的应用程序发送 500 个伪随机事件。 Monkey 的详细用法参考 官方文档(https://developer.android.com/studio/test/monkey.html)。 Android 系统是基于 Linux 内核的,所以 Linux 里的很多命令在 Android 里也有相同或类似的实现,在 `adb shell` 里可以调用。本文档前面的部分内容已经用到了 `adb shell` 命令。 查看进程 adb shell ps输出示例: USER PID PPID VSZ RSS WCHAN ADDR S NAME root 1 0 78156 3180 0 0 S init root 2 0 0 0 0 0 S [kthreadd] root 3 2 0 0 0 0 I [rcu_gp] root 7 2 0 0 0 0 I [mm_percpu_wq] root 8 2 0 0 0 0 S [ksoftirqd/0] root 9 2 0 0 0 0 I [rcu_preempt] root 10 2 0 0 0 0 I [rcu_sched] root 11 2 0 0 0 0 I [rcu_bh] root 12 2 0 0 0 0 S [migration/0] root 13 2 0 0 0 0 S [watchdog/0] root 14 2 0 0 0 0 S [cpuhp/0] root 15 2 0 0 0 0 S [cpuhp/1] root 16 2 0 0 0 0 S [watchdog/1] root 17 2 0 0 0 0 S [migration/1] root 18 2 0 0 0 0 S [ksoftirqd/1] root 20 2 0 0 0 0 I [kworker/1:0H] root 21 2 0 0 0 0 S [cpuhp/2] root 22 2 0 0 0 0 S [watchdog/2] root 23 2 0 0 0 0 S [migration/2] root 24 2 0 0 0 0 S [ksoftirqd/2] root 27 2 0 0 0 0 S [cpuhp/3] root 28 2 0 0 0 0 S [watchdog/3] root 29 2 0 0 0 0 S [migration/3] root 30 2 0 0 0 0 S [ksoftirqd/3] root 32 2 0 0 0 0 I [kworker/3:0H] root 33 2 0 0 0 0 S [cpuhp/4] root 34 2 0 0 0 0 S [watchdog/4] root 35 2 0 0 0 0 S [migration/4] root 36 2 0 0 0 0 S [ksoftirqd/4] root 38 2 0 0 0 0 I [kworker/4:0H] root 39 2 0 0 0 0 S [cpuhp/5] root 40 2 0 0 0 0 S [watchdog/5] root 41 2 0 0 0 0 S [migration/5] root 42 2 0 0 0 0 S [ksoftirqd/5] root 44 2 0 0 0 0 I [kworker/5:0H] root 45 2 0 0 0 0 S [cpuhp/6] root 46 2 0 0 0 0 S [watchdog/6] root 47 2 0 0 0 0 S [migration/6] root 48 2 0 0 0 0 S [ksoftirqd/6] root 50 2 0 0 0 0 I [kworker/6:0H] root 51 2 0 0 0 0 S [cpuhp/7] root 52 2 0 0 0 0 S [watchdog/7] root 53 2 0 0 0 0 S [migration/7] root 54 2 0 0 0 0 S [ksoftirqd/7] root 56 2 0 0 0 0 I [kworker/7:0H] root 58 2 0 0 0 0 D [bbox_main] root 60 2 0 0 0 0 D [bbox_cleartext] root 62 2 0 0 0 0 S [mailbox-10] root 63 2 0 0 0 0 S [mailbox-11] root 64 2 0 0 0 0 S [mailbox-12] root 65 2 0 0 0 0 S [mailbox-13] root 66 2 0 0 0 0 S [mailbox-14] root 67 2 0 0 0 0 S [mailbox-15] root 68 2 0 0 0 0 S [mailbox-16] root 69 2 0 0 0 0 S [mailbox-17] root 70 2 0 0 0 0 S [mailbox-18] root 71 2 0 0 0 0 S [mailbox-23] root 72 2 0 0 0 0 S [mailbox-25] root 73 2 0 0 0 0 S [mailbox-26] root 74 2 0 0 0 0 S [mailbox-27] root 75 2 0 0 0 0 S [mailbox-28] root 76 2 0 0 0 0 S [mailbox-29] root 77 2 0 0 0 0 S [ao-mailbox-0] root 79 2 0 0 0 0 S [khungtaskd] root 80 2 0 0 0 0 I [init_wdt_wkq] root 81 2 0 0 0 0 S [oom_reaper] root 82 2 0 0 0 0 I [writeback] root 83 2 0 0 0 0 S [kcompactd0] root 84 2 0 0 0 0 I [crypto] root 85 2 0 0 0 0 I [kblockd] root 86 2 0 0 0 0 I [io_latency_work] root 87 2 0 0 0 0 I [dsm_wq] root 88 2 0 0 0 0 S [spi3] root 90 2 0 0 0 0 S [irq/148-hisi_pm] root 91 2 0 0 0 0 S [sys_pool] root 92 2 0 0 0 0 S [sys_heap] root 93 2 0 0 0 0 S [camera_daemonhe] root 94 2 0 0 0 0 S [camera_heap] root 95 2 0 0 0 0 I [devfreq_wq] root 96 2 0 0 0 0 S [rdr_lpm3_thread] root 97 2 0 0 0 0 D [hwxcollie] root 98 2 0 0 0 0 I [cfg80211] root 99 2 0 0 0 0 I [watchdogd] root 100 2 0 0 0 0 I [usb_analog_hs_p] root 101 2 0 0 0 0 I [usb_analog_hs_p] root 103 2 0 0 0 0 I [slimbus_lost_sy] root 105 2 0 0 0 0 I [mptcp_wq] root 106 2 0 0 0 0 S [dspdumplog] root 107 2 0 0 0 0 I [hifi_om_work_vo] root 108 2 0 0 0 0 I [hifi_om_work_au] root 109 2 0 0 0 0 I [hifi_om_work_vo] root 110 2 0 0 0 0 I [hifi_om_work_vo] root 111 2 0 0 0 0 I [hifi_om_work_sm] root 112 2 0 0 0 0 I [hifi_om_work_au] root 113 2 0 0 0 0 I [hifi_om_work_au] root 114 2 0 0 0 0 D [mailboxNormal] root 115 2 0 0 0 0 D [mailboxHigh] root 117 2 0 0 0 0 S [siqthread/0] root 118 2 0 0 0 0 S [ipihelper] root 120 2 0 0 0 0 S [agent_rpmb] root 121 2 0 0 0 0 S [tuid] root 122 2 0 0 0 0 S [smc_svc_thread] root 123 2 0 0 0 0 S [interface_msg_p] root 162 2 0 0 0 0 S [kauditd] root 163 2 0 0 0 0 S [kswapd0] root 164 2 0 0 0 0 S [ecryptfs-kthrea] root 165 2 0 0 0 0 I [cifsiod] root 166 2 0 0 0 0 I [cifsoplockd] root 167 2 0 0 0 0 S [fid_async_t] root 168 2 0 0 0 0 I [EIMA] root 173 2 0 0 0 0 I [HW_KERNEL_STP_M] root 174 2 0 0 0 0 I [HW_KERNEL_STP_S] root 218 2 0 0 0 0 I [kthrotld] root 219 2 0 0 0 0 I [fb0_dss_debug] root 220 2 0 0 0 0 I [fb0_ldi_underfl] root 221 2 0 0 0 0 I [pipe_clk_updt_w] root 222 2 0 0 0 0 I [fb0_hiace_end] root 223 2 0 0 0 0 I [fb0_gmp_lut]各列含义: 列名含义USER所属用户PID进程 IDPPID父进程 IDNAME进程名查看实时资源占用情况 adb shell top输出示例: Tasks: 938 total, 1 running, 937 sleeping, 0 stopped, 0 zombie Mem: 7.4G total, 7.0G used, 380M free, 8.1M buffers Swap: 4.0G total, 2.8G used, 1.1G free, 2.6G cached 800%cpu 13%user 0%nice 16%sys 763%idle 0%iow 6%irq 2%sirq 0%host PID USER PR NI VIRT RES SHR S[%CPU] %MEM TIME+ ARGS 1612 system 18 -2 15G 451M 257M S 7.0 5.9 1682:20.6 system_server 787 system -2 0 3.2G 22M 12M S 5.0 0.2 2966:24.2 surfaceflinger 514 u0_a139 20 0 3.2G 196M 192M S 4.6 2.5 7:17.01 com.UCMobile 16810 shell 20 0 4.3G 29M 29M S 4.3 0.3 492:30.40 apkagent.cli 1098 system 20 0 87M 1.7M 1.3M S 3.6 0.0 237:31.60 vendor.huawei.h+ 7514 shell 20 0 30M 4.7M 3.3M R 2.6 0.0 0:00.14 top 7356 u0_a157 20 0 7.3G 164M 151M S 2.6 2.1 48:54.08 com.sohu.inputm+ 3243 system 20 0 6.9G 130M 94M S 1.6 1.7 105:44.14 com.huawei.HwOP+ 2844 u0_a139 20 0 2.0G 99M 86M S 1.0 1.2 0:04.83 com.UCMobile:Do+ 2486 system 20 0 6.5G 129M 101M S 1.0 1.6 58:59.61 com.huawei.syst+ 5023 root 20 0 0 0 0 I 0.6 0.0 0:03.81 [kworker/u16:4] 1059 root 20 0 0 0 0 I 0.6 0.0 0:06.91 [kworker/u16:1] 3547 u0_a139 20 0 2.0G 114M 96M S 0.6 1.4 0:11.31 com.UCMobile:ch+ 2917 u0_a139 20 0 2.1G 113M 93M S 0.6 1.4 4:00.37 com.UCMobile:Me+ 2771 system 20 0 6.3G 110M 87M S 0.6 1.4 118:19.66 com.huawei.iawa+ 1567 root -2 0 0 0 0 S 0.6 0.0 227:06.46 [hisi_hcc] 692 root 20 0 2.6G 4.7M 2.9M S 0.6 0.0 28:35.16 netd 6558 root 20 0 0 0 0 I 0.3 0.0 0:00.06 [kworker/5:3] 25705 u0_a365 20 0 2.4G 205M 133M S 0.3 2.6 1:51.42 com.lite.lanxin 24441 u0_a152 30 10 8.2G 245M 183M S 0.3 3.2 1:31.13 com.tencent.mob+ ...各列含义: 列名含义PID进程 IDPR优先级CPU%当前瞬间占用 CPU 百分比S进程状态(R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)#THR线程数VSSVirtual Set Size 虚拟耗用内存(包含共享库占用的内存)RSSResident Set Size 实际使用物理内存(包含共享库占用的内存)PCY调度策略优先级,SP_BACKGROUND/SPFOREGROUNDUID进程所有者的用户 ID NAME进程名| `top` 命令还支持一些命令行参数,详细用法如下: Usage: top [ -m max_procs ] [ -n iterations ] [ -d delay ] [ -s sort_column ] [ -t ] [ -h ] -m num 最多显示多少个进程 -n num 刷新多少次后退出 -d num 刷新时间间隔(单位秒,默认值 5) -s col 按某列排序(可用 col 值:cpu, vss, rss, thr) -t 显示线程信息 -h 显示帮助文档查看进程 UID 有两种方案: 1. `adb shell dumpsys package | grep userId=` 如: $ adb shell dumpsys package org.mazhuang.guanggoo | grep userId= userId=103942. 通过 ps 命令找到对应进程的 pid 之后 `adb shell cat /proc//status | grep Uid` 如: $ adb shell gemini:/ $ ps | grep org.mazhuang.guanggoo u0_a394 28635 770 1795812 78736 SyS_epoll_ 0000000000 S org.mazhuang.guanggoo gemini:/ $ cat /proc/28635/status | grep Uid Uid: 10394 10394 10394 10394 gemini:/ $其它 如下是其它常用命令的简单描述,前文已经专门讲过的命令不再额外说明: 命令功能cat显示文件内容cd切换目录chmod改变文件的存取模式/访问权df查看磁盘空间使用情况grep过滤输出kill杀死指定 PID 的进程ls列举目录内容mount挂载目录的查看和管理mv 查看正在运行的进程ps查看正在运行的进程rm删除文件top查看进程的资源占用情况常见问题 启动 adb server 失败 **出错提示** error: protocol fault (couldn't read status): No error**可能原因** adb server 进程想使用的 5037 端口被占用。 **解决方案** 找到占用 5037 端口的进程,然后终止它。以 Windows 下为例: netstat -ano | findstr LISTENINGTCP 0.0.0.0:5037 0.0.0.0:0 LISTENING 1548 这里 1548 即为进程 ID,用命令结束该进程: taskkill /PID 1548然后再启动 adb 就没问题了。 com.android.ddmlib.AdbCommandRejectedException 在 Android Studio 里新建一个模拟器,但是用 adb 一直连接不上,提示: com.android.ddmlib.AdbCommandRejectedException: device unauthorized. This adb server's $ADB_VENDOR_KEYS is not set Try 'adb kill-server' if that seems wrong. Otherwise check for a confirmation dialog on your device.在手机上安装一个终端然后执行 su 提示没有该命令,这不正常。 于是删除该模拟器后重新下载安装一次,这次就正常了。 欢迎关注公众号[喵先生课堂] |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |