5

我正在尝试新的 jetpack DataStore库。我使用库保存了数据。这settings.preferences_pb 在应用数据目录 (/data/data/my.package.name/files/datastore/settings.preferences_pb) 中创建了一个文件。setting是我给的文件名。使用文本查看器无法正确显示数据。我可以辨认出键名,但值是垃圾。如何打开此文件并查看它?

这是文件settings.preferences_pb的驱动器链接

4

3 回答 3

1

参考:https ://medium.com/swlh/get-your-hand-dirty-with-jetpack-datastore-b1f1dfb0a5c1


protobuf 文件将位于 /data/data/{application.package}/files/datastore/ 中。这些是 protobuf 格式的文件,所以我们不能用普通的编辑器读取它们。要解码文件,我们可以使用protoc命令行。

为了能够使用 protoc 命令,我们必须使用 adb 命令将这些文件拉到我们工作站的空间中

对于首选项数据存储

protoc --decode_raw < app_name.preferences_pb

结果将与此类似:

1 {
    1: "app_name"
    2 {
        5: "Datastore sample"
    }
}
1 {
    1: "is_demo_mode"
    2 {
        1: 1
    }
}

注意:is_demo_mode 的值为 1 表示 true

于 2021-12-14T08:03:14.880 回答
0

读取preferences_pd文件 我使用了一个十六进制编辑器(macOS 的“Hex Fiend”),这似乎可以理解。

你可以在这里参考preferences.proto(感谢@rohit-sathyanarayana)

二进制文件是 <string, value> 对的映射。

每对都以0x0A和长度(以字节为单位)开头。例如0x26表示接下来的 38 个字节。

名称字段以0x0A和长度(以字节为单位)开头。例如0x04“名称”和0x05“令牌”。

值字段以0x12和长度(以字节为单位)开头。例如0x1E= 接下来的 30 个字节。

第一个字节可能表示字段类型。例如0x2A= 字符串字段。

第二个字节是值的长度。例如0x1C= 28 个字节。

由于0x0A与换行相同,如果您的大部分字段都是字符串格式,您可以将preferences_db 作为文本打开。

于 2021-10-23T16:26:50.680 回答
0

这是preferences_pb 文件的当前格式:link

您可以使用此模式解析文件并在需要时将其打印出来。

或者,您可以只使用 Preferences 对象上的 toString() 方法,您应该得到一个很好的可读输出。

于 2020-11-20T20:35:55.837 回答