我正在尝试新的 jetpack DataStore库。我使用库保存了数据。这settings.preferences_pb
在应用数据目录 (/data/data/my.package.name/files/datastore/settings.preferences_pb) 中创建了一个文件。setting
是我给的文件名。使用文本查看器无法正确显示数据。我可以辨认出键名,但值是垃圾。如何打开此文件并查看它?
3 回答
参考: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
我使用了一个十六进制编辑器(macOS 的“Hex Fiend”),这似乎可以理解。
你可以在这里参考preferences.proto(感谢@rohit-sathyanarayana)
二进制文件是 <string, value> 对的映射。
每对都以0x0A
和长度(以字节为单位)开头。例如0x26
表示接下来的 38 个字节。
名称字段以0x0A
和长度(以字节为单位)开头。例如0x04
“名称”和0x05
“令牌”。
值字段以0x12
和长度(以字节为单位)开头。例如0x1E
= 接下来的 30 个字节。
第一个字节可能表示字段类型。例如0x2A
= 字符串字段。
第二个字节是值的长度。例如0x1C
= 28 个字节。
由于0x0A
与换行相同,如果您的大部分字段都是字符串格式,您可以将preferences_db 作为文本打开。
这是preferences_pb 文件的当前格式:link
您可以使用此模式解析文件并在需要时将其打印出来。
或者,您可以只使用 Preferences 对象上的 toString() 方法,您应该得到一个很好的可读输出。