Add support for sdk extensions in prebuilt_apis
This makes it possible to pass an extensions_dir containing finalized module APIs to prebuilt_apis. The extension versions are compared to the api level versions to figure out what the "latest" finalized API is for each module. This is done using the base_sdk_extension_version, such that any extension higher than than base_sdk_extension_version is assumed to be finalized after any of the existing api level versions. Bug: 220086085 Test: prebuilt_apis_test.go Test: existing module in prebuilts/sdk Change-Id: Ib792f84202d436f594ba5e8716c6a187f9cd60dc
This commit is contained in:
@@ -146,6 +146,10 @@ var PrepareForTestWithPrebuiltsOfCurrentApi = FixtureWithPrebuiltApis(map[string
|
||||
// This defines a file in the mock file system in a predefined location (prebuilts/sdk/Android.bp)
|
||||
// and so only one instance of this can be used in each fixture.
|
||||
func FixtureWithPrebuiltApis(release2Modules map[string][]string) android.FixturePreparer {
|
||||
return FixtureWithPrebuiltApisAndExtensions(release2Modules, nil)
|
||||
}
|
||||
|
||||
func FixtureWithPrebuiltApisAndExtensions(apiLevel2Modules map[string][]string, extensionLevel2Modules map[string][]string) android.FixturePreparer {
|
||||
mockFS := android.MockFS{}
|
||||
path := "prebuilts/sdk/Android.bp"
|
||||
|
||||
@@ -153,14 +157,20 @@ func FixtureWithPrebuiltApis(release2Modules map[string][]string) android.Fixtur
|
||||
prebuilt_apis {
|
||||
name: "sdk",
|
||||
api_dirs: ["%s"],
|
||||
extensions_dir: "extensions",
|
||||
imports_sdk_version: "none",
|
||||
imports_compile_dex: true,
|
||||
}
|
||||
`, strings.Join(android.SortedStringKeys(release2Modules), `", "`))
|
||||
`, strings.Join(android.SortedStringKeys(apiLevel2Modules), `", "`))
|
||||
|
||||
for release, modules := range release2Modules {
|
||||
for release, modules := range apiLevel2Modules {
|
||||
mockFS.Merge(prebuiltApisFilesForModules([]string{release}, modules))
|
||||
}
|
||||
if extensionLevel2Modules != nil {
|
||||
for release, modules := range extensionLevel2Modules {
|
||||
mockFS.Merge(prebuiltExtensionApiFiles([]string{release}, modules))
|
||||
}
|
||||
}
|
||||
return android.GroupFixturePreparers(
|
||||
android.FixtureAddTextFile(path, bp),
|
||||
android.FixtureMergeMockFs(mockFS),
|
||||
@@ -198,6 +208,19 @@ func prebuiltApisFilesForModules(apiLevels []string, modules []string) map[strin
|
||||
return fs
|
||||
}
|
||||
|
||||
func prebuiltExtensionApiFiles(extensionLevels []string, modules []string) map[string][]byte {
|
||||
fs := make(map[string][]byte)
|
||||
for _, level := range extensionLevels {
|
||||
for _, sdkKind := range []android.SdkKind{android.SdkPublic, android.SdkSystem, android.SdkModule, android.SdkSystemServer} {
|
||||
for _, lib := range modules {
|
||||
fs[fmt.Sprintf("prebuilts/sdk/extensions/%s/%s/api/%s.txt", level, sdkKind, lib)] = nil
|
||||
fs[fmt.Sprintf("prebuilts/sdk/extensions/%s/%s/api/%s-removed.txt", level, sdkKind, lib)] = nil
|
||||
}
|
||||
}
|
||||
}
|
||||
return fs
|
||||
}
|
||||
|
||||
// FixtureConfigureBootJars configures the boot jars in both the dexpreopt.GlobalConfig and
|
||||
// Config.productVariables structs. As a side effect that enables dexpreopt.
|
||||
func FixtureConfigureBootJars(bootJars ...string) android.FixturePreparer {
|
||||
|
Reference in New Issue
Block a user