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 c7fb5c9964)
This commit is contained in:
Artur Satayev 2020-03-25 16:48:49 +00:00
parent 6d5d8a6d6a
commit a8ec55990f
1 changed files with 16 additions and 10 deletions

View File

@ -211,23 +211,30 @@ func stubFlagsRule(ctx android.SingletonContext) {
// the greylists. // the greylists.
func flagsRule(ctx android.SingletonContext) android.Path { func flagsRule(ctx android.SingletonContext) android.Path {
var flagsCSV android.Paths var flagsCSV android.Paths
var greylistRemovedApis android.Paths
var greylistIgnoreConflicts android.Path
ctx.VisitAllModules(func(module android.Module) { ctx.VisitAllModules(func(module android.Module) {
if h, ok := module.(hiddenAPIIntf); ok { if h, ok := module.(hiddenAPIIntf); ok {
if csv := h.flagsCSV(); csv != nil { if csv := h.flagsCSV(); csv != nil {
flagsCSV = append(flagsCSV, csv) flagsCSV = append(flagsCSV, csv)
} }
} else if ds, ok := module.(*Droidstubs); ok && ctx.ModuleName(module) == "hiddenapi-lists-docs" { } else if ds, ok := module.(*Droidstubs); ok {
greylistIgnoreConflicts = ds.removedDexApiFile // 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 { combinedRemovedApis := android.PathForOutput(ctx, "hiddenapi", "combined-removed-dex.txt")
ctx.Errorf("failed to find removed_dex_api_filename from hiddenapi-lists-docs module") ctx.Build(pctx, android.BuildParams{
return nil Rule: android.Cat,
} Inputs: greylistRemovedApis,
Output: combinedRemovedApis,
Description: "Combine removed apis for " + combinedRemovedApis.String(),
})
rule := android.NewRuleBuilder() rule := android.NewRuleBuilder()
@ -242,8 +249,7 @@ func flagsRule(ctx android.SingletonContext) android.Path {
Inputs(flagsCSV). Inputs(flagsCSV).
FlagWithInput("--greylist ", FlagWithInput("--greylist ",
android.PathForSource(ctx, "frameworks/base/config/hiddenapi-greylist.txt")). android.PathForSource(ctx, "frameworks/base/config/hiddenapi-greylist.txt")).
FlagWithInput("--greylist-ignore-conflicts ", FlagWithInput("--greylist-ignore-conflicts ", combinedRemovedApis).
greylistIgnoreConflicts).
FlagWithInput("--greylist-max-q ", FlagWithInput("--greylist-max-q ",
android.PathForSource(ctx, "frameworks/base/config/hiddenapi-greylist-max-q.txt")). android.PathForSource(ctx, "frameworks/base/config/hiddenapi-greylist-max-q.txt")).
FlagWithInput("--greylist-max-p ", FlagWithInput("--greylist-max-p ",