Android调试指令

Android 调试指令

am

activity manager 使用am工具来执行系统操作,如开启一个action,开启一个activity、强制停止一个线程、修改设备屏幕属性等等。使用am <command>

开启Activity、服务、广播

Intent 说明 am参数
component 组件名称 格式为:包名/类名 -n
action 指定Intent的执行动作,比如调用拨打电话组件 -a
data_url 表示与动作要操纵的数据 -d
category categary是一个字符串,提供了额外的信息,有关于能够处理这个Intent对象的组件种类 -c
extra 传递给Intent的额外数据,以Bundle的形式定义,就是一些键值对 -e
mime_type MIME类型 -t
flags 各种类型的flag,很多是用来指定Android系统如何启动activity,还有启动了activity后如何对待他 -f
package 包名 -p
启动activity

am start [参数] <INTENT>

参数 说明
-D 开启调试模式
-W 等待启动完成
--start-profile <file> 开始分析器和发送结果(文件)
--sampling INTERVAL 使用样本分析 间隔:us(使用—start-profiler)之间
-P <FILE> 应用空闲下来后,停止profile
-R COUNT 重复活动推出<统计>次。每个重复之前,活动将会结束
-S 组织目标应用开始前的活动
--opengl-trace 启用跟踪OpenGL函数
[—user <USER_ID> | current] 指定哪些用户运行,如果不指定则使用当前用户
启动和停止服务

am startservice [参数] <INTENT>

am stopservice [参数] <INTENT>

参数 说明
--user <USER_ID> | current 指定哪些用户运行,如果不指定则使用当前用户
启动广播

am broadcast [参数] <INTENT>

参数 说明
--user <USER_ID> | current 指定哪些用户运行,如果不指定则使用当前用户

内存操作

am dumpheap [参数] <process>

参数 说明
--user <USER_ID> | current 指定哪些用户运行,如果不指定则使用当前用户
-n 获取native heap而不是managed heap

am dumpheap com.android.browser /data/local/tmp/test.hprof #获取内存快照(后缀名必需为.hprof)

hprof-conv e:\test.hprof e:\test1.hprof 进行文件转化 然后就可以使用mat工具对内存进行查看分析

进程操作

am force-stop [参数] <process> #强制停止应用(process=包名)

am kill [参数] <process> #停止后台单个进程

am kill-all #停止后台所进程

性能

am profile start <process> <file> 开启profile

am profile stop [<process>] 停止profile

参数 说明
--user <USER_ID> | current 指定哪些用户运行,如果不指定则使用当前用户

am profile start com.android.contacts /mnt/sdcard/profile

am profile stop com.android.contacts

traceview profile

监听异常

adb shell monitor [potions]

pm

package manager 使用pm工具来执行应用的安装和查询应用的信息、系统权限、控制应用。使用 pm <command>

包名信息查询

pm list packages [options] [FILTER]

打印所有已经安装的应用的包名,如果设置了文件过滤则只显示包含过滤文字的内容

参数 描述
-f 显示每个包的文件位置
-d 使用过滤器,只显示禁用的应用的包名
-e 使用过滤器,只显示可用的应用的包名
-s 使用过滤器,只显示系统应用的包名
-3 使用过滤器,只显示第三方应用的包名
-i 查看应用的安装者

应用安装和卸载

pm install [-lrtsfd] [-i PACKAGE] [PATH] 通过指定路径安装apk

pm uninstall [options] <PACKAGE> 卸载应用

参数 说明
-l 锁定应用程序
-r 重新安装应用,且保留应用数据
-t 允许测试apk被安装
-i <INSTALLER_PACKAGE_NAME> 指定安装包的包名
-s 安装到sd卡
-f 安装到系统内置存储中(默认安装位置)
-d 允许降级安装(同一应用低级换高级)
-g 授予应用程序清单中列出的所有权限(只有6.0系统可用)
-k 卸载应用且保留数据与缓存(如果不加-k则全部删除)

权限信息查询

权限的组成:权限的名称,属于的权限组,保护级别

<permission android:description="string resource"
          android:icon="drable resource"
          android:label="string resource"
          android:name="string"
          android:permissionGroup="string"
          android:protectionLevel=["normal"|"dangerous"|"signature"|"signatureOrSystem"]/>
protectionLevel
protectionLevel 说明
normal 表示权限是低风险的,不会对系统,用户或其他应用程序造成危害
dangerous 表示权限是高风险的,系统将可能要球用户输入相关信息,才会授予此权限
signature 表示只有当应用程序所用数字签名与声明引用权限的应用程序所用签名相同时,才能将权限授予给它
signatureOrSystem 需要签名或者系统级应用(放置在/system/app目录下)才能赋予权限
system 系统级应用(放置在/system/app目录下)才能赋予权限
自定义权限 应用自行定义的权限

pm list permission-groups 打印已知的权限组

pm list permissions [options] [GROUP] 打印权限

options
参数 说明
-g 按组进行列出权限
-f 打印所有信息
-s 简短的摘要
-d 只有危险的权限列表
-u 只有权限的用户将看到列表 用户自定义权限
授权与取消
子命令 说明
grant <package_name> <permission> 授予应用权限许可。必需android6.0(API级别23)以上的设备
revoke <package_name> <permission> 撤销应用权限。必需android6.0(API级别23)以上的设备

需要注意的是所谓的授权是指你的apk里面已有的权限进行授权,相当于启用的概念
pm grant <packageName> android.permission.READ_CONTACTS #授权( 取消权限同理)

测试包和apk路径查询

pm list instrumentation

pm list instrumentation TARGET_PACKAGE

pm path PACKAGE_NAME

子命令 参数 说明
list instrymentation 无参数 列出所有的instrumentation测试包
-f 列出apk文件位置
<target_package> 列出某个app的测试包
path <package> <package> 打印指定包名的apk路径

系统功能与主持库查询

子命令 说明
list feature 打印系统的所有功能 列出所有硬件相关信息
list libraries 打印当前设备所支持的所有库

包系统状态查询

pm dump PACKAGE

打印内容 说明
DUMP OF SERVICE package 打印服务信息
DUMP OF SERVICE activity 打印activity信息
DUMP OF SERVICE meminfo 打印当前内存使用信息
DUMP OF SERVICE procstats 打印系统内存使用与一段时间内存汇总
DUMP OF SERVICE usagestats 打印服务器使用状态信息
DUMP OF SERVICE batterystats 打印电池状态信息

控制

pm clear <PACKAGE_NAME> 清除应用数据

pm enable <PACKAGE_OR_COMPONENT> 使package或component可用

pm disenable <PACKAGE_OR_COMPONENT> 使package或component不可用(直接就找不到应用了)

pm disenable-user [options] <PACKAGE_OR_COMPONENT> 使package或component不可用(会显示已停用)

pm hide PACKAGE_OR_COMPONENT 隐藏package或component

pm unhide PACKAGE_OR_CONPONENT 恢复可见package或component

子命令 说明
set-install-location <LOCATION> 更改默认的安装位置: 0:自动-让系统决定最好的位置 1:内部存储-安装在内部设备上的存储 2:外部存储-安装在外部媒体 注:只用于调试
get-install-location 返回当前的安装位置 0 1 2 对应上面的数字说明

dumpsys

dumpsys用户系统诊断,它运行在设备上,并提供系统服务状态信息

adb shell dumpsys [system services]

查看系统服务

adb shell dumpsys –l xxx

adb shell service list xxx

-h:对于大多数的服务,可以添加-h看到文本的帮助

-c:对于一些服务,可以添加-c查看数据会更友好

adb shell dumpsys meminfo –h

包信息查询

adb shell dumpsys package [-h] [-f] [—checkin] [cmd]…

参数 说明
-h 打印帮助信息
-f 打印intent filter的信息
--checkin 打印出已经登记的库、系统功能、安装包
cmd 子命令(可以在-h帮助文档中查看有哪些子命令)
cmd子命令 说明
prov[iders] 获取content providers
p[ackages] 获取安装包基本信息
s[hared-user] 获取共享用户ID的应用
m[essages] 打印运行时收集的信息
v[erifiers] 打印包校验信息
version 打印数据库版本信息
write 写当前位置
<package.name> 输出给定包的信息
installs 安装会话的详细信息
l[ibraries] 列出已知的共享库
f[ibraries] 列出手机的功能
k[eysets] 列出各个包的Signing KeySets
r[esolvers] 获取intent filter
perm[issions] 获取权限
pref[erred] 打印包首选项
preferred-xml [—full] 打印包首选项,xml格式打印

activity 信息查询

adb shell dumpsys activity [-a] [-c]…

参数 说明
-a 包括所有可用的服务器状态
-c 包括客户端状态
-p 限制输出为给定的包,例如: adb shell dumpsys activity -p com.android.browser
-h 打印帮助信息
cmd 子命令
cmd子命令 说明
a[ctivities] activity堆栈状态
r[recents] 最近activity的状态
b[rodacasts] [package_name] [histpry [-s]] 广播状态
i[ntents] [package_name] 挂起的intent状态
p[rocesses] [package_name] 进程状态
o[om] oom管理
perm[issions] url权限授权状态
prov[iders] [comp_spec…] content provider状态
provider [comp_spec] provider客户端状态
s[ervices] [comp_spec…] 服务状态
as[sociations] 跟踪应用程序的关联
service [comp_spec] 服务客户端状态
package [package_name] 给的包的所有状态
all 转储所有的activityes
top 转储栈顶的activity
write 写入所有挂起状态存储
track-associations 允许会话跟踪
untrack-associations 禁用和明确会话跟踪,命令参数可能也是一个comp_spec 转储的activity

网络信息查询

子命令 说明 命令格式
connectivity 网络连接 adb shell dumpsys connectivity
netpolicy 网络策略 adb shell dumpsys netpolicy
netstats 网络状态 adb shell dumpsys netstats
network_management 网络管理 adb shell dumpsys network_management

其他

子命令 说明 命令格式
meminfo 内存 adb shell dumpsys meminfo
cpuinfo CPU adb shell dumpsys cpuinfo
gfxinfo 帧率 adb shell dumpsys gfxinfo
display 显示 adb shell dumpsys display
power 电源 adb shell dumpsys power
batterystats 电池状态 adb shell dumpsys batterystats
battery 电池 adb shell dumpsys battery
alarm 闹钟 adb shell dumpsys alarm
location 位置 adb shell dumpsys location

adb shell dumpsys window | findstr mCurrentFocus 查看当前包

aapt

android assert packaging tool, 再build-tools目录下。查看创建更新ZIP格式的文档文件(zip,jar,apk)。可将资源文件编成二进制,打包APK等。

aapt v[ersion]

列出apk包

aapt l[ist] [-v] [-a] <你的应用apk>

-v 以table形式列出来
-a 详细列出内容

查看apk信息

aapt d[ump] [选项] <你的应用>

选项 说明 例如
badging 查看apk包的packageName、versionCode、applicationLabel、launcherActivity、permission等各种详细信息 aapt dump badging <file_path.apk>
permissions 查看权限 aapt dump resources <file_path.apk>
resources 查看资源列表 aapt dump resources <file_path.apk> > sodino.txt
configurations 查看apk配置信息 aapt dump configurations <file_path.apk>
xmltree 以树形结构输出的xml信息。 aapt dump xmltree <file_path.apk> res/***.xml
xmlstrings 查看指定apk的指定xml文件。 aapt dump xmlstrings <file_path.apk> res/***.xml

编译android资源

aapt p[ackage] [-d] [-f] [-m] [-u] [-v] [-x] [-z] [-M AndroidManifest.xml] /
[-0 extension [-0 extension ...]] [-g tolerance] [-j jarfile] /
[--debug-mode] [--min-sdk-version VAL] [--target-sdk-version VAL] /
[--app-version VAL] [--app-version-name TEXT] [--custom-package VAL] /
[--rename-manifest-package PACKAGE] /
[--rename-instrumentation-target-package PACKAGE] /
[--utf16] [--auto-add-overlay] /
[--max-res-version VAL] /
[-I base-package [-I base-package ...]] /
[-A asset-source-dir] [-G class-list-file] [-P public-definitions-file] /
[-S resource-sources [-S resource-sources ...]] [-F apk-file] [-J R-file-dir] /
[--product product1,product2,...] /
[raw-files-dir [raw-files-dir] ...]

-f 如果编译出来的文件已经存在,强制覆盖。

-m 使生成的包的目录放在-J参数指定的目录。

-J 指定生成的R.java的输出目录

-S res文件夹路径

-A assert文件夹的路径

-M AndroidManifest.xml的路径

-I 某个版本平台的android.jar的路径

-F 具体指定apk文件的输出

移除apk中文件

aapt r[emove] [-v] file.{zip,jar,apk} file1 [file2 ...]

添加文件到apk中

aapt a[dd] [-v] file.{zip,jar,apk} file1 [file2 ...]

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容

  • Android开发中我们有时候需要借助一些命令帮助更好的高效率定位解决问题,本文就来介绍一些可能有些隐藏的而却非常...
    passiontim阅读 1,414评论 0 4
  • Android 调试桥 Android 调试桥 (adb) 是一个通用命令行工具,其允许您与模拟器实例或连接的 A...
    guanjm阅读 1,451评论 0 1
  • 原文链接:www.jianshu.com 1、查看最上层成activity名字: adb shell dumps...
    SmileToLin阅读 829评论 0 1
  • 1、查看最上层成activity名字:adb shell dumpsys activity | findstr "...
    waiwaaa阅读 1,297评论 0 0
  • 我从小生长在杭州,自90年代起老市区就已经建立起鳞次栉比的楼房,还有售卖着各类商品的路边小商店。相比杭州最近10年...
    皮耶罗梁阅读 402评论 0 1