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