From 94c93f37cb9ecfdce877bfa3710b3f552fa8e5c6 Mon Sep 17 00:00:00 2001 From: Anton Hansson Date: Wed, 30 Jan 2019 16:03:37 +0000 Subject: [PATCH] Allow excluding specific overlay sub-directories This change allows PRODUCT_ENFORCE_RRO_EXCLUDED_OVERLAYS to refer to subdirectories of directories in PRODUCT_PACKAGE_OVERLAYS, e.g.: PRODUCT_PACKAGE_OVERLAYS := foo/overlay PRODUCT_ENFORCE_RRO_EXCLUDED_OVERLAYS := foo/overlay/packages/apps/HelloWorld Bug: 118823052 Test: m nothing (soong tests) Change-Id: Ic9f89c11d023ea1b4f6f2f6683d94c81aa7b8a1b --- java/android_resources.go | 11 ++--------- java/app_test.go | 19 ++++++++++++------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/java/android_resources.go b/java/android_resources.go index 47535d299..efd3e3dd0 100644 --- a/java/android_resources.go +++ b/java/android_resources.go @@ -44,10 +44,6 @@ func androidResourceGlob(ctx android.ModuleContext, dir android.Path) android.Pa type overlayGlobResult struct { dir string paths android.DirectorySortedPaths - - // Set to true of the product has selected that values in this overlay should not be moved to - // Runtime Resource Overlay (RRO) packages. - excludeFromRRO bool } const overlayDataKey = "overlayDataKey" @@ -69,10 +65,11 @@ func overlayResourceGlob(ctx android.ModuleContext, dir android.Path) (res []glo files := data.paths.PathsInDirectory(filepath.Join(data.dir, dir.String())) if len(files) > 0 { overlayModuleDir := android.PathForSource(ctx, data.dir, dir.String()) + // If enforce RRO is enabled for this module and this overlay is not in the // exclusion list, ignore the overlay. The list of ignored overlays will be // passed to Make to be turned into an RRO package. - if rroEnabled && !data.excludeFromRRO { + if rroEnabled && !ctx.Config().EnforceRROExcludedOverlay(overlayModuleDir.String()) { rroDirs = append(rroDirs, overlayModuleDir) } else { res = append(res, globbedResourceDir{ @@ -102,10 +99,6 @@ func (overlaySingleton) GenerateBuildActions(ctx android.SingletonContext) { var result overlayGlobResult result.dir = overlay - // Mark overlays that will not have Runtime Resource Overlays enforced on them - // based on the product config - result.excludeFromRRO = ctx.Config().EnforceRROExcludedOverlay(overlay) - files, err := ctx.GlobWithDeps(filepath.Join(overlay, "**/*"), androidResourceIgnoreFilenames) if err != nil { ctx.Errorf("failed to glob resource dir %q: %s", overlay, err.Error()) diff --git a/java/app_test.go b/java/app_test.go index 7e06dba71..21bda3c42 100644 --- a/java/app_test.go +++ b/java/app_test.go @@ -149,9 +149,13 @@ var testEnforceRROTests = []struct { }, }, { - name: "enforce RRO on all", - enforceRROTargets: []string{"*"}, - enforceRROExcludedOverlays: []string{"device/vendor/blah/static_overlay"}, + name: "enforce RRO on all", + enforceRROTargets: []string{"*"}, + enforceRROExcludedOverlays: []string{ + // Excluding specific apps/res directories also allowed. + "device/vendor/blah/static_overlay/foo", + "device/vendor/blah/static_overlay/bar/res", + }, overlayFiles: map[string][]string{ "foo": []string{"device/vendor/blah/static_overlay/foo/res/values/strings.xml"}, "bar": []string{"device/vendor/blah/static_overlay/bar/res/values/strings.xml"}, @@ -208,11 +212,12 @@ func TestEnforceRRO(t *testing.T) { getOverlays := func(moduleName string) ([]string, []string) { module := ctx.ModuleForTests(moduleName, "android_common") - overlayCompiledPaths := module.Output("aapt2/overlay.list").Inputs.Strings() - + overlayFile := module.MaybeOutput("aapt2/overlay.list") var overlayFiles []string - for _, o := range overlayCompiledPaths { - overlayFiles = append(overlayFiles, module.Output(o).Inputs.Strings()...) + if overlayFile.Rule != nil { + for _, o := range overlayFile.Inputs.Strings() { + overlayFiles = append(overlayFiles, module.Output(o).Inputs.Strings()...) + } } rroDirs := module.Module().(*AndroidApp).rroDirs.Strings()