【分享】关于adb工具的一些常用玩机操作
香草味的多莉酱
2021年03月16日 21:12
收录于文集
共12篇

强大的查询功能

使用命令adb shell getprop +下面的属性,即可获取相应的属性

属性名  //含义

ro.build.version.sdk SDK                            //版本

ro.build.version.release Android               //系统版本

ro.product.model                                         //型号

ro.product.brand                                         //品牌

ro.product.name                                         //设备名

查看内存消息指令

1   adb shell dumpsys meminfo                   # 查看整个设备的内存信息

2   adb shell dumpsys meminfo pid               # 查看指定进程的内存信息

3  adb shell dumpsys meminfo com.package.name  # 查看指定应用的内存信息

4  bash:bash shell

5  dalvik:是指dalvik所使用的内存。 native:是被native堆使用的内存。应该指使用C\C++在堆上分配的内存。 VSS- Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)

6  VSS- Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)

7  RSS- Resident Set Size 实际使用物理内存(包含共享库占用的内存)

8  PSS- Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)

9  USS- Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)

10一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS

dumpsys 获取系统数据

获取当前运行的 activity

adb shell dumpsys activity | findstr Run

获取apk版本号、权限等信息的方法

   举例:  以查询微信版本为例

adb shell dumpsys package com.tencent.mm

获取apk版本号、权限等信息的方法

adb shell dumpsys package com.xxx.xxx(包名)

举例:  以查询微信版本为例

adb shell dumpsys package com.tencent.mm > /home/jiatai/Android/dumpsys/weixin

权限分两段:

第一段(看起来都是自定义权限)

Permissions:

  Permission [com.tencent.mm.matrix.strategynotify] (6ef054e):

    sourcePackage=com.tencent.mm

    uid=10138 gids=null type=0 prot=signature

    perm=Permission{fb7366f com.tencent.mm.matrix.strategynotify}

    packageSetting=PackageSetting{c722f7c com.tencent.mm/10138}

  Permission [com.tencent.mm.permission.MM_MESSAGE] (cfe3005):

    sourcePackage=com.tencent.mm

    uid=10138 gids=null type=0 prot=signature

    perm=Permission{3ba285a com.tencent.mm.permission.MM_MESSAGE}

    packageSetting=PackageSetting{c722f7c com.tencent.mm/10138}

  Permission [com.tencent.mm.plugin.permission.READ] (e2aca8b):

    sourcePackage=com.tencent.mm

    uid=10138 gids=null type=0 prot=signature

    perm=Permission{470c768 com.tencent.mm.plugin.permission.READ}

    packageSetting=PackageSetting{c722f7c com.tencent.mm/10138}

  Permission [com.tencent.mm.wear.message] (336c781):

    sourcePackage=com.tencent.mm

    uid=10138 gids=null type=0 prot=signature

    perm=Permission{de27026 com.tencent.mm.wear.message}

    packageSetting=PackageSetting{c722f7c com.tencent.mm/10138}

  Permission [com.tencent.mm.ext.permission.SPORT] (af98467):

    sourcePackage=com.tencent.mm

    uid=10138 gids=null type=0 prot=normal

    perm=Permission{13ef214 com.tencent.mm.ext.permission.SPORT}

    packageSetting=PackageSetting{c722f7c com.tencent.mm/10138}

  Permission [com.tencent.mm.ext.permission.WRITE] (5075abd):

    sourcePackage=com.tencent.mm

    uid=10138 gids=null type=0 prot=signature|privileged

    perm=Permission{cf568b2 com.tencent.mm.ext.permission.WRITE}

    packageSetting=PackageSetting{c722f7c com.tencent.mm/10138}

  Permission [com.tencent.mm.permission.C2D_MESSAGE] (6100003):

    sourcePackage=com.tencent.mm

    uid=10138 gids=null type=0 prot=signature

    perm=Permission{a231b80 com.tencent.mm.permission.C2D_MESSAGE}

    packageSetting=PackageSetting{c722f7c com.tencent.mm/10138}

  Permission [com.tencent.mm.plugin.permission.WRITE] (853e5b9):

    sourcePackage=com.tencent.mm

    uid=10138 gids=null type=0 prot=signature

    perm=Permission{1cd5dfe com.tencent.mm.plugin.permission.WRITE}

    packageSetting=PackageSetting{c722f7c com.tencent.mm/10138}

  Permission [com.tencent.mm.ext.permission.READ] (788995f):

    sourcePackage=com.tencent.mm

    uid=10138 gids=null type=0 prot=signature|privileged

    perm=Permission{25e6fac com.tencent.mm.ext.permission.READ}

    packageSetting=PackageSetting{c722f7c com.tencent.mm/10138}

第二段(很全的权限列表了):

declared permissions:

      com.tencent.mm.plugin.permission.WRITE: prot=signature, INSTALLED

      com.tencent.mm.plugin.permission.READ: prot=signature, INSTALLED

      com.tencent.mm.permission.MM_MESSAGE: prot=signature, INSTALLED

      com.tencent.mm.ext.permission.READ: prot=signature|privileged, INSTALLED

      com.tencent.mm.ext.permission.WRITE: prot=signature|privileged, INSTALLED

      com.tencent.mm.ext.permission.SPORT: prot=normal, INSTALLED

      com.tencent.mm.wear.message: prot=signature, INSTALLED

      com.tencent.mm.permission.C2D_MESSAGE: prot=signature, INSTALLED

      com.tencent.mm.matrix.strategynotify: prot=signature, INSTALLED

    requested permissions:

      android.permission.CHANGE_WIFI_MULTICAST_STATE

      com.tencent.mm.plugin.permission.READ

      com.tencent.mm.plugin.permission.WRITE

      com.tencent.mm.permission.MM_MESSAGE

      com.huawei.authentication.HW_ACCESS_AUTH_SERVICE

      android.permission.ACCESS_NETWORK_STATE

      android.permission.ACCESS_COARSE_LOCATION

      android.permission.ACCESS_FINE_LOCATION

      android.permission.CAMERA

      android.permission.GET_TASKS

      android.permission.INTERNET

      android.permission.MODIFY_AUDIO_SETTINGS

      android.permission.RECEIVE_BOOT_COMPLETED

      android.permission.RECORD_AUDIO

      android.permission.READ_CONTACTS

      android.permission.READ_SMS

      android.permission.VIBRATE

      android.permission.WAKE_LOCK

      android.permission.WRITE_EXTERNAL_STORAGE

      android.permission.WRITE_CONTACTS

      android.permission.WRITE_SETTINGS

      com.android.launcher.permission.INSTALL_SHORTCUT

      com.android.launcher.permission.UNINSTALL_SHORTCUT

      com.android.launcher.permission.READ_SETTINGS

      com.tencent.mm.location.permission.SEND_VIEW

      android.permission.BLUETOOTH

      android.permission.BLUETOOTH_ADMIN

      android.permission.BROADCAST_STICKY

      android.permission.SYSTEM_ALERT_WINDOW

      android.permission.CHANGE_WIFI_STATE

      android.permission.GET_PACKAGE_SIZE

      android.permission.DOWNLOAD_WITHOUT_NOTIFICATION

      android.permission.NFC

      com.huawei.android.launcher.permission.CHANGE_BADGE

      android.permission.WRITE_APP_BADGE

      android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS

      android.permission.READ_PHONE_STATE

      android.permission.READ_EXTERNAL_STORAGE

      com.tencent.mm.ext.permission.READ

      com.tencent.mm.ext.permission.WRITE

      android.permission.ACCESS_WIFI_STATE

      com.tencent.mm.wear.message

      android.permission.BODY_SENSORS

      com.google.android.c2dm.permission.RECEIVE

      android.permission.GET_ACCOUNTS

      com.tencent.mm.permission.C2D_MESSAGE

      com.android.vending.BILLING

      android.permission.MANAGE_ACCOUNTS

      android.permission.AUTHENTICATE_ACCOUNTS

      android.permission.READ_SYNC_SETTINGS

      android.permission.WRITE_SYNC_SETTINGS

      android.permission.READ_PROFILE

      android.permission.USE_FINGERPRINT

      com.tencent.mm.matrix.strategynotify

    install permissions:

      android.permission.DOWNLOAD_WITHOUT_NOTIFICATION: granted=true

      android.permission.MODIFY_AUDIO_SETTINGS: granted=true

      android.permission.MANAGE_ACCOUNTS: granted=true

      com.tencent.mm.matrix.strategynotify: granted=true

      android.permission.NFC: granted=true

      android.permission.WRITE_SYNC_SETTINGS: granted=true

      android.permission.RECEIVE_BOOT_COMPLETED: granted=true

      com.tencent.mm.permission.MM_MESSAGE: granted=true

      com.android.launcher.permission.UNINSTALL_SHORTCUT: granted=true

      android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS: granted=true

      android.permission.READ_PROFILE: granted=true

      android.permission.BLUETOOTH: granted=true

      android.permission.CHANGE_WIFI_MULTICAST_STATE: granted=true

android.permission.GET_TASKS: granted=true

      android.permission.AUTHENTICATE_ACCOUNTS: granted=true

      android.permission.INTERNET: granted=true

      android.permission.BLUETOOTH_ADMIN: granted=true

      android.permission.GET_PACKAGE_SIZE: granted=true

      com.tencent.mm.plugin.permission.READ: granted=true

      com.tencent.mm.wear.message: granted=true

      com.tencent.mm.ext.permission.WRITE: granted=true

      com.android.launcher.permission.READ_SETTINGS: granted=true

      android.permission.BROADCAST_STICKY: granted=true

      android.permission.CHANGE_WIFI_STATE: granted=true

      android.permission.ACCESS_NETWORK_STATE: granted=true

      com.tencent.mm.permission.C2D_MESSAGE: granted=true

      android.permission.USE_FINGERPRINT: granted=true

      android.permission.READ_SYNC_SETTINGS: granted=true

      com.tencent.mm.plugin.permission.WRITE: granted=true

      android.permission.VIBRATE: granted=true

      android.permission.ACCESS_WIFI_STATE: granted=true

      com.android.launcher.permission.INSTALL_SHORTCUT: granted=true

      android.permission.WAKE_LOCK: granted=true

      com.tencent.mm.ext.permission.READ: granted=true

    User 0: ceDataInode=1425553 installed=true hidden=false suspended=false stopped=false notLaunched=false enabled=0 instant=false

      gids=[3002, 3003, 3001]

      runtime permissions:

        android.permission.ACCESS_FINE_LOCATION: granted=true

        android.permission.BODY_SENSORS: granted=true

        android.permission.READ_EXTERNAL_STORAGE: granted=true

        android.permission.ACCESS_COARSE_LOCATION: granted=true

        android.permission.READ_PHONE_STATE: granted=true

        android.permission.WRITE_CONTACTS: granted=true

        android.permission.CAMERA: granted=true

        android.permission.GET_ACCOUNTS: granted=true

        android.permission.WRITE_EXTERNAL_STORAGE: granted=true

        android.permission.RECORD_AUDIO: granted=true

        android.permission.READ_CONTACTS: granted=true

      disabledComponents:

        com.tencent.mm.plugin.nfc_open.ui.NfcWebViewUI

权限概念

从上面dumpsys package 微信的结果来看我们可以抽象出下面四个权限概念:

declared permissions :自定义权限

requested permissions :请求权限

install permissions :安装权限

runtime permissions  : 运行时权限

declared permissions

自定义权限作用:与其他应用分享自己的资源和功能

(By defining custom permissions, an app can share its resources and capabilities with other apps. )

为了创建自定义权限,你需要在你应用的AndroidManifest.xml里用一个或多个<permission>来声明。

比如说,一个应用想控制启动它的activity对象,那么可以像下面一个声明一个自定义权限:

<manifest

  xmlns:android="http://schemas.android.com/apk/res/android"

  package="com.example.myapp&#​34; >

    

    <permission

      android:name="com.example.myapp.permission.DEADLY_ACTIVITY"

      android:label="@string/permlab_deadlyActivity"

      android:description="@string/permdesc_deadlyActivity"

      android:permissionGroup="android.permission-group.COST_MONEY"

      android:protectionLevel="dangerous&#​34; />

    ...

</manifest>

注意: 系统不允许许多应用声明相同的自定义权限,除非这些应用有相同的签名。如果一个包声明了一个权限,那么系统不允许用户安装其他声明该权限的应用,除非其他应用和第一个应用有相同的签名。为了避免命名冲突,我们推荐使用reverse-domain-style命名规则,

比如说

com.example.myapp.ENGAGE_HYPERSPACE。

protectionLevel:这个属性是必须的,告知系统如何提醒用户需要该权限的应用,或者谁允许来持有该权限。

permissionGroup:这个属性是可选的,只被用来帮助系统呈现权限给用户。在大多数情况,你应该将其设置为一个标准的系统权限组(在android.Manifest.permission_group中列出的),虽然你可以自己定义一个权限组,但是我们更建议使用存在的权限组,因为可以简化呈现给用户的UI。

label和description:你需要为自定义权限提供label和description。这些都是用户可以看到的字符串资源,label对应于标签,description对应于权限细节。label建议写的短一些,而description建议为几句话描述一下权限允许持有者可以做什么。我们推荐两段式描述,第一句描述一下权限,第二句描述一下如果应用获取了对应权限会有什么风险。

下面是一个CALL_PHONE的例子:

<string name="permlab_callPhone&#​34;>directly call phone numbers</string>

<string name="permdesc_callPhone&#​34;>Allows the app to call

    phone numbers without your intervention. Malicious apps may

    cause unexpected calls on your phone bill. Note that this does not

    allow the app to call emergency numbers.</string>

应用可以通过使用<uses-permission>来定义自定义权限和请求其他应用定义的权限。但是,你最好仔细评估是否需要这么做。

如果你这在设置一套暴露功能给其他应用的应用。如果这些应用没有相同的签名,那么每个权限仅会也仅能被定义一次。及时应用都具有相同的签名,我们也建议每个权限仅被定义一次。

如果功能只对具有相同签名的apps开放,那么你应用通过签名检查来避免自定义权限。当其中一个app请求你的其他app的时候,第二个app在应答请求之前可以校验一下两个app是否具有同样的签名。

如果你正在开发只在你自己设备上的app,你应该为你的apps开发并安装一个管理权限的包。这个包不需要提供任何服务,它仅仅声明所有的权限,并且其他应用使用<uses-permission>请求这些权限。

requested permissions

看起来是应用所需权限的集合,

包含其他权限成分,即

declared permissions :自定义权限

install permissions :安装权限

runtime permissions :运行时权限

install permissions 和 runtime permissions

我是这么理解的,Android 6.0之前的manifest里包含的所有权限声明都可以当做install permissions,Android 6.0即以后manifest里除了dangerous permissions即runtime permissions外则属于install permissions。

总结 

简单看起来权限分为三大块,自定义权限、正常权限和危险权限(或者说运行时权限),运行时权限比较特殊,在Android 6.0 以后应用需要在使用时弹框请求。

查看手机的进程 process

使用  命令查看系统进程

使用  命令查看系统进程

结合  命令过滤多余的信息,

以微信为例

以手机qq为例

输入法相关

获取已安装所有输入法

adb shell ime list -s

获取当前设备输入法

adb shell settings get secure default_input_method

设置输入法

 adb shell ime set com.android/input

 # 或者

 adb shell settings put secure default_input_method com.android/input

电量管理相关命令

模拟拔下设备电源

adb shell dumpsys battery unplug

低电量条件下的行为

adb shell settings put global low_power 1

恢复电源修改

adb shell dumpsys battery reset

使用 adb 命令进入  模式

进入Recovery 模式可以使用组合键,

也可以使用adb 命令 adb 命令进入recovery 模式如下

启动、跳过 Google 开机向导:

跳过

1 adb shell pm disable com.google.android.setupwizard

2 adb shell settings put global device_provisioned 1

3 adb shell settings put secure user_setup_complete 1

启动

adb shell am start  com.google.android.setupwizard/.user.WelcomeActivity

看CPU信息

# 登陆到设备环境

adb shell

# 查看cpu信息

cat /proc/cpuinfo

可能看到以下的cpu版本:

arm32位

ARMv7

ARMv7s

arm64位

AArch64

ARMv8

ARMv9

x86

Intel

AMD

指定按键事件触发  (按下指定按键)

adb shell input keyevent <KEY_CODE> 

其中<KEY_CODE>填以下内容

电话键

NAME INFO CODE

KEYCODE_CALL 拨号键 5

KEYCODE_ENDCALL 挂机键 6

KEYCODE_HOME 按键Home 3

KEYCODE_MENU 菜单键 82

KEYCODE_BACK 返回键 4

KEYCODE_SEARCH 搜索键 84

KEYCODE_CAMERA 拍照键 27

KEYCODE_FOCUS 拍照对焦键 80

KEYCODE_POWER 电源键 26

KEYCODE_NOTIFICATION 通知键 83

KEYCODE_MUTE 话筒静音键 91

KEYCODE_VOLUME_MUTE 扬声器静音键 164

KEYCODE_VOLUME_UP 音量增加键 24

KEYCODE_VOLUME_DOWN 音量减小键 25

控制键

NAME INFO CODE

KEYCODE_ENTER 回车键 66

KEYCODE_ESCAPE ESC键 111

KEYCODE_DPAD_CENTER 导航键 确定键 23

KEYCODE_DPAD_UP 导航键 向上 19

KEYCODE_DPAD_DOWN 导航键 向下 20

KEYCODE_DPAD_LEFT 导航键 向左 21

KEYCODE_DPAD_RIGHT 导航键 向右 22

KEYCODE_MOVE_HOME 光标移动到开始键 122

KEYCODE_MOVE_END 光标移动到末尾键 123

KEYCODE_PAGE_UP 向上翻页键 92

KEYCODE_PAGE_DOWN 向下翻页键 93

KEYCODE_DEL 退格键 67

KEYCODE_FORWARD_DEL 删除键 112

KEYCODE_INSERT 插入键 124

KEYCODE_TAB Tab键 61

KEYCODE_NUM_LOCK 小键盘锁 143

KEYCODE_CAPS_LOCK 大写锁定键 115

KEYCODE_BREAK Break/Pause键 121

KEYCODE_SCROLL_LOCK 滚动锁定键 116

KEYCODE_ZOOM_IN 放大键 168

KEYCODE_ZOOM_OUT 缩小键 169

组合键

NAME INFO CODE

KEYCODE_ALT_LEFT Alt+Left

KEYCODE_ALT_RIGHT Alt+Right

KEYCODE_CTRL_LEFT Control+Left

KEYCODE_CTRL_RIGHT Control+Right

KEYCODE_SHIFT_LEFT Shift+Left

KEYCODE_SHIFT_RIGHT Shift+Right

基本

NAME INFO CODE

KEYCODE_0 按键’0’ 7

KEYCODE_1 按键’1’ 8

KEYCODE_2 按键’2’ 9

KEYCODE_3 按键’3’ 10

KEYCODE_4 按键’4’ 11

KEYCODE_5 按键’5’ 12

KEYCODE_6 按键’6’ 13

KEYCODE_7 按键’7’ 14

KEYCODE_8 按键’8’ 15

KEYCODE_9 按键’9’ 16

KEYCODE_A 按键’A’ 29

KEYCODE_B 按键’B’ 30

KEYCODE_C 按键’C’ 31

KEYCODE_D 按键’D’ 32

KEYCODE_E 按键’E’ 33

KEYCODE_F 按键’F’ 34

KEYCODE_G 按键’G’ 35

KEYCODE_H 按键’H’ 36

KEYCODE_I 按键’I’ 37

KEYCODE_J 按键’J’ 38

KEYCODE_K 按键’K’ 39

KEYCODE_L 按键’L’ 40

KEYCODE_M 按键’M’ 41

KEYCODE_N 按键’N’ 42

KEYCODE_O 按键’O’ 43

KEYCODE_P 按键’P’ 44

KEYCODE_Q 按键’Q’ 45

KEYCODE_R 按键’R’ 46

KEYCODE_S 按键’S’ 47

KEYCODE_T 按键’T’ 48

KEYCODE_U 按键’U’ 49

KEYCODE_V 按键’V’ 50

KEYCODE_W 按键’W’ 51

KEYCODE_X 按键’X’ 52

KEYCODE_Y 按键’Y’ 53

KEYCODE_Z 按键’Z’ 54