From 1e4796be2b009a509f8737c10e4ddf7aaf45dc66 Mon Sep 17 00:00:00 2001 From: heaven Date: Tue, 16 Jun 2026 16:04:58 +0300 Subject: [PATCH] chore(tools): device-QA DataStore config injector for the proxy app --- tools/mk_datastore.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 tools/mk_datastore.py diff --git a/tools/mk_datastore.py b/tools/mk_datastore.py new file mode 100644 index 0000000..3cd0825 --- /dev/null +++ b/tools/mk_datastore.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +"""Build a Preferences-DataStore protobuf for the vojo proxy app from a ProxyState +JSON on stdin; emit it base64-encoded on stdout (pipe through `base64 -d` via run-as). + +Wire layout (androidx.datastore.preferences): + PreferenceMap.preferences = field 1 (map) -> entry{ key=field1 string, value=field2 Value } + Value.string = field 5 +""" +import sys +import base64 + + +def varint(n): + out = bytearray() + while True: + b = n & 0x7F + n >>= 7 + if n: + out.append(b | 0x80) + else: + out.append(b) + return bytes(out) + + +def ld(field, data): # length-delimited field: tag=(field<<3)|2 + return bytes([(field << 3) | 2]) + varint(len(data)) + data + + +def main(): + state_json = sys.stdin.read().strip().encode("utf-8") + value_msg = ld(5, state_json) # Value.string + entry = ld(1, b"state") + ld(2, value_msg) # entry: key + Value + pref_map = ld(1, entry) # PreferenceMap.preferences + sys.stdout.write(base64.b64encode(pref_map).decode()) + + +if __name__ == "__main__": + main()