From a140bb05f1eeafe046574454debd190c32e09888 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Tue, 17 Apr 2018 10:52:26 -0700 Subject: [PATCH] Reverse RRO dir paths when passing to Make LOCAL_RESOURCE_DIRS puts the highest priority overlay first, but aapt2 expects the highest priority overlay last. Soong stores the list in aapt2 order (low to high priority), but that means when it exports to Make as LOCAL_SOONG_RRO_DIRS, which goes to build_rro_package.mk and then package_internal.mk, it gets reversed again and comes out backwards. Bug: 78032566 Test: m checkbuild Change-Id: If72bf929fbf1d126f9051a2f21ec1eb4e3030e6e --- android/paths.go | 12 ++++++++++++ android/paths_test.go | 5 +---- java/androidmk.go | 4 +++- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/android/paths.go b/android/paths.go index 87efe5340..91dd9a6d2 100644 --- a/android/paths.go +++ b/android/paths.go @@ -308,6 +308,18 @@ func LastUniquePaths(list Paths) Paths { return list[totalSkip:] } +// ReversePaths returns a copy of a Paths in reverse order. +func ReversePaths(list Paths) Paths { + if list == nil { + return nil + } + ret := make(Paths, len(list)) + for i := range list { + ret[i] = list[len(list)-1-i] + } + return ret +} + func indexPathList(s Path, list []Path) int { for i, l := range list { if l == s { diff --git a/android/paths_test.go b/android/paths_test.go index 00757985b..cd9fbfd54 100644 --- a/android/paths_test.go +++ b/android/paths_test.go @@ -474,10 +474,7 @@ func TestDirectorySortedPaths(t *testing.T) { } paths := makePaths() - reversePaths := make(Paths, len(paths)) - for i, v := range paths { - reversePaths[len(paths)-i-1] = v - } + reversePaths := ReversePaths(paths) sortedPaths := PathsToDirectorySortedPaths(paths) reverseSortedPaths := PathsToDirectorySortedPaths(reversePaths) diff --git a/java/androidmk.go b/java/androidmk.go index dfbe7fa75..8bde716bb 100644 --- a/java/androidmk.go +++ b/java/androidmk.go @@ -206,7 +206,9 @@ func (app *AndroidApp) AndroidMk() android.AndroidMkData { } if len(app.rroDirs) > 0 { - fmt.Fprintln(w, "LOCAL_SOONG_RRO_DIRS :=", strings.Join(app.rroDirs.Strings(), " ")) + // Reverse the order, Soong stores rroDirs in aapt2 order (low to high priority), but Make + // expects it in LOCAL_RESOURCE_DIRS order (high to low priority). + fmt.Fprintln(w, "LOCAL_SOONG_RRO_DIRS :=", strings.Join(android.ReversePaths(app.rroDirs).Strings(), " ")) } if Bool(app.appProperties.Export_package_resources) {