aflags: read protos from all containers

Create one library for reading protos from all containers, instead of
having numerous libraries perform the same logic. For Java, we will
create a similar library reusing the same
partition_aconfig_flags_paths.txt.

Bug: 324436145
Test: adb shell aflags list # Confirm that various containers appear
Change-Id: I924e281a50f9a609e1c07c03267eebe3dce52752
This commit is contained in:
Ted Bauer
2024-03-15 17:04:06 +00:00
parent 45c6fd0c17
commit 206d44aff5
11 changed files with 180 additions and 70 deletions

View File

@@ -0,0 +1,38 @@
// Copyright (C) 2024 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package {
default_applicable_licenses: ["Android-Apache-2.0"],
}
rust_defaults {
name: "libaconfig_device_paths.defaults",
edition: "2021",
clippy_lints: "android",
lints: "android",
srcs: ["src/lib.rs"],
rustlibs: [
"libaconfig_protos",
"libanyhow",
"libprotobuf",
"libregex",
],
}
rust_library {
name: "libaconfig_device_paths",
crate_name: "aconfig_device_paths",
host_supported: true,
defaults: ["libaconfig_device_paths.defaults"],
}

View File

@@ -0,0 +1,9 @@
[package]
name = "aconfig_device_paths"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
anyhow = "1.0.82"

View File

@@ -0,0 +1,6 @@
[
"/system/etc/aconfig_flags.pb",
"/system_ext/etc/aconfig_flags.pb",
"/product/etc/aconfig_flags.pb",
"/vendor/etc/aconfig_flags.pb",
]

View File

@@ -0,0 +1,47 @@
/*
* Copyright (C) 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
//! Library for finding all aconfig on-device protobuf file paths.
use anyhow::Result;
use std::path::PathBuf;
use std::fs;
/// Determine all paths that contain an aconfig protobuf file.
pub fn parsed_flags_proto_paths() -> Result<Vec<PathBuf>> {
let mut result: Vec<PathBuf> = include!("../partition_aconfig_flags_paths.txt")
.map(|s| PathBuf::from(s.to_string()))
.to_vec();
for dir in fs::read_dir("/apex")? {
let dir = dir?;
// Only scan the currently active version of each mainline module; skip the @version dirs.
if dir.file_name().as_encoded_bytes().iter().any(|&b| b == b'@') {
continue;
}
let mut path = PathBuf::from("/apex");
path.push(dir.path());
path.push("etc");
path.push("aconfig_flags.pb");
if path.exists() {
result.push(path);
}
}
Ok(result)
}