From dcda3700253a50d498d2a070d4be82c4d6373d69 Mon Sep 17 00:00:00 2001 From: Cole Faust Date: Tue, 4 Oct 2022 14:46:35 -0700 Subject: Add lint api database files for module and system server sdks Soong modules compiled against the module or system server sdks should use the api_versions.xml for their respective sdk, but currently they use the public-filtered api database. Add module and system server sdk build targets to be used later. Right now they're unused. I'm adding them first so that they can be built on the build server, and then we can import them into prebuilts/sdk, as some builds require the api files to be prebuilt. Bug: 193460475 Test: m api-versions-xml-module-filtered api-versions-xml-system-server-filtered Change-Id: I668a878a470125ed3ecf79435713c27c4dd92b0a --- ApiDocs.bp | 45 +++++++++++++++++++++------ StubLibraries.bp | 57 ++++++++++++++++++++++++++++++++++ api/Android.bp | 18 +++++++++++ api/api.go | 95 ++++++++++++++++++++++++++++++++++++++++---------------- 4 files changed, 180 insertions(+), 35 deletions(-) diff --git a/ApiDocs.bp b/ApiDocs.bp index c87ecde4e5c8..bf3a6a356e31 100644 --- a/ApiDocs.bp +++ b/ApiDocs.bp @@ -122,17 +122,30 @@ droidstubs { } droidstubs { - name: "framework-doc-system-stubs", - defaults: ["framework-doc-stubs-sources-default"], + name: "android-non-updatable-doc-stubs-module-lib", + defaults: [ + "android-non-updatable-doc-stubs-defaults", + "module-classpath-stubs-defaults", + ], args: metalava_framework_docs_args + - " --show-annotation android.annotation.SystemApi\\(client=android.annotation.SystemApi.Client.PRIVILEGED_APPS\\) ", - api_levels_annotations_enabled: true, - api_levels_annotations_dirs: [ - "sdk-dir", - "api-versions-jars-dir", + " --show-annotation android.annotation.SystemApi\\(client=android.annotation.SystemApi.Client.PRIVILEGED_APPS\\) " + + " --show-annotation android.annotation.SystemApi\\(client=android.annotation.SystemApi.Client.MODULE_LIBRARIES\\) ", + generate_stubs: false, // We're only using this module for the annotations.zip output, disable doc-stubs. + write_sdk_values: false, +} + +droidstubs { + name: "android-non-updatable-doc-stubs-system-server", + defaults: [ + "android-non-updatable-doc-stubs-defaults", + "module-classpath-stubs-defaults", ], - api_levels_sdk_type: "system", - extensions_info_file: ":sdk-extensions-info", + args: metalava_framework_docs_args + + " --show-annotation android.annotation.SystemApi\\(client=android.annotation.SystemApi.Client.PRIVILEGED_APPS\\) " + + " --show-annotation android.annotation.SystemApi\\(client=android.annotation.SystemApi.Client.MODULE_LIBRARIES\\) " + + " --show-annotation android.annotation.SystemApi\\(client=android.annotation.SystemApi.Client.SYSTEM_SERVER\\) ", + generate_stubs: false, // We're only using this module for the annotations.zip output, disable doc-stubs. + write_sdk_values: false, } droidstubs { @@ -150,6 +163,20 @@ droidstubs { extensions_info_file: ":sdk-extensions-info", } +droidstubs { + name: "framework-doc-system-stubs", + defaults: ["framework-doc-stubs-sources-default"], + args: metalava_framework_docs_args + + " --show-annotation android.annotation.SystemApi\\(client=android.annotation.SystemApi.Client.PRIVILEGED_APPS\\) ", + api_levels_annotations_enabled: true, + api_levels_annotations_dirs: [ + "sdk-dir", + "api-versions-jars-dir", + ], + api_levels_sdk_type: "system", + extensions_info_file: ":sdk-extensions-info", +} + ///////////////////////////////////////////////////////////////////// // API docs are created from the generated stub source files // using droiddoc diff --git a/StubLibraries.bp b/StubLibraries.bp index bc2e6dd79fea..0e084968410f 100644 --- a/StubLibraries.bp +++ b/StubLibraries.bp @@ -411,6 +411,36 @@ java_library { ], } +java_library { + name: "android_module_stubs_current_with_test_libs", + static_libs: [ + "android_module_lib_stubs_current", + "android.test.base.stubs", + "android.test.mock.stubs", + "android.test.runner.stubs", + ], + defaults: ["android.jar_defaults"], + visibility: [ + "//visibility:override", + "//visibility:private", + ], +} + +java_library { + name: "android_system_server_stubs_current_with_test_libs", + static_libs: [ + "android_system_server_stubs_current", + "android.test.base.stubs.system", + "android.test.mock.stubs.system", + "android.test.runner.stubs.system", + ], + defaults: ["android.jar_defaults"], + visibility: [ + "//visibility:override", + "//visibility:private", + ], +} + droidstubs { name: "api_versions_public", srcs: [":android_stubs_current_with_test_libs{.jar}"], @@ -420,6 +450,7 @@ droidstubs { "sdk-dir", "api-versions-jars-dir", ], + api_levels_sdk_type: "public", extensions_info_file: ":sdk-extensions-info", } @@ -436,6 +467,32 @@ droidstubs { extensions_info_file: ":sdk-extensions-info", } +droidstubs { + name: "api_versions_module_lib", + srcs: [":android_module_stubs_current_with_test_libs{.jar}"], + generate_stubs: false, + api_levels_annotations_enabled: true, + api_levels_annotations_dirs: [ + "sdk-dir", + "api-versions-jars-dir", + ], + api_levels_sdk_type: "module-lib", + extensions_info_file: ":sdk-extensions-info", +} + +droidstubs { + name: "api_versions_system_server", + srcs: [":android_system_server_stubs_current_with_test_libs{.jar}"], + generate_stubs: false, + api_levels_annotations_enabled: true, + api_levels_annotations_dirs: [ + "sdk-dir", + "api-versions-jars-dir", + ], + api_levels_sdk_type: "system-server", + extensions_info_file: ":sdk-extensions-info", +} + ///////////////////////////////////////////////////////////////////// // hwbinder.stubs provides APIs required for building HIDL Java // libraries. diff --git a/api/Android.bp b/api/Android.bp index 505d7bf99135..210b8f50b803 100644 --- a/api/Android.bp +++ b/api/Android.bp @@ -207,6 +207,24 @@ genrule { ], } +genrule { + name: "sdk-annotations-module-lib.zip", + defaults: ["sdk-annotations-defaults"], + srcs: [ + ":android-non-updatable-doc-stubs-module-lib{.annotations.zip}", + ":all-modules-module-lib-annotations", + ], +} + +genrule { + name: "sdk-annotations-system-server.zip", + defaults: ["sdk-annotations-defaults"], + srcs: [ + ":android-non-updatable-doc-stubs-system-server{.annotations.zip}", + ":all-modules-system-server-annotations", + ], +} + genrule { name: "combined-removed-dex", visibility: [ diff --git a/api/api.go b/api/api.go index f15804156bdf..6a6c493e041a 100644 --- a/api/api.go +++ b/api/api.go @@ -148,18 +148,35 @@ func createMergedStubsSrcjar(ctx android.LoadHookContext, modules []string) { ctx.CreateModule(genrule.GenRuleFactory, &props) } -func createMergedPublicAnnotationsFilegroup(ctx android.LoadHookContext, modules []string) { - props := fgProps{} - props.Name = proptools.StringPtr("all-modules-public-annotations") - props.Srcs = createSrcs(modules, "{.public.annotations.zip}") - ctx.CreateModule(android.FileGroupFactory, &props) -} - -func createMergedSystemAnnotationsFilegroup(ctx android.LoadHookContext, modules []string) { - props := fgProps{} - props.Name = proptools.StringPtr("all-modules-system-annotations") - props.Srcs = createSrcs(modules, "{.system.annotations.zip}") - ctx.CreateModule(android.FileGroupFactory, &props) +func createMergedAnnotationsFilegroups(ctx android.LoadHookContext, modules, system_server_modules []string) { + for _, i := range []struct{ + name string + tag string + modules []string + }{ + { + name: "all-modules-public-annotations", + tag: "{.public.annotations.zip}", + modules: modules, + }, { + name: "all-modules-system-annotations", + tag: "{.system.annotations.zip}", + modules: modules, + }, { + name: "all-modules-module-lib-annotations", + tag: "{.module-lib.annotations.zip}", + modules: modules, + }, { + name: "all-modules-system-server-annotations", + tag: "{.system-server.annotations.zip}", + modules: system_server_modules, + }, + } { + props := fgProps{} + props.Name = proptools.StringPtr(i.name) + props.Srcs = createSrcs(i.modules, i.tag) + ctx.CreateModule(android.FileGroupFactory, &props) + } } func createFilteredApiVersions(ctx android.LoadHookContext, modules []string) { @@ -172,17 +189,43 @@ func createFilteredApiVersions(ctx android.LoadHookContext, modules []string) { // difficult to achieve. modules = remove(modules, art) - props := genruleProps{} - props.Name = proptools.StringPtr("api-versions-xml-public-filtered") - props.Tools = []string{"api_versions_trimmer"} - props.Out = []string{"api-versions-public-filtered.xml"} - props.Cmd = proptools.StringPtr("$(location api_versions_trimmer) $(out) $(in)") - // Note: order matters: first parameter is the full api-versions.xml - // after that the stubs files in any order - // stubs files are all modules that export API surfaces EXCEPT ART - props.Srcs = append([]string{":api_versions_public{.api_versions.xml}"}, createSrcs(modules, ".stubs{.jar}")...) - props.Dists = []android.Dist{{Targets: []string{"sdk"}}} - ctx.CreateModule(genrule.GenRuleFactory, &props) + for _, i := range []struct{ + name string + out string + in string + }{ + { + // We shouldn't need public-filtered or system-filtered. + // public-filtered is currently used to lint things that + // use the module sdk or the system server sdk, but those + // should be switched over to module-filtered and + // system-server-filtered, and then public-filtered can + // be removed. + name: "api-versions-xml-public-filtered", + out: "api-versions-public-filtered.xml", + in: ":api_versions_public{.api_versions.xml}", + }, { + name: "api-versions-xml-module-lib-filtered", + out: "api-versions-module-lib-filtered.xml", + in: ":api_versions_module_lib{.api_versions.xml}", + }, { + name: "api-versions-xml-system-server-filtered", + out: "api-versions-system-server-filtered.xml", + in: ":api_versions_system_server{.api_versions.xml}", + }, + } { + props := genruleProps{} + props.Name = proptools.StringPtr(i.name) + props.Out = []string{i.out} + // Note: order matters: first parameter is the full api-versions.xml + // after that the stubs files in any order + // stubs files are all modules that export API surfaces EXCEPT ART + props.Srcs = append([]string{i.in}, createSrcs(modules, ".stubs{.jar}")...) + props.Tools = []string{"api_versions_trimmer"} + props.Cmd = proptools.StringPtr("$(location api_versions_trimmer) $(out) $(in)") + props.Dists = []android.Dist{{Targets: []string{"sdk"}}} + ctx.CreateModule(genrule.GenRuleFactory, &props) + } } func createMergedPublicStubs(ctx android.LoadHookContext, modules []string) { @@ -279,11 +322,12 @@ func createMergedTxts(ctx android.LoadHookContext, bootclasspath, system_server_ func (a *CombinedApis) createInternalModules(ctx android.LoadHookContext) { bootclasspath := a.properties.Bootclasspath + system_server_classpath := a.properties.System_server_classpath if ctx.Config().VendorConfig("ANDROID").Bool("include_nonpublic_framework_api") { bootclasspath = append(bootclasspath, a.properties.Conditional_bootclasspath...) sort.Strings(bootclasspath) } - createMergedTxts(ctx, bootclasspath, a.properties.System_server_classpath) + createMergedTxts(ctx, bootclasspath, system_server_classpath) createMergedStubsSrcjar(ctx, bootclasspath) @@ -292,8 +336,7 @@ func (a *CombinedApis) createInternalModules(ctx android.LoadHookContext) { createMergedFrameworkModuleLibStubs(ctx, bootclasspath) createMergedFrameworkImpl(ctx, bootclasspath) - createMergedPublicAnnotationsFilegroup(ctx, bootclasspath) - createMergedSystemAnnotationsFilegroup(ctx, bootclasspath) + createMergedAnnotationsFilegroups(ctx, bootclasspath, system_server_classpath) createFilteredApiVersions(ctx, bootclasspath) -- cgit v1.2.3-59-g8ed1b