diff options
Diffstat (limited to 'sdk')
-rw-r--r-- | sdk/build_release.go | 12 | ||||
-rw-r--r-- | sdk/java_sdk_test.go | 71 | ||||
-rw-r--r-- | sdk/systemserverclasspath_fragment_sdk_test.go | 65 | ||||
-rw-r--r-- | sdk/update.go | 41 |
4 files changed, 168 insertions, 21 deletions
diff --git a/sdk/build_release.go b/sdk/build_release.go index 4c2277e85..0494a28ee 100644 --- a/sdk/build_release.go +++ b/sdk/build_release.go @@ -24,18 +24,22 @@ import ( // buildRelease represents the version of a build system used to create a specific release. // -// The name of the release, is the same as the code for the dessert release, e.g. S, T, etc. +// The name of the release, is the same as the code for the dessert release, e.g. S, Tiramisu, etc. type buildRelease struct { - // The name of the release, e.g. S, T, etc. + // The name of the release, e.g. S, Tiramisu, etc. name string // The index of this structure within the buildReleases list. ordinal int } +func (br *buildRelease) EarlierThan(other *buildRelease) bool { + return br.ordinal < other.ordinal +} + // String returns the name of the build release. -func (s *buildRelease) String() string { - return s.name +func (br *buildRelease) String() string { + return br.name } // buildReleaseSet represents a set of buildRelease objects. diff --git a/sdk/java_sdk_test.go b/sdk/java_sdk_test.go index a99fa1ff0..2cadd60f4 100644 --- a/sdk/java_sdk_test.go +++ b/sdk/java_sdk_test.go @@ -15,6 +15,7 @@ package sdk import ( + "fmt" "testing" "android/soong/android" @@ -339,8 +340,8 @@ func TestSnapshotWithJavaBootLibrary(t *testing.T) { android.FixtureAddFile("aidl", nil), android.FixtureAddFile("resource.txt", nil), ).RunTestWithBp(t, ` - module_exports { - name: "myexports", + sdk { + name: "mysdk", java_boot_libs: ["myjavalib"], } @@ -360,7 +361,7 @@ func TestSnapshotWithJavaBootLibrary(t *testing.T) { } `) - CheckSnapshot(t, result, "myexports", "", + CheckSnapshot(t, result, "mysdk", "", checkUnversionedAndroidBpContents(` // This is auto-generated. DO NOT EDIT. @@ -377,7 +378,7 @@ java_import { // This is auto-generated. DO NOT EDIT. java_import { - name: "myexports_myjavalib@current", + name: "mysdk_myjavalib@current", sdk_member_name: "myjavalib", visibility: ["//visibility:public"], apex_available: ["//apex_available:platform"], @@ -385,19 +386,73 @@ java_import { permitted_packages: ["pkg.myjavalib"], } -module_exports_snapshot { - name: "myexports@current", +sdk_snapshot { + name: "mysdk@current", visibility: ["//visibility:public"], - java_boot_libs: ["myexports_myjavalib@current"], + java_boot_libs: ["mysdk_myjavalib@current"], } `), checkAllCopyRules(` -.intermediates/myexports/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/myjavalib.jar +.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/myjavalib.jar `), ) } +func TestSnapshotWithJavaBootLibrary_UpdatableMedia(t *testing.T) { + runTest := func(t *testing.T, targetBuildRelease, expectedJarPath, expectedCopyRule string) { + result := android.GroupFixturePreparers( + prepareForSdkTestWithJava, + android.FixtureMergeEnv(map[string]string{ + "SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": targetBuildRelease, + }), + ).RunTestWithBp(t, ` + sdk { + name: "mysdk", + java_boot_libs: ["updatable-media"], + } + + java_library { + name: "updatable-media", + srcs: ["Test.java"], + system_modules: "none", + sdk_version: "none", + compile_dex: true, + permitted_packages: ["pkg.media"], + apex_available: ["com.android.media"], + } + `) + + CheckSnapshot(t, result, "mysdk", "", + checkUnversionedAndroidBpContents(fmt.Sprintf(` +// This is auto-generated. DO NOT EDIT. + +java_import { + name: "updatable-media", + prefer: false, + visibility: ["//visibility:public"], + apex_available: ["com.android.media"], + jars: ["%s"], + permitted_packages: ["pkg.media"], +} +`, expectedJarPath)), + checkAllCopyRules(expectedCopyRule), + ) + } + + t.Run("updatable-media in S", func(t *testing.T) { + runTest(t, "S", "java/updatable-media.jar", ` +.intermediates/updatable-media/android_common/package-check/updatable-media.jar -> java/updatable-media.jar +`) + }) + + t.Run("updatable-media in T", func(t *testing.T) { + runTest(t, "Tiramisu", "java_boot_libs/snapshot/jars/are/invalid/updatable-media.jar", ` +.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/updatable-media.jar +`) + }) +} + func TestSnapshotWithJavaSystemserverLibrary(t *testing.T) { result := android.GroupFixturePreparers( prepareForSdkTestWithJava, diff --git a/sdk/systemserverclasspath_fragment_sdk_test.go b/sdk/systemserverclasspath_fragment_sdk_test.go index 16e3e7fa9..819083d23 100644 --- a/sdk/systemserverclasspath_fragment_sdk_test.go +++ b/sdk/systemserverclasspath_fragment_sdk_test.go @@ -22,13 +22,16 @@ import ( "android/soong/java" ) -func TestSnapshotWithSystemServerClasspathFragment(t *testing.T) { +func testSnapshotWithSystemServerClasspathFragment(t *testing.T, targetBuildRelease string, expectedUnversionedSdkSnapshot string, expectedVersionedSdkSnapshot string) { result := android.GroupFixturePreparers( prepareForSdkTestWithJava, java.PrepareForTestWithJavaDefaultModules, java.PrepareForTestWithJavaSdkLibraryFiles, java.FixtureWithLastReleaseApis("mysdklibrary"), dexpreopt.FixtureSetApexSystemServerJars("myapex:mylib", "myapex:mysdklibrary"), + android.FixtureModifyEnv(func(env map[string]string) { + env["SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE"] = targetBuildRelease + }), prepareForSdkTestWithApex, android.FixtureWithRootAndroidBp(` @@ -83,7 +86,58 @@ func TestSnapshotWithSystemServerClasspathFragment(t *testing.T) { ).RunTest(t) CheckSnapshot(t, result, "mysdk", "", - checkUnversionedAndroidBpContents(` + checkUnversionedAndroidBpContents(expectedUnversionedSdkSnapshot), + checkVersionedAndroidBpContents(expectedVersionedSdkSnapshot), + ) +} + +func TestSnapshotWithSystemServerClasspathFragment(t *testing.T) { + t.Run("target-s", func(t *testing.T) { + testSnapshotWithSystemServerClasspathFragment(t, "S", ` +// This is auto-generated. DO NOT EDIT. + +java_sdk_library_import { + name: "mysdklibrary", + prefer: false, + visibility: ["//visibility:public"], + apex_available: ["myapex"], + shared_library: false, + public: { + jars: ["sdk_library/public/mysdklibrary-stubs.jar"], + stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"], + current_api: "sdk_library/public/mysdklibrary.txt", + removed_api: "sdk_library/public/mysdklibrary-removed.txt", + sdk_version: "current", + }, +} +`, ` +// This is auto-generated. DO NOT EDIT. + +java_sdk_library_import { + name: "mysdk_mysdklibrary@current", + sdk_member_name: "mysdklibrary", + visibility: ["//visibility:public"], + apex_available: ["myapex"], + shared_library: false, + public: { + jars: ["sdk_library/public/mysdklibrary-stubs.jar"], + stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"], + current_api: "sdk_library/public/mysdklibrary.txt", + removed_api: "sdk_library/public/mysdklibrary-removed.txt", + sdk_version: "current", + }, +} + +sdk_snapshot { + name: "mysdk@current", + visibility: ["//visibility:public"], + java_sdk_libs: ["mysdk_mysdklibrary@current"], +} +`) + }) + + t.Run("target-t", func(t *testing.T) { + testSnapshotWithSystemServerClasspathFragment(t, "Tiramisu", ` // This is auto-generated. DO NOT EDIT. java_sdk_library_import { @@ -120,8 +174,7 @@ prebuilt_systemserverclasspath_fragment { "mysdklibrary", ], } -`), - checkVersionedAndroidBpContents(` +`, ` // This is auto-generated. DO NOT EDIT. java_sdk_library_import { @@ -166,6 +219,6 @@ sdk_snapshot { java_systemserver_libs: ["mysdk_mylib@current"], systemserverclasspath_fragments: ["mysdk_mysystemserverclasspathfragment@current"], } -`), - ) +`) + }) } diff --git a/sdk/update.go b/sdk/update.go index 5db604b7c..017887461 100644 --- a/sdk/update.go +++ b/sdk/update.go @@ -242,7 +242,7 @@ func (s *sdk) collectMembers(ctx android.ModuleContext) { // Finally, the member type slices are concatenated together to form a single slice. The order in // which they are concatenated is the order in which the member types were registered in the // android.SdkMemberTypesRegistry. -func (s *sdk) groupMemberVariantsByMemberThenType(ctx android.ModuleContext, memberVariantDeps []sdkMemberVariantDep) []*sdkMember { +func (s *sdk) groupMemberVariantsByMemberThenType(ctx android.ModuleContext, targetBuildRelease *buildRelease, memberVariantDeps []sdkMemberVariantDep) []*sdkMember { byType := make(map[android.SdkMemberType][]*sdkMember) byName := make(map[string]*sdkMember) @@ -265,13 +265,39 @@ func (s *sdk) groupMemberVariantsByMemberThenType(ctx android.ModuleContext, mem var members []*sdkMember for _, memberListProperty := range s.memberTypeListProperties() { - membersOfType := byType[memberListProperty.memberType] + memberType := memberListProperty.memberType + + if !isMemberTypeSupportedByTargetBuildRelease(memberType, targetBuildRelease) { + continue + } + + membersOfType := byType[memberType] members = append(members, membersOfType...) } return members } +// isMemberTypeSupportedByTargetBuildRelease returns true if the member type is supported by the +// target build release. +func isMemberTypeSupportedByTargetBuildRelease(memberType android.SdkMemberType, targetBuildRelease *buildRelease) bool { + supportedByTargetBuildRelease := true + supportedBuildReleases := memberType.SupportedBuildReleases() + if supportedBuildReleases == "" { + supportedBuildReleases = "S+" + } + + set, err := parseBuildReleaseSet(supportedBuildReleases) + if err != nil { + panic(fmt.Errorf("member type %s has invalid supported build releases %q: %s", + memberType.SdkPropertyName(), supportedBuildReleases, err)) + } + if !set.contains(targetBuildRelease) { + supportedByTargetBuildRelease = false + } + return supportedByTargetBuildRelease +} + func appendUniqueVariants(variants []android.SdkAware, newVariant android.SdkAware) []android.SdkAware { for _, v := range variants { if v == newVariant { @@ -416,7 +442,7 @@ be unnecessary as every module in the sdk already has its own licenses property. // Group the variants for each member module together and then group the members of each member // type together. - members := s.groupMemberVariantsByMemberThenType(ctx, memberVariantDeps) + members := s.groupMemberVariantsByMemberThenType(ctx, targetBuildRelease, memberVariantDeps) // Create the prebuilt modules for each of the member modules. traits := s.gatherTraits() @@ -795,6 +821,9 @@ func (s *sdk) addSnapshotPropertiesToPropertySet(builder *snapshotBuilder, prope if memberListProperty.getter == nil { continue } + if !isMemberTypeSupportedByTargetBuildRelease(memberListProperty.memberType, builder.targetBuildRelease) { + continue + } names := memberListProperty.getter(dynamicMemberTypeListProperties) if len(names) > 0 { propertySet.AddProperty(memberListProperty.propertyName(), builder.versionedSdkMemberNames(names, false)) @@ -1902,6 +1931,12 @@ func (m *memberContext) RequiresTrait(trait android.SdkMemberTrait) bool { return m.requiredTraits.Contains(trait) } +func (m *memberContext) IsTargetBuildBeforeTiramisu() bool { + return m.builder.targetBuildRelease.EarlierThan(buildReleaseT) +} + +var _ android.SdkMemberContext = (*memberContext)(nil) + func (s *sdk) createMemberSnapshot(ctx *memberContext, member *sdkMember, bpModule *bpModule) { memberType := member.memberType |