Add property Exportable to aconfig_declarations

Only when aconfig_declarations explicitly set this property true,
its flags will be repackaged.

If a java_aconfig_library has mode "exported", its corresponding
aconfig_declarations must have exportable prop set to true.

Test: Added unit tests and CI

Bug: 310504781

Ignore-AOSP-First: this change will be cherry picked to aosp
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:e4527f3010b3fd6f33948a15a9b4fdc944da34f0)
Merged-In: Ie9526e3755a6e7d142b377d5dd85a1bc60ffabc5
Change-Id: Ie9526e3755a6e7d142b377d5dd85a1bc60ffabc5
This commit is contained in:
Zi Wang
2024-02-08 06:19:34 +00:00
committed by Android Build Cherrypicker Worker
parent 62e3c24757
commit 0e5d16c6f0
5 changed files with 42 additions and 6 deletions

View File

@@ -40,6 +40,9 @@ type DeclarationsModule struct {
// Container(system/vendor/apex) that this module belongs to
Container string
// The flags will only be repackaged if this prop is true.
Exportable bool
}
intermediatePath android.WritablePath
@@ -159,6 +162,7 @@ func (module *DeclarationsModule) GenerateAndroidBuildActions(ctx android.Module
android.SetProvider(ctx, android.AconfigDeclarationsProviderKey, android.AconfigDeclarationsProviderData{
Package: module.properties.Package,
Container: module.properties.Container,
Exportable: module.properties.Exportable,
IntermediateCacheOutputPath: intermediateCacheFilePath,
IntermediateDumpOutputPath: intermediateDumpFilePath,
})

View File

@@ -27,6 +27,7 @@ func TestAconfigDeclarations(t *testing.T) {
name: "module_name",
package: "com.example.package",
container: "com.android.foo",
exportable: true,
srcs: [
"foo.aconfig",
"bar.aconfig",
@@ -41,6 +42,7 @@ func TestAconfigDeclarations(t *testing.T) {
depData, _ := android.SingletonModuleProvider(result, module, android.AconfigDeclarationsProviderKey)
android.AssertStringEquals(t, "package", depData.Package, "com.example.package")
android.AssertStringEquals(t, "container", depData.Container, "com.android.foo")
android.AssertBoolEquals(t, "exportable", depData.Exportable, true)
if !strings.HasSuffix(depData.IntermediateCacheOutputPath.String(), "/intermediate.pb") {
t.Errorf("Missing intermediates proto path in provider: %s", depData.IntermediateCacheOutputPath.String())
}
@@ -48,3 +50,22 @@ func TestAconfigDeclarations(t *testing.T) {
t.Errorf("Missing intermediates text path in provider: %s", depData.IntermediateDumpOutputPath.String())
}
}
func TestAconfigDeclarationsWithExportableUnset(t *testing.T) {
bp := `
aconfig_declarations {
name: "module_name",
package: "com.example.package",
container: "com.android.foo",
srcs: [
"foo.aconfig",
"bar.aconfig",
],
}
`
result := runTest(t, android.FixtureExpectsNoErrors, bp)
module := result.ModuleForTests("module_name", "").Module().(*DeclarationsModule)
depData, _ := android.SingletonModuleProvider(result, module, android.AconfigDeclarationsProviderKey)
android.AssertBoolEquals(t, "exportable", depData.Exportable, false)
}

View File

@@ -91,6 +91,12 @@ func (callbacks *JavaAconfigDeclarationsLibraryCallbacks) GenerateSourceJarBuild
if !isModeSupported(mode) {
ctx.PropertyErrorf("mode", "%q is not a supported mode", mode)
}
// TODO: uncomment this part after internal clean up
//if mode == "exported" && !declarations.Exportable {
// // if mode is exported, the corresponding aconfig_declaration must mark its
// // exportable property true
// ctx.PropertyErrorf("mode", "exported mode requires its aconfig_declaration has exportable prop true")
//}
ctx.Build(pctx, android.BuildParams{
Rule: javaRule,
@@ -102,12 +108,15 @@ func (callbacks *JavaAconfigDeclarationsLibraryCallbacks) GenerateSourceJarBuild
},
})
if declarations.Exportable {
// Mark our generated code as possibly needing jarjar repackaging
// TODO: Maybe control this with a property?
// The repackaging only happens when the corresponding aconfig_declaration
// has property exportable true
module.AddJarJarRenameRule(declarations.Package+".Flags", "")
module.AddJarJarRenameRule(declarations.Package+".FeatureFlags", "")
module.AddJarJarRenameRule(declarations.Package+".FeatureFlagsImpl", "")
module.AddJarJarRenameRule(declarations.Package+".FakeFeatureFlagsImpl", "")
}
return srcJarPath
}

View File

@@ -176,6 +176,7 @@ func testCodegenMode(t *testing.T, bpMode string, ruleMode string) {
name: "my_aconfig_declarations",
package: "com.example.package",
srcs: ["foo.aconfig"],
exportable: true,
}
java_aconfig_library {

View File

@@ -35,6 +35,7 @@ var (
type AconfigDeclarationsProviderData struct {
Package string
Container string
Exportable bool
IntermediateCacheOutputPath WritablePath
IntermediateDumpOutputPath WritablePath
}