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:
38
tools/aconfig/aconfig_device_paths/Android.bp
Normal file
38
tools/aconfig/aconfig_device_paths/Android.bp
Normal 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"],
|
||||
}
|
9
tools/aconfig/aconfig_device_paths/Cargo.toml
Normal file
9
tools/aconfig/aconfig_device_paths/Cargo.toml
Normal 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"
|
@@ -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",
|
||||
]
|
47
tools/aconfig/aconfig_device_paths/src/lib.rs
Normal file
47
tools/aconfig/aconfig_device_paths/src/lib.rs
Normal 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)
|
||||
}
|
Reference in New Issue
Block a user