Add RELEASE_ACONFIG_EXTRA_RELEASE_CONFIGS
This build flag causes us to create aconfig flag artifacts for the
given extra release configs.
Bug: 298444886
Test: manual
Change-Id: I10148f6e7318b0477438ed1d8baafbf4dc594c90
diff --git a/android/aconfig_providers.go b/android/aconfig_providers.go
index ee9891d..a47e80f 100644
--- a/android/aconfig_providers.go
+++ b/android/aconfig_providers.go
@@ -43,6 +43,10 @@
var AconfigDeclarationsProviderKey = blueprint.NewProvider[AconfigDeclarationsProviderData]()
+type AconfigReleaseDeclarationsProviderData map[string]AconfigDeclarationsProviderData
+
+var AconfigReleaseDeclarationsProviderKey = blueprint.NewProvider[AconfigReleaseDeclarationsProviderData]()
+
type ModeInfo struct {
Container string
Mode string
@@ -112,6 +116,8 @@
if dep, ok := OtherModuleProvider(ctx, module, AconfigDeclarationsProviderKey); ok {
mergedAconfigFiles[dep.Container] = append(mergedAconfigFiles[dep.Container], dep.IntermediateCacheOutputPath)
}
+ // If we were generating on-device artifacts for other release configs, we would need to add code here to propagate
+ // those artifacts as well. See also b/298444886.
if dep, ok := OtherModuleProvider(ctx, module, AconfigPropagatingProviderKey); ok {
for container, v := range dep.AconfigFiles {
mergedAconfigFiles[container] = append(mergedAconfigFiles[container], v...)
diff --git a/android/config.go b/android/config.go
index 1124488..e122d25 100644
--- a/android/config.go
+++ b/android/config.go
@@ -198,6 +198,33 @@
return c.config.productVariables.ReleaseAconfigValueSets
}
+func (c Config) ReleaseAconfigExtraReleaseConfigs() []string {
+ result := []string{}
+ if val, ok := c.config.productVariables.BuildFlags["RELEASE_ACONFIG_EXTRA_RELEASE_CONFIGS"]; ok {
+ if len(val) > 0 {
+ // Remove any duplicates from the list.
+ found := make(map[string]bool)
+ for _, k := range strings.Split(val, " ") {
+ if !found[k] {
+ found[k] = true
+ result = append(result, k)
+ }
+ }
+ }
+ }
+ return result
+}
+
+func (c Config) ReleaseAconfigExtraReleaseConfigsValueSets() map[string][]string {
+ result := make(map[string][]string)
+ for _, rcName := range c.ReleaseAconfigExtraReleaseConfigs() {
+ if value, ok := c.config.productVariables.BuildFlags["RELEASE_ACONFIG_VALUE_SETS_"+rcName]; ok {
+ result[rcName] = strings.Split(value, " ")
+ }
+ }
+ return result
+}
+
// The flag default permission value passed to aconfig
// derived from RELEASE_ACONFIG_FLAG_DEFAULT_PERMISSION
func (c Config) ReleaseAconfigFlagDefaultPermission() string {
diff --git a/android/config_test.go b/android/config_test.go
index 7d327a2..ca7c7f8 100644
--- a/android/config_test.go
+++ b/android/config_test.go
@@ -125,6 +125,43 @@
}
}
+func TestReleaseAconfigExtraReleaseConfigs(t *testing.T) {
+ testCases := []struct {
+ name string
+ flag string
+ expected []string
+ }{
+ {
+ name: "empty",
+ flag: "",
+ expected: []string{},
+ },
+ {
+ name: "specified",
+ flag: "bar foo",
+ expected: []string{"bar", "foo"},
+ },
+ {
+ name: "duplicates",
+ flag: "foo bar foo",
+ expected: []string{"foo", "bar"},
+ },
+ }
+
+ for _, tc := range testCases {
+ fixture := GroupFixturePreparers(
+ FixtureModifyProductVariables(func(vars FixtureProductVariables) {
+ if vars.BuildFlags == nil {
+ vars.BuildFlags = make(map[string]string)
+ }
+ vars.BuildFlags["RELEASE_ACONFIG_EXTRA_RELEASE_CONFIGS"] = tc.flag
+ }),
+ )
+ actual := fixture.RunTest(t).Config.ReleaseAconfigExtraReleaseConfigs()
+ AssertArrayString(t, tc.name, tc.expected, actual)
+ }
+}
+
func TestConfiguredJarList(t *testing.T) {
list1 := CreateTestConfiguredJarList([]string{"apex1:jarA"})