Android调试指令

作者: 龙遁流 | 来源:发表于2020-04-19 17:06 被阅读0次

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

    相关文章

      网友评论

        本文标题:Android调试指令

        本文链接:https://www.haomeiwen.com/subject/ruuvbhtx.html