【问题标题】:Is there a generalized man page or documentation for the Android `adb shell dumpsys [service]` command?是否有 Android `adb shell dumpsys [service]` 命令的通用手册页或文档?
【发布时间】:2020-03-26 19:23:43
【问题描述】:

问题

是否有 Android adb shell dumpsys [service] 命令的通用手册页或文档?我不是说this,因为这似乎没有给出关于特定服务输出的细节,例如adb shell dumpsys backup

背景

我已经通读了this question 关于dumpsys 命令的一般信息,但似乎没有任何通用文档或手册页的链接。 This answer 源于用户阅读源 C 代码并描述他们的观察结果,而 this answer 似乎只是用户发现有用的一些特定用例。甚至有一条评论问

这是来自某处的文档还是只是您自己的实验?

没有回复。

特别是,我基于我不确定从adb shell dumpsys backup 的输出中看到的内容这一事实提出了之前链接的问题。

Android docs 状态:

要查找备份令牌,请运行 adb shell dumpsys backup。标记是标签 Ancestral: 和 Current: 之后的十六进制字符串。祖先令牌是指在设备初始设置时用于恢复设备的备份数据集(使用设备设置向导)。当前令牌是指设备的当前备份数据集(设备当前将其备份数据发送到的数据集)。

我的输出的截断版本是:

Backup Manager is enabled / provisioned / not pending init
Auto-restore is enabled
Last backup pass started: 0 (now = 1575271089047)
  next scheduled: 1575281388106
Transport whitelist:
    android/com.android.internal.backup.LocalTransportService
    com.google.android.gms/.backup.component.D2dTransportService
    com.google.android.gms/.backup.BackupTransportService
Available transports:
    android/com.android.internal.backup.LocalTransport
       destination: Backing up to debug-only private cache
       intent: null
  * com.google.android.gms/.backup.BackupTransportService
       destination: *****@gmail.com
       intent: Intent { cmp=com.google.android.gms/.backup.SetBackupAccountActivity }
       @pm@ - 3794 state bytes
       com.google.android.dialer - 124 state bytes
       com.google.android.videos - 72 state bytes
       com.android.providers.settings - 76 state bytes
       ...
Pending init: 0
Ancestral: 0
Current:   39b423cbcb6862e5
Participants:
  uid: 1000
    com.android.providers.settings
    android
  uid: 1027
    com.android.nfc
  uid: 10004
    com.android.providers.userdictionary
    com.android.providers.blockednumber
    com.android.calllogbackup
  ...
Ancestral packages: none
Ever backed up: 66
    com.android.cellbroadcastreceiver
    com.allrecipes.spinner.free
    com.google.android.youtube
    ...
Pending key/value backup: 47
    BackupRequest{pkg=com.google.android.dialer}
    BackupRequest{pkg=com.google.android.videos}
    BackupRequest{pkg=com.android.cellbroadcastreceiver}
    ...
Full backup queue:68
    0 : com.jb.gokeyboard.langpack.ja
    0 : com.Splitwise.SplitwiseMobile
    1575154802432 : com.google.android.gsf.login
    1575156372751 : com.google.android.backuptransport
    1575159051168 : com.google.android.ext.services
    ...

Backup Manager is enabled / provisioned / not pending init
Auto-restore is enabled
Last backup pass started: 0 (now = 1575271089047)
  next scheduled: 1575281388106
Transport whitelist:
    android/com.android.internal.backup.LocalTransportService
    com.google.android.gms/.backup.component.D2dTransportService
    com.google.android.gms/.backup.BackupTransportService
Available transports:
    android/com.android.internal.backup.LocalTransport
       destination: Backing up to debug-only private cache
       intent: null
  * com.google.android.gms/.backup.BackupTransportService
       destination: *****@gmail.com
       intent: Intent { cmp=com.google.android.gms/.backup.SetBackupAccountActivity }
       @pm@ - 3794 state bytes
       com.google.android.dialer - 124 state bytes
       com.google.android.videos - 72 state bytes
       com.android.providers.settings - 76 state bytes
       ...
Pending init: 0
Ancestral: 0
Current:   39b423cbcb6862e5
Participants:
  uid: 1000
    com.android.providers.settings
    android
  uid: 1027
    com.android.nfc
  uid: 10004
    com.android.providers.userdictionary
    com.android.providers.blockednumber
    com.android.calllogbackup
  ...
Ancestral packages: none
Ever backed up: 66
    com.android.cellbroadcastreceiver
    com.allrecipes.spinner.free
    com.google.android.youtube
    ...
Pending key/value backup: 47
    BackupRequest{pkg=com.google.android.dialer}
    BackupRequest{pkg=com.google.android.videos}
    BackupRequest{pkg=com.android.cellbroadcastreceiver}
    ...
Full backup queue:68
    0 : com.jb.gokeyboard.langpack.ja
    0 : com.Splitwise.SplitwiseMobile
    1575154802432 : com.google.android.gsf.login
    1575156372751 : com.google.android.backuptransport
    1575159051168 : com.google.android.ext.services
    ...
Backup Manager is enabled / provisioned / not pending init
Auto-restore is enabled
Last backup pass started: 0 (now = 1575271089047)
  next scheduled: 1575281388106
Transport whitelist:
    android/com.android.internal.backup.LocalTransportService
    com.google.android.gms/.backup.component.D2dTransportService
    com.google.android.gms/.backup.BackupTransportService
Available transports:
    android/com.android.internal.backup.LocalTransport
       destination: Backing up to debug-only private cache
       intent: null
  * com.google.android.gms/.backup.BackupTransportService
       destination: *****@gmail.com
       intent: Intent { cmp=com.google.android.gms/.backup.SetBackupAccountActivity }
       @pm@ - 3794 state bytes
       com.google.android.dialer - 124 state bytes
       com.google.android.videos - 72 state bytes
       com.android.providers.settings - 76 state bytes
       ...
Pending init: 0
Ancestral: 0
Current:   39b423cbcb6862e5
Participants:
  uid: 1000
    com.android.providers.settings
    android
  uid: 1027
    com.android.nfc
  uid: 10004
    com.android.providers.userdictionary
    com.android.providers.blockednumber
    com.android.calllogbackup
  ...
Ancestral packages: none
Ever backed up: 66
    com.android.cellbroadcastreceiver
    com.allrecipes.spinner.free
    com.google.android.youtube
    ...
Pending key/value backup: 47
    BackupRequest{pkg=com.google.android.dialer}
    BackupRequest{pkg=com.google.android.videos}
    BackupRequest{pkg=com.android.cellbroadcastreceiver}
    ...
Full backup queue:68
    0 : com.jb.gokeyboard.langpack.ja
    0 : com.Splitwise.SplitwiseMobile
    1575154802432 : com.google.android.gsf.login
    1575156372751 : com.google.android.backuptransport
    1575159051168 : com.google.android.ext.services
    ...

上面引用的文字中提到的部分似乎是有道理的,但还有大量的附加信息我不知道该怎么处理。特别是,我正在寻找一种方法来验证备份的内容和未备份的内容,但标题为“参与者、祖先包、曾经备份、等待键/值备份、完整备份队列”,我不确定备份和未备份的内容。

我试过 adb shell dumpsys backup -h 但这没有任何帮助:

$ adb shell dumpsys backup -h
'dumpsys backup' optional arguments:
  -h       : this help text
  a[gents] : dump information about defined backup agents

总结

我正在寻求对adb shell dumpsys backup 及其所有标题的输出的解释。另外,是否有任何文档更详细地讨论这个问题?也许没有,这就是为什么人们求助于阅读源代码的原因?

【问题讨论】:

    标签: android adb android-shell


    【解决方案1】:

    我一直在寻找相同的东西,但运气不佳。但是我在这里找到了一堆我将在答案中粘合在一起的部分 - 没有声称完整性或“绝对正确性”:我不是 Android 开发人员,只是一个狂热(高级)用户。在最后找到我的来源(脚注)并从 sn-ps 中引用。我将查看dumpsys backup 的输出并评论我发现的内容。


    BackupManager 状态

    Backup Manager is enabled / provisioned / not pending init
    Auto-restore is enabled
    Last backup pass started: 0 (now = 1575271089047)
      next scheduled: 1575281388106
    

    这部分应该比较清楚。可以使用bmgr enable 0|1 来(停用)备份管理器。停用后,不会进行任何备份(除非通过adb backup 触发)。第 3+4 行中的值为 Unix timestamps,但 0 除外,它仅表示尚未进行任何备份。

    交通

    Transport whitelist:
        android/com.android.internal.backup.LocalTransportService
        com.google.android.gms/.backup.component.D2dTransportService
        com.google.android.gms/.backup.BackupTransportService
    

    这些是系统白名单传输 ([2])——尽管来源没有解释这意味着什么。它们似乎对应于下一个区块的“可用传输”。

    Available transports:
        android/com.android.internal.backup.LocalTransport
           destination: Backing up to debug-only private cache
           intent: null
      * com.google.android.gms/.backup.BackupTransportService
           destination: *****@gmail.com
           intent: Intent { cmp=com.google.android.gms/.backup.SetBackupAccountActivity }
           @pm@ - 3794 state bytes
           com.google.android.dialer - 124 state bytes
           com.google.android.videos - 72 state bytes
           com.android.providers.settings - 76 state bytes
           ...
    

    可用于备份的传输列表。谷歌云的BackupTransportService 是默认的(由* 标记),但需要在设备上设置一个帐户([1])(在我看来,设备到设备的传输D2dTransportService 也是如此)。据我了解,可以使用 bmgr transport <transportName> 更改默认值 - 并使用 bmgr run 运行备份(对于所有挂起的备份到默认传输?)。

    请注意,此列表对应于bmgr list transports 的输出。本地备份 (LocalTransport) 似乎是由 adb backup 触发的。

    代币

    Pending init: 0
    Ancestral: 0
    Current:   39b423cbcb6862e5
    

    引用来源[5]

    要查找备份令牌,请运行 adb shell dumpsys backup。标记是标签Ancestral:Current: 后面的十六进制字符串。 祖先令牌是指在设备初始设置时用于恢复设备的备份数据集(使用设备设置向导)。当前令牌是指设备当前的备份数据集(设备当前将其备份数据发送到的数据集)。

    这也应该解释“祖先包”(在输出中更下方)的含义。

    可以请求备份的应用程序

    Participants:
      uid: 1000
        com.android.providers.settings
        android
      uid: 1027
        com.android.nfc
      uid: 10004
        com.android.providers.userdictionary
        com.android.providers.blockednumber
        com.android.calllogbackup
      ...
    

    参与者是可以请求备份的应用程序,按 AID 排序。 ([1])

    备份统计

    Ancestral packages: none
    

    对于祖传包,请参见上文。我不知道如果有的话会是什么样子(但我假设类似于下面的ever backed up);我自己运行我的 Android 设备“Google free”(LineageOS,没有 Google Apps),因此从未使用过这部分。关于这些的更多说明:它们似乎来自不是在同一设备上创建的备份集(或者至少不是来自相同的“迭代”,即如果它们来自相同的物理设备,那是因为工厂-重置)。在[2] 源代码的第 481 行我们找到了注释:

    祖传工作配置文件对应于用于恢复调用者配置文件的配置文件。

    此外,在[3] BackupManager 参考中:

    如果设备的工作配置文件是从具有序列号 ancestralSerialNumber 的另一个工作配置文件恢复的,则祖先序列号将具有相应的 UserHandle。

    最后,在[4] 备份指南中:

    在初始设备设置向导中,会向用户显示可用备份数据集的列表,并询问从哪个备份数据集恢复数据。无论选择哪个备份数据集,都将成为设备的祖先数据集。该设备可以从其自己的备份或祖先数据集进行恢复。如果两个来源的备份都可用,则设备优先考虑自己的备份。如果用户没有通过设备设置向导,则设备只能从自己的备份中恢复。

    Ever backed up: 66
        com.android.cellbroadcastreceiver
        com.allrecipes.spinner.free
        com.google.android.youtube
        ...
    

    这似乎不言自明:已经成为备份集一部分的应用程序的数量和列表。

    Pending key/value backup: 47
        BackupRequest{pkg=com.google.android.dialer}
        BackupRequest{pkg=com.google.android.videos}
        BackupRequest{pkg=com.android.cellbroadcastreceiver}
        ...
    

    我没有找到这方面的参考资料,但从上面的一个很好的猜测是这些是“参与者”请求备份,他们的请求尚未得到处理。

    Full backup queue:68
        0 : com.jb.gokeyboard.langpack.ja
        0 : com.Splitwise.SplitwiseMobile
        1575154802432 : com.google.android.gsf.login
        1575156372751 : com.google.android.backuptransport
        1575159051168 : com.google.android.ext.services
        ...
    

    在这个[1] cmets 上,它是Last backup : package name 的列表(Last backup 很可能再次成为 Unix 时间戳或 0,但它从未备份过)。在设备上,备份队列位于设备上的/data/backup


    我希望我能够阐明一些信息,以上信息对您(和其他人)有用。您可能会通过下面提到的来源找到更多详细信息——尤其是在扫描源代码 ([2]) 时,我可能遗漏了一些。

    来源

    1. Android Internals::A Confectioner's Cookbook - WikiLeaks 乔纳森·莱文。相关部分摘录:Application Backup & Restore;在the book's website 上查找详细信息
    2. Source code for BackupManagerService.java
    3. BackupManager Reference Manual
    4. Developer's guide on auto-backup
    5. Developer's guide on backup testing

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-09
      • 1970-01-01
      • 2023-03-31
      • 2012-07-11
      • 1970-01-01
      • 2016-12-13
      相关资源
      最近更新 更多