diff options
author | Paul Duffin <paulduffin@google.com> | 2024-05-02 14:51:41 +0100 |
---|---|---|
committer | Paul Duffin <paulduffin@google.com> | 2024-05-03 08:46:45 +0100 |
commit | fb5e07d4d2fa7ce2d442290a820ff7b68e28aeb8 (patch) | |
tree | 32c6f4f49c632db61444b156567385cfbdaa32f9 | |
parent | ca3da5d19c2bf7529b289b3e1da3ed45a7db657e (diff) | |
download | base-fb5e07d4d2fa7ce2d442290a820ff7b68e28aeb8.tar.gz |
Build complete api-versions.xml files for module-lib/system-server
Previously, APIs from updatable modules and information about the SDK
extensions was only included in `api_versions_public` and
`api_versions_system`. This change adds the following two modules:
* `api_versions_module_lib_complete`
* `api_versions_system_server_complete`
It did not change `api_versions_module_lib` or
`api_versions_system_server` because Android Lint requires that they do
not include information about APIs from updatable modules because
otherwise it will report calls within a module as it has no way to
determine whether a call crosses an API boundary or not.
Bug: 336993217
Test: TARGETS=$(for i in public system module-lib module-lib-complete system-server-complete; do U=$(echo $i | sed "s|-|_|g"); echo "out/target/common/obj/PACKAGING/api_versions_${U}_generated-api-versions.xml"; done)
m $TARGETS; mkdir -p before; cp $TARGETS before
m $TARGETS; mkdir -p after; cp $TARGETS after
meld before after
# Review differences.
Change-Id: Ia542fbdc517fb223a0488f0e3f81b8727cb204e4
-rw-r--r-- | api/StubLibraries.bp | 56 | ||||
-rw-r--r-- | api/api.go | 21 |
2 files changed, 77 insertions, 0 deletions
diff --git a/api/StubLibraries.bp b/api/StubLibraries.bp index 525c208b14a6..f2c39be28bcf 100644 --- a/api/StubLibraries.bp +++ b/api/StubLibraries.bp @@ -1214,6 +1214,32 @@ droidstubs { api_levels_sdk_type: "module-lib", } +// Create a single jar containing the whole module-lib API surface. +// This is needed because Metalava only consumes the first jar file it is given +// and ignores the rest. +java_library { + name: "android_module_stubs_complete_current_with_test_libs", + static_libs: [ + "android_module_stubs_current_with_test_libs", + "framework-updatable-stubs-module_libs_api-exportable", + ], + defaults: ["android.jar_defaults"], + visibility: [ + "//visibility:override", + "//visibility:private", + ], +} + +// Produces an `api-versions.xml` file that includes up-to-date information +// about all the module-lib APIs, both updatable and non-updatable and historic +// information about all previous dessert and SDK extension releases. +droidstubs { + name: "api_versions_module_lib_complete", + defaults: ["api_versions_complete_defaults"], + srcs: [":android_module_stubs_complete_current_with_test_libs{.jar}"], + api_levels_sdk_type: "module-lib", +} + // Produces an `api-versions.xml` file that includes up-to-date information // about only the non-updatable system-server APIs and historic information // about all previous dessert and SDK extension releases. That historic @@ -1226,6 +1252,36 @@ droidstubs { api_levels_sdk_type: "system-server", } +// Create a single jar containing the whole system-server API surface. +// This is needed because Metalava only consumes the first jar file it is given +// and ignores the rest. +java_library { + name: "android_system_server_stubs_complete_current_with_test_libs", + static_libs: [ + "android_system_server_stubs_current_with_test_libs", + // system-server extends module-lib but libraries which only service-* + // libraries provided system-server APIs, so include module-lib APIs for + // the others, e.g. framework-* libraries. + "framework-updatable-stubs-module_libs_api-exportable", + "framework-updatable-stubs-system_server_api-exportable", + ], + defaults: ["android.jar_defaults"], + visibility: [ + "//visibility:override", + "//visibility:private", + ], +} + +// Produces an `api-versions.xml` file that includes up-to-date information +// about all the system-server APIs, both updatable and non-updatable and +// historic information about all previous dessert and SDK extension releases. +droidstubs { + name: "api_versions_system_server_complete", + defaults: ["api_versions_complete_defaults"], + srcs: [":android_system_server_stubs_complete_current_with_test_libs{.jar}"], + api_levels_sdk_type: "system-server", +} + ///////////////////////////////////////////////////////////////////// // hwbinder.stubs provides APIs required for building HIDL Java // libraries. diff --git a/api/api.go b/api/api.go index b31a26c90789..449fac63f90c 100644 --- a/api/api.go +++ b/api/api.go @@ -386,6 +386,26 @@ func createMergedFrameworkModuleLibStubs(ctx android.LoadHookContext, modules [] ctx.CreateModule(java.LibraryFactory, &props) } +func createMergedFrameworkSystemServerExportableStubs(ctx android.LoadHookContext, bootclasspath, system_server_classpath []string) { + // The user of this module compiles against the "core" SDK and against non-updatable bootclasspathModules, + // so remove to avoid dupes. + bootclasspathModules := removeAll(bootclasspath, core_libraries_modules) + bootclasspathModules = removeAll(bootclasspath, non_updatable_modules) + modules := append( + // Include all the module-lib APIs from the bootclasspath libraries. + transformArray(bootclasspathModules, "", ".stubs.exportable.module_lib"), + // Then add all the system-server APIs from the service-* libraries. + transformArray(system_server_classpath, "", ".stubs.exportable.system_server")..., + ) + props := libraryProps{} + props.Name = proptools.StringPtr("framework-updatable-stubs-system_server_api-exportable") + props.Static_libs = modules + props.Sdk_version = proptools.StringPtr("system_server_current") + props.Visibility = []string{"//frameworks/base"} + props.Is_stubs_module = proptools.BoolPtr(true) + ctx.CreateModule(java.LibraryFactory, &props) +} + func createPublicStubsSourceFilegroup(ctx android.LoadHookContext, modules []string) { props := fgProps{} props.Name = proptools.StringPtr("all-modules-public-stubs-source") @@ -531,6 +551,7 @@ func (a *CombinedApis) createInternalModules(ctx android.LoadHookContext) { createMergedSystemExportableStubs(ctx, bootclasspath) createMergedTestExportableStubsForNonUpdatableModules(ctx) createMergedFrameworkModuleLibExportableStubs(ctx, bootclasspath) + createMergedFrameworkSystemServerExportableStubs(ctx, bootclasspath, system_server_classpath) createMergedAnnotationsFilegroups(ctx, bootclasspath, system_server_classpath) |