From 6f12acb0daac7251eaa82a6d0302c21059a91c9d Mon Sep 17 00:00:00 2001 From: Ted Bauer Date: Thu, 15 Aug 2024 21:01:59 +0000 Subject: [PATCH] Parse protos in library Bug: 342636474 Test: m Change-Id: I4934fa2332b00084f73453945d6b4743566f6e48 --- tools/aconfig/aconfig_device_paths/Android.bp | 8 +++-- ...emplate.java => DeviceProtosTemplate.java} | 32 +++++++++++++++++-- 2 files changed, 35 insertions(+), 5 deletions(-) rename tools/aconfig/aconfig_device_paths/src/{DevicePathsTemplate.java => DeviceProtosTemplate.java} (62%) diff --git a/tools/aconfig/aconfig_device_paths/Android.bp b/tools/aconfig/aconfig_device_paths/Android.bp index 2d943de672..95cecf4ada 100644 --- a/tools/aconfig/aconfig_device_paths/Android.bp +++ b/tools/aconfig/aconfig_device_paths/Android.bp @@ -39,8 +39,8 @@ rust_library { genrule { name: "libaconfig_java_device_paths_src", - srcs: ["src/DevicePathsTemplate.java"], - out: ["DevicePaths.java"], + srcs: ["src/DeviceProtosTemplate.java"], + out: ["DeviceProtos.java"], tool_files: ["partition_aconfig_flags_paths.txt"], cmd: "sed -e '/TEMPLATE/{r$(location partition_aconfig_flags_paths.txt)' -e 'd}' $(in) > $(out)", } @@ -48,5 +48,7 @@ genrule { java_library { name: "aconfig_device_paths_java", srcs: [":libaconfig_java_device_paths_src"], - sdk_version: "core_current", + static_libs: [ + "libaconfig_java_proto_nano", + ], } diff --git a/tools/aconfig/aconfig_device_paths/src/DevicePathsTemplate.java b/tools/aconfig/aconfig_device_paths/src/DeviceProtosTemplate.java similarity index 62% rename from tools/aconfig/aconfig_device_paths/src/DevicePathsTemplate.java rename to tools/aconfig/aconfig_device_paths/src/DeviceProtosTemplate.java index 16355a33f2..58c58deb47 100644 --- a/tools/aconfig/aconfig_device_paths/src/DevicePathsTemplate.java +++ b/tools/aconfig/aconfig_device_paths/src/DeviceProtosTemplate.java @@ -15,7 +15,12 @@ */ package android.aconfig; +import android.aconfig.nano.Aconfig.parsed_flag; +import android.aconfig.nano.Aconfig.parsed_flags; + import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -23,7 +28,7 @@ import java.util.List; /** * @hide */ -public class DevicePaths { +public class DeviceProtos { static final String[] PATHS = { TEMPLATE }; @@ -31,12 +36,35 @@ public class DevicePaths { private static final String APEX_DIR = "/apex"; private static final String APEX_ACONFIG_PATH_SUFFIX = "/etc/aconfig_flags.pb"; + /** + * Returns a list of all on-device aconfig protos. + * + * May throw an exception if the protos can't be read at the call site. For + * example, some of the protos are in the apex/ partition, which is mounted + * somewhat late in the boot process. + * + * @throws IOException if we can't read one of the protos yet + * @return a list of all on-device aconfig protos + */ + public static List loadAndParseFlagProtos() throws IOException { + ArrayList result = new ArrayList(); + + for (String path : parsedFlagsProtoPaths()) { + FileInputStream inputStream = new FileInputStream(path); + parsed_flags parsedFlags = parsed_flags.parseFrom(inputStream.readAllBytes()); + for (parsed_flag flag : parsedFlags.parsedFlag) { + result.add(flag); + } + } + + return result; + } /** * Returns the list of all on-device aconfig protos paths. * @hide */ - public static List parsedFlagsProtoPaths() { + private static List parsedFlagsProtoPaths() { ArrayList paths = new ArrayList(Arrays.asList(PATHS)); File apexDirectory = new File(APEX_DIR);