2

问题

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

背景

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

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

没有回复。

特别是,我基于我不确定从adb shell dumpsys backup.

Android 文档状态:

要查找备份令牌,请运行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及其所有标题的解释。另外,是否有任何文档更详细地讨论这个问题?也许没有,这就是为什么人们求助于阅读源代码的原因?

4

1 回答 1

3

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


备份管理器状态

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

对于Ancestral 包,另请参见上文。我不知道如果有的话会是什么样子(但我假设类似于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]评论中,它是一个列表Last backup : package nameLast backup很可能又是一个 Unix 时间戳,或者0它从未备份过)。在设备上,备份队列位于设备上的/data/backup.


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

来源

  1. Android Internals::A Confectioner's Cookbook - Jonathan Levin 的维基解密。相关部分可作为摘录获得:应用程序备份和恢复在本书的网站上查找详细信息
  2. 源代码BackupManagerService.java
  3. 备份管理器参考手册
  4. 关于自动备份的开发者指南
  5. 开发人员备份测试指南
于 2020-01-23T20:00:48.653 回答