To keep things consistent and to reduce the risk of confusion, aconfig
flags are "enabled" or "disabled", not "true" or "false".
Do not represent flag states via a String. Instead, introduce a new
FlagValue enum and use this enum instead. FlagValue implements ToString
which returns "enabled" or "disabled".
Bug: N/A
Test: adb shell aflags list # verify that flags are "enabled" or "disabled"
Test: atest aflags.test
Change-Id: I9be998d7891656d118b7cc971449da58e17d5031
Add android.bp target for the binary. Change the binary name to
aconfig-storage. And a number of small updates.
Bug: b/321077378
Test: m aconfig-stoarge; atest aconfig_storage_file.test
Change-Id: I9f560a031433407800ded1c2f4f2bdab459f5df7
Reduce the number of allocations by removing superfluous calls to
to_string: use a &str where possible, and avoid converting a String to a
String.
Bug: N/A
Test: adb shell aflags list
Change-Id: I373018e9ecb393137d11e039ca2c73c0ca5308d7
Print the fully qualified name instead of splitting flag package and
flag name into separate columns. This aligns the output with the
expected input to `aflags enable <fully-qualified-name>` and makes it
easier to copy-and-paste the flag names.
Before this change:
$ adb shell aflags list | head -n4
android.app.admin.flags cross_user_suspension_enabled false default read-write system
android.app.admin.flags dedicated_device_control_enabled false default read-write system
android.app.admin.flags device_policy_size_tracking_enabled false default read-write system
android.app.admin.flags dumpsys_policy_engine_migration_enabled false default read-write system
After this change:
$ adb shell aflags list | head -n4
android.app.admin.flags.cross_user_suspension_enabled false default read-write system
android.app.admin.flags.dedicated_device_control_enabled false default read-write system
android.app.admin.flags.device_policy_size_tracking_enabled false default read-write system
android.app.admin.flags.dumpsys_policy_engine_migration_enabled false default read-write system
Bug: N/A
Test: adb shell aflags list
Change-Id: I3227c9c9c7355b5b0c1b75ada73b1a8f87d1be55
Commit bca2f3c28c incorrectly added "aconfig_storage_write_api" as a
workspace member even though that project has not yet been created. This
broke cargo.
Unbreak cargo by removing "aconfig_storage_write_api".
Bug: N/A
Test: croot build/make/tools/aconfig && cargo c
Change-Id: Ic0f71a53d49736228a376f64808aea24c2ec8ce5
To help debug storage files. We need a binary to parse the storage
binary files and print out the flag values like device_config list
command. In addition, aconfig_storage_file needs to provide a public api
to allow flag cli to call to get the flag values. Therefore creating
this change.
This change includes the following changes:
1, Implement debug print trait for package table, flag table, and flag
value struct. So the debug dump is more readable.
2, Add a list flag api to create a vector of flag name and value tuples
given the storage file names. This api will be used by
aconfig_storage_file binary as well as aconfig flag cli.
3, Add a main.rs to create aconfig_storage_file binary to debug print
storage files or list all the flags in storage files. It has two
subcommands.
3.1 print command:
aconfig_storage_file print --file <storage file> --type
<package_map|flag_map|flag_val>
This command produce a debug print of a single the storage file content
3.2 list command:
aconfig_storage_file list --package_map <package map file> --flag_map
<flag map file> --flag_val <flag value file>
This command parses all storage files to print out list of flag values
in the following form:
<package>/<flag>, <value>
...
<package>/<flag>, <value>
Bug: b/321077378
Test: manual test of the binary command
Change-Id: I000e216d13854f853cbd9b63cabb6db3a47dbece
1, Add unit tests in aconfig_storage_file crate to lock down that the
first four bytes of serialized storage files must be the version number.
2, Add a storage file read api to read version number directly from a
file without mmapping the file. This api is need by aconfig storage
daemon.
3, Update integration tests (rust and c++) to include this api.
Bug: b/321077378
Test: atest aconfig_storage_file; atest aconfig_storage_read_api; atest
aconfig_storage_read_api.test.rust; atest
aconfig_storage_read_api.test.cpp
Change-Id: I432893d43895ad5022fcb614aa14de89acd9d220
This change adds flag files in mainline module into the read path of
printflags.
Bug: 327466668
Test: build image, flash device with new image, and adb shell printflags
Change-Id: I3c88019086b17ce2eed3c00afff651b1ebd55353
Current aconfig_storage_file crate contains two things: 1,
aconfig storage file definition (which is used by aconfig crate for
storage file creation) and 2, flag storage file read api. With this
change, we are splitting 2 into its own crate aconfig_storage_read_api
In the long run, there will be 3 crates for aconfig_storage
1, aconfig_storage_file
It contains aconfig storage file definition, as well as a binary to help
print/dump aconfig storage binary files into some readable format.
2, aconfig_storage_read_api
This crate contains flag read apis. This crate depends on
aconfig_storge_file crate. This crate will be used by codegen.
3, aconfig_storage_write_api
This crate contains flag write apis. This crate depends on
aconfig_storage_file crate. This crate will only be used by aconfig
daemon to update flag values.
Bug: b/321077378
Test: atest aconfig_storage_read_api.test; atest
aconfig_storage_file.test; atest aconfig_storage_read_api.test.rust;
atest aconfig_storage_read_api.test.cpp
Change-Id: Ia6afdc40a45c7c59652fbfd123c2b77bf6666dd9
Currently the default flag values are not loaded into sysprop. Since the
current requirements for export flag are for flagged api in java and the
new storage system will load default values for all, there won't be
changes to make the default value loaded into sysprop. Thus this change
disable export mode for generated native flag libraries for now. It will
be enabled once the new storage is landed.
Test: m libaconfig_test_rust_library_with_exported_mode and expect build
failure
Bug: 327392334
Change-Id: I2db814d015cdb533778822f7417d055b251ed589
Add a new CLI binary that we can use as the officially recommended CLI
for reading and writing flags. For now, the CLI invokes commands to
interact with DeviceConfig and aconfig protos, but we will switch it to
interact with the forthcoming mmap-file-based aconfig storage. In the
meantime, we can add improved formatting and error reporting in a
separate layer.
This CL starts with the list command, which outputs a table of the
flags when you type `adb shell aflags list`.
Bug: 324436145
Test: atest aflags.test
Change-Id: Idd8aa78ccaace22a7e490014d410ad741f8f6fc6
This change modifes the dependencies of fake_device_config by setting
the sdk_version to none instead of core_current, and setting the
appropriate system_modules in order to resolve circular dependencies.
Test: m fake_device_config && BUILD_FROM_SOURCE_STUB m fake_device_config
Change-Id: I497e2db9ea3456057a1e3f5c624cbd2042da6837
Contenxt: b/324826914, libcxx is the culprit of the linking failure.
Remove libcxx dependency for now.
Bug: b/324826914
Test: atest aconfig_storage_file.test
Change-Id: I55b1a41efbf4486715f465a8d56a4e2e6ab0254a
A more systematic fix. Now for each test point, we create temp file
copies at temp dir and explicitly set the file permission of these temp
files. This should bypass the issue that test build artifact file
permission are not guaranteed. Because we will generate these test
storage files on the fly at run time.
Bug: b/324459233
Test: atest aconfig_storage_file.test
Change-Id: Iaa7083be6cc49421090ab4c74e54c4bcf8e35801
Using cxx to generate c++ code for the apis that are marked to exported
in the ffi mod in src/lib.rs. For generated code simplicity, it returns
a new flag struct for each rust api.
Create a cc_library to wrap around generated c++ code. See the created
aconfig_storage.hpp for the exported header. Note there is a nested
aconfig_storage::test_only_api namespace, where we place test only apis.
The production apis are placed under aconfig_storage namespace.
Bug: 321077378
Test: m libaconfig_storage_cc
Change-Id: I73a85a26d3749908abc461362f5e0bfc3f85bf4d
1, update android build soong targets as now libmemmap2 has been
introduced to android code base.
2, add three public apis for package offset query, flag offset query,
and flag value query. These apis assume the stoarge location pb file is
at /metadata/aconfig/aconfig_storage.pb. This file will be created by
storage daemon. For testing purposes, we also expose impl version of
these apis that accept a custom storage location pb file.
Bug: 321077378
Test: atest aconfig_storage_file.test
Change-Id: I91b284e2dfcdb8ff3674d463ed1c13696d9ae020
The tests added to TEST_MAPPING in aosp/2870454 have now soaked in
postsubmit long enough to be allowed to advance to presubmit.
Bug: N/A
Test: atest --test-mapping $(gettop)/build/tools/aconfig
Test: Treehugger
Change-Id: Ia75c76ae114c16a57c26aafa159560639baea707
This change adds docs in aconfig.proto file and adds more detail in the
error message for bad package, name and namespace.
Bug: 318759389
Test: atest aconfig.test
Change-Id: I0d45495cd864506b2fcc06ad47e3ffbd6caca9fb
Minor change to mapped_file module, create utility function to verify
file is readonly and map. Also, update the unit test to create temp pb
file instead of writing to the test dir.
Bug: 321077378
Test: atest aconfig_storage_file.test
Change-Id: Id903ed458613e4aac8d2cbb1664fd8293de1a494