From a8ec55990f6ac6f0f5a601df5942763fe1d01dc2 Mon Sep 17 00:00:00 2001 From: Artur Satayev Date: Wed, 25 Mar 2020 16:48:49 +0000 Subject: [PATCH] Use modular removed-dex.txt files for greylisting. Use droidstubs for public and system stubs to provide a list of @removed APIs. As these APIs are not present in the stubs, they are not whitelisted / greylised automatically. Keep them on greylist manually. Bug: 143864733 Test: diff out/soong/hiddenapi/hiddenapi-flags.csv Change-Id: I4c8e6899fadfdfd1da82f6f453cc92e71aa9b78c Merged-In: I4c8e6899fadfdfd1da82f6f453cc92e71aa9b78c Exempt-From-Owner-Approval: clean cherry-pick (cherry picked from commit c7fb5c99644d2434c9e6c957f7366d0467284211) --- java/hiddenapi_singleton.go | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/java/hiddenapi_singleton.go b/java/hiddenapi_singleton.go index 7e7e955f5..c7f7cbdfe 100644 --- a/java/hiddenapi_singleton.go +++ b/java/hiddenapi_singleton.go @@ -211,23 +211,30 @@ func stubFlagsRule(ctx android.SingletonContext) { // the greylists. func flagsRule(ctx android.SingletonContext) android.Path { var flagsCSV android.Paths - - var greylistIgnoreConflicts android.Path + var greylistRemovedApis android.Paths ctx.VisitAllModules(func(module android.Module) { if h, ok := module.(hiddenAPIIntf); ok { if csv := h.flagsCSV(); csv != nil { flagsCSV = append(flagsCSV, csv) } - } else if ds, ok := module.(*Droidstubs); ok && ctx.ModuleName(module) == "hiddenapi-lists-docs" { - greylistIgnoreConflicts = ds.removedDexApiFile + } else if ds, ok := module.(*Droidstubs); ok { + // Track @removed public and system APIs via corresponding droidstubs targets. + // These APIs are not present in the stubs, however, we have to keep allowing access + // to them at runtime. + if m := ctx.ModuleName(module); m == "api-stubs-docs" || m == "system-api-stubs-docs" { + greylistRemovedApis = append(greylistRemovedApis, ds.removedDexApiFile) + } } }) - if greylistIgnoreConflicts == nil { - ctx.Errorf("failed to find removed_dex_api_filename from hiddenapi-lists-docs module") - return nil - } + combinedRemovedApis := android.PathForOutput(ctx, "hiddenapi", "combined-removed-dex.txt") + ctx.Build(pctx, android.BuildParams{ + Rule: android.Cat, + Inputs: greylistRemovedApis, + Output: combinedRemovedApis, + Description: "Combine removed apis for " + combinedRemovedApis.String(), + }) rule := android.NewRuleBuilder() @@ -242,8 +249,7 @@ func flagsRule(ctx android.SingletonContext) android.Path { Inputs(flagsCSV). FlagWithInput("--greylist ", android.PathForSource(ctx, "frameworks/base/config/hiddenapi-greylist.txt")). - FlagWithInput("--greylist-ignore-conflicts ", - greylistIgnoreConflicts). + FlagWithInput("--greylist-ignore-conflicts ", combinedRemovedApis). FlagWithInput("--greylist-max-q ", android.PathForSource(ctx, "frameworks/base/config/hiddenapi-greylist-max-q.txt")). FlagWithInput("--greylist-max-p ",