Mechanism to select a specific version of java_sdk_library_import
This CL is the java_sdk_library_import equivalent of aosp/2928483. With trunk stable, we will have multiple apex prebuilts in the tree. Each apex prebuilt will have its own module sdk. This means that it is possible to have mutliple versions of `framework-foo` in the tree. This CL introduces a mechanism to select a specific versioned java_sdk_library prebuilt. Implementation details - Add a `source_module_name` property to java_sdk_library_import. This will identify the source equivalent of the jsl in packages/modules. This used to be implicit - i.e. the name without the prebuilt_ prefix. With multiple prebuilts, this has to become explicit. - Set appropriate `source_module_name`(s) in the dynamically created child modules. e.g. the source_module_name on sdklib.v1.stubs and sdklib.v2.stubs will both be sdklib.stubs, assuming `source_module_name` on the top-level jsl_import is sdklib - Add a private Created_by_java_sdk_library_name property to java_import and prebuilt_stubs_sources modules. This will be used to idenfity the top level java_sdk_library_import that was used to create these child modules. This is necessary because java_sdk_library_imoprt is a macro that creates 1:many modules. However, to avoid toil, only the top-level java_sdk_library_import will be listed in `apex_contributions`. This new property will be used for source/prebuilt selection in android/prebuuilt.go - Rename BaseModuleName in commonSdkLibraryAndImportModule to RootLibraryName. This is necesssary because the former is now reserved to identify the source equivalent of a prebuilt module (maybe we should rename it?) Bug: 322175508 Test: Added a unit test Change-Id: If6aa6b0e939a07f8263874941413908383c81a78
This commit is contained in:
@@ -1830,3 +1830,93 @@ func TestStubResolutionOfJavaSdkLibraryInLibs(t *testing.T) {
|
||||
inputs := rule.Implicits.Strings()
|
||||
android.AssertStringListContains(t, "Could not find the expected stub on classpath", inputs, "out/soong/.intermediates/sdklib.stubs/android_common/turbine-combined/sdklib.stubs.jar")
|
||||
}
|
||||
|
||||
// test that rdep gets resolved to the correct version of a java_sdk_library (source or a specific prebuilt)
|
||||
func TestMultipleSdkLibraryPrebuilts(t *testing.T) {
|
||||
bp := `
|
||||
apex_contributions {
|
||||
name: "my_mainline_module_contributions",
|
||||
api_domain: "my_mainline_module",
|
||||
contents: ["%s"],
|
||||
}
|
||||
java_sdk_library {
|
||||
name: "sdklib",
|
||||
srcs: ["a.java"],
|
||||
sdk_version: "none",
|
||||
system_modules: "none",
|
||||
public: {
|
||||
enabled: true,
|
||||
},
|
||||
}
|
||||
java_sdk_library_import {
|
||||
name: "sdklib.v1", //prebuilt
|
||||
source_module_name: "sdklib",
|
||||
public: {
|
||||
jars: ["a.jar"],
|
||||
stub_srcs: ["a.java"],
|
||||
current_api: "current.txt",
|
||||
removed_api: "removed.txt",
|
||||
annotations: "annotations.zip",
|
||||
},
|
||||
}
|
||||
java_sdk_library_import {
|
||||
name: "sdklib.v2", //prebuilt
|
||||
source_module_name: "sdklib",
|
||||
public: {
|
||||
jars: ["a.jar"],
|
||||
stub_srcs: ["a.java"],
|
||||
current_api: "current.txt",
|
||||
removed_api: "removed.txt",
|
||||
annotations: "annotations.zip",
|
||||
},
|
||||
}
|
||||
// rdeps
|
||||
java_library {
|
||||
name: "mymodule",
|
||||
srcs: ["a.java"],
|
||||
libs: ["sdklib.stubs",],
|
||||
}
|
||||
`
|
||||
testCases := []struct {
|
||||
desc string
|
||||
selectedDependencyName string
|
||||
expectedStubPath string
|
||||
}{
|
||||
{
|
||||
desc: "Source library is selected using apex_contributions",
|
||||
selectedDependencyName: "sdklib",
|
||||
expectedStubPath: "out/soong/.intermediates/sdklib.stubs/android_common/turbine-combined/sdklib.stubs.jar",
|
||||
},
|
||||
{
|
||||
desc: "Prebuilt library v1 is selected using apex_contributions",
|
||||
selectedDependencyName: "prebuilt_sdklib.v1",
|
||||
expectedStubPath: "out/soong/.intermediates/prebuilt_sdklib.v1.stubs/android_common/combined/sdklib.stubs.jar",
|
||||
},
|
||||
{
|
||||
desc: "Prebuilt library v2 is selected using apex_contributions",
|
||||
selectedDependencyName: "prebuilt_sdklib.v2",
|
||||
expectedStubPath: "out/soong/.intermediates/prebuilt_sdklib.v2.stubs/android_common/combined/sdklib.stubs.jar",
|
||||
},
|
||||
}
|
||||
|
||||
fixture := android.GroupFixturePreparers(
|
||||
prepareForJavaTest,
|
||||
PrepareForTestWithJavaSdkLibraryFiles,
|
||||
FixtureWithLastReleaseApis("sdklib", "sdklib.v1", "sdklib.v2"),
|
||||
android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
|
||||
variables.BuildFlags = map[string]string{
|
||||
"RELEASE_APEX_CONTRIBUTIONS_ADSERVICES": "my_mainline_module_contributions",
|
||||
}
|
||||
}),
|
||||
)
|
||||
|
||||
for _, tc := range testCases {
|
||||
result := fixture.RunTestWithBp(t, fmt.Sprintf(bp, tc.selectedDependencyName))
|
||||
|
||||
// Make sure that rdeps get the correct source vs prebuilt based on mainline_module_contributions
|
||||
public := result.ModuleForTests("mymodule", "android_common")
|
||||
rule := public.Output("javac/mymodule.jar")
|
||||
inputs := rule.Implicits.Strings()
|
||||
android.AssertStringListContains(t, "Could not find the expected stub on classpath", inputs, tc.expectedStubPath)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user