From ea8f808580824fb1c0828ca9bc3644da274e8297 Mon Sep 17 00:00:00 2001 From: Paul Duffin Date: Thu, 24 Jun 2021 13:25:57 +0100 Subject: [PATCH] Ensure consistent APEX variation for java_sdk_library and java_sdk_library_import Previously, a java_sdk_library with shared_library = true would create a variation per APEX because it depends on an sdkLibraryXml module which generates a file containing the APEX name. However, a shared java_sdk_library_import would create a merged APEX variation. The inconsistent variations caused failures in sdkDepsReplaceMutator. This change ensures that both java_sdk_library and java_sdk_library_import create an APEX specific variation when their shared_library property is true. Bug: 190499958 Test: m nothing - ran the above command after modifying the test to reproduce the problem and then after fixing to verify that it fixed the problem. Change-Id: Iee81776a8569db3e871c40cbde14d248dfeb56e4 --- java/sdk_library.go | 20 ++++++++++++++++++++ sdk/bootclasspath_fragment_sdk_test.go | 16 ++++++++++------ 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/java/sdk_library.go b/java/sdk_library.go index b07dcd151..567e29219 100644 --- a/java/sdk_library.go +++ b/java/sdk_library.go @@ -684,6 +684,15 @@ func (c *commonToSdkLibraryAndImport) initCommonAfterDefaultsApplied(ctx android return true } +// uniqueApexVariations provides common implementation of the ApexModule.UniqueApexVariations +// method. +func (c *commonToSdkLibraryAndImport) uniqueApexVariations() bool { + // A java_sdk_library that is a shared library produces an XML file that makes the shared library + // usable from an AndroidManifest.xml's entry. That XML file contains the name of + // the APEX and so it needs a unique variation per APEX. + return c.sharedLibrary() +} + func (c *commonToSdkLibraryAndImport) generateCommonBuildActions(ctx android.ModuleContext) { c.doctagPaths = android.PathsForModuleSrc(ctx, c.commonSdkLibraryProperties.Doctag_files) } @@ -1528,6 +1537,7 @@ func (module *SdkLibrary) createStubsSourcesAndApi(mctx android.DefaultableHookC mctx.CreateModule(DroidstubsFactory, &props) } +// Implements android.ApexModule func (module *SdkLibrary) DepIsInSameApex(mctx android.BaseModuleContext, dep android.Module) bool { depTag := mctx.OtherModuleDependencyTag(dep) if depTag == xmlPermissionsFileTag { @@ -1536,6 +1546,11 @@ func (module *SdkLibrary) DepIsInSameApex(mctx android.BaseModuleContext, dep an return module.Library.DepIsInSameApex(mctx, dep) } +// Implements android.ApexModule +func (module *SdkLibrary) UniqueApexVariations() bool { + return module.uniqueApexVariations() +} + // Creates the xml file that publicizes the runtime library func (module *SdkLibrary) createXmlFile(mctx android.DefaultableHookContext) { props := struct { @@ -2090,6 +2105,11 @@ func (module *SdkLibraryImport) ShouldSupportSdkVersion(ctx android.BaseModuleCo return nil } +// Implements android.ApexModule +func (module *SdkLibraryImport) UniqueApexVariations() bool { + return module.uniqueApexVariations() +} + func (module *SdkLibraryImport) OutputFiles(tag string) (android.Paths, error) { return module.commonOutputFiles(tag) } diff --git a/sdk/bootclasspath_fragment_sdk_test.go b/sdk/bootclasspath_fragment_sdk_test.go index d47eb1fb5..a458cba7d 100644 --- a/sdk/bootclasspath_fragment_sdk_test.go +++ b/sdk/bootclasspath_fragment_sdk_test.go @@ -273,7 +273,7 @@ func TestSnapshotWithBootClasspathFragment_Contents(t *testing.T) { name: "myothersdklibrary", apex_available: ["myapex"], srcs: ["Test.java"], - shared_library: false, + compile_dex: true, public: {enabled: true}, min_sdk_version: "2", permitted_packages: ["myothersdklibrary"], @@ -283,7 +283,7 @@ func TestSnapshotWithBootClasspathFragment_Contents(t *testing.T) { name: "mycoreplatform", apex_available: ["myapex"], srcs: ["Test.java"], - shared_library: false, + compile_dex: true, public: {enabled: true}, min_sdk_version: "2", } @@ -334,7 +334,8 @@ java_sdk_library_import { prefer: false, visibility: ["//visibility:public"], apex_available: ["myapex"], - shared_library: false, + shared_library: true, + compile_dex: true, public: { jars: ["sdk_library/public/myothersdklibrary-stubs.jar"], stub_srcs: ["sdk_library/public/myothersdklibrary_stub_sources"], @@ -364,7 +365,8 @@ java_sdk_library_import { prefer: false, visibility: ["//visibility:public"], apex_available: ["myapex"], - shared_library: false, + shared_library: true, + compile_dex: true, public: { jars: ["sdk_library/public/mycoreplatform-stubs.jar"], stub_srcs: ["sdk_library/public/mycoreplatform_stub_sources"], @@ -414,7 +416,8 @@ java_sdk_library_import { sdk_member_name: "myothersdklibrary", visibility: ["//visibility:public"], apex_available: ["myapex"], - shared_library: false, + shared_library: true, + compile_dex: true, public: { jars: ["sdk_library/public/myothersdklibrary-stubs.jar"], stub_srcs: ["sdk_library/public/myothersdklibrary_stub_sources"], @@ -444,7 +447,8 @@ java_sdk_library_import { sdk_member_name: "mycoreplatform", visibility: ["//visibility:public"], apex_available: ["myapex"], - shared_library: false, + shared_library: true, + compile_dex: true, public: { jars: ["sdk_library/public/mycoreplatform-stubs.jar"], stub_srcs: ["sdk_library/public/mycoreplatform_stub_sources"],