From 938b59388722a03627afc1a65eb00ef627b8ce0e Mon Sep 17 00:00:00 2001 From: Jooyung Han Date: Sat, 20 Jun 2020 12:47:47 +0900 Subject: [PATCH] apex: make allowed_files prop overridable Because override_apex can modify the contents of the base apex, allowed_files (which describes the contents) should be overridable. Bug: 159503079 Bug: 159392784 Bug: 158169437 Test: m (soong test added) Merged-In: I12744b0465dc3cfc90a66643867e65b4092cd0f7 Change-Id: I12744b0465dc3cfc90a66643867e65b4092cd0f7 (cherry picked from commit faa5399b3f304ab152c39c858d0ca4af8735a750) --- apex/apex.go | 9 +++++--- apex/apex_test.go | 55 +++++++++++++++++++++++++++++++++++++++++++++++ apex/builder.go | 4 ++-- 3 files changed, 63 insertions(+), 5 deletions(-) diff --git a/apex/apex.go b/apex/apex.go index a4af7aa35..7081cebea 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -985,9 +985,6 @@ type apexBundleProperties struct { // List of providing APEXes' names so that this APEX can depend on provided shared libraries. Uses []string - // A txt file containing list of files that are allowed to be included in this APEX. - Allowed_files *string - // package format of this apex variant; could be non-flattened, flattened, or zip. // imageApex, zipApex or flattened ApexType apexPackaging `blueprint:"mutated"` @@ -1063,6 +1060,9 @@ type overridableProperties struct { // Apex Container Package Name. // Override value for attribute package:name in AndroidManifest.xml Package_name string + + // A txt file containing list of files that are allowed to be included in this APEX. + Allowed_files *string `android:"path"` } type apexPackaging int @@ -1454,6 +1454,9 @@ func (a *apexBundle) DepsMutator(ctx android.BottomUpMutatorContext) { } func (a *apexBundle) OverridablePropertiesDepsMutator(ctx android.BottomUpMutatorContext) { + if a.overridableProperties.Allowed_files != nil { + android.ExtractSourceDeps(ctx, a.overridableProperties.Allowed_files) + } ctx.AddFarVariationDependencies(ctx.Config().AndroidCommonTarget.Variations(), androidAppTag, a.overridableProperties.Apps...) ctx.AddFarVariationDependencies(ctx.Config().AndroidCommonTarget.Variations(), diff --git a/apex/apex_test.go b/apex/apex_test.go index a7a776561..3d5886ea9 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -5396,6 +5396,61 @@ func TestApexKeysTxt(t *testing.T) { ensureNotContains(t, content, "myapex.apex") } +func TestAllowedFiles(t *testing.T) { + ctx, _ := testApex(t, ` + apex { + name: "myapex", + key: "myapex.key", + apps: ["app"], + allowed_files: "allowed.txt", + } + + apex_key { + name: "myapex.key", + public_key: "testkey.avbpubkey", + private_key: "testkey.pem", + } + + android_app { + name: "app", + srcs: ["foo/bar/MyClass.java"], + package_name: "foo", + sdk_version: "none", + system_modules: "none", + apex_available: [ "myapex" ], + } + `, withFiles(map[string][]byte{ + "sub/Android.bp": []byte(` + override_apex { + name: "override_myapex", + base: "myapex", + apps: ["override_app"], + allowed_files: ":allowed", + } + // Overridable "path" property should be referenced indirectly + filegroup { + name: "allowed", + srcs: ["allowed.txt"], + } + override_android_app { + name: "override_app", + base: "app", + package_name: "bar", + } + `), + })) + + rule := ctx.ModuleForTests("myapex", "android_common_myapex_image").Rule("diffApexContentRule") + if expected, actual := "allowed.txt", rule.Args["allowed_files_file"]; expected != actual { + t.Errorf("allowed_files_file: expected %q but got %q", expected, actual) + } + + rule2 := ctx.ModuleForTests("myapex", "android_common_override_myapex_myapex_image").Rule("diffApexContentRule") + if expected, actual := "sub/allowed.txt", rule2.Args["allowed_files_file"]; expected != actual { + t.Errorf("allowed_files_file: expected %q but got %q", expected, actual) + } +} + func TestMain(m *testing.M) { run := func() int { setUp() diff --git a/apex/builder.go b/apex/builder.go index 53c119391..af43417aa 100644 --- a/apex/builder.go +++ b/apex/builder.go @@ -391,7 +391,7 @@ func (a *apexBundle) buildUnflattenedApex(ctx android.ModuleContext) { emitCommands = append(emitCommands, "sort -o "+imageContentFile.String()+" "+imageContentFile.String()) implicitInputs = append(implicitInputs, a.manifestPbOut) - if a.properties.Allowed_files != nil { + if a.overridableProperties.Allowed_files != nil { ctx.Build(pctx, android.BuildParams{ Rule: emitApexContentRule, Implicits: implicitInputs, @@ -402,7 +402,7 @@ func (a *apexBundle) buildUnflattenedApex(ctx android.ModuleContext) { }, }) implicitInputs = append(implicitInputs, imageContentFile) - allowedFilesFile := android.PathForModuleSrc(ctx, proptools.String(a.properties.Allowed_files)) + allowedFilesFile := android.PathForModuleSrc(ctx, proptools.String(a.overridableProperties.Allowed_files)) phonyOutput := android.PathForModuleOut(ctx, a.Name()+"-diff-phony-output") ctx.Build(pctx, android.BuildParams{