diff options
Diffstat (limited to 'android/apex.go')
| -rw-r--r-- | android/apex.go | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/android/apex.go b/android/apex.go index 4618fe97e..b9efe4e5a 100644 --- a/android/apex.go +++ b/android/apex.go @@ -54,6 +54,10 @@ type ApexInfo struct { // True if this module comes from an updatable apexBundle. Updatable bool + // True if this module can use private platform APIs. Only non-updatable APEX can set this + // to true. + UsePlatformApis bool + // The list of SDK modules that the containing apexBundle depends on. RequiredSdks SdkRefs @@ -87,16 +91,31 @@ type ApexInfo struct { var ApexInfoProvider = blueprint.NewMutatorProvider(ApexInfo{}, "apex") +func (i ApexInfo) AddJSONData(d *map[string]interface{}) { + (*d)["Apex"] = map[string]interface{}{ + "ApexVariationName": i.ApexVariationName, + "MinSdkVersion": i.MinSdkVersion, + "InApexModules": i.InApexModules, + "InApexVariants": i.InApexVariants, + "ForPrebuiltApex": i.ForPrebuiltApex, + } +} + // mergedName gives the name of the alias variation that will be used when multiple apex variations // of a module can be deduped into one variation. For example, if libfoo is included in both apex.a // and apex.b, and if the two APEXes have the same min_sdk_version (say 29), then libfoo doesn't // have to be built twice, but only once. In that case, the two apex variations apex.a and apex.b -// are configured to have the same alias variation named apex29. +// are configured to have the same alias variation named apex29. Whether platform APIs is allowed +// or not also matters; if two APEXes don't have the same allowance, they get different names and +// thus wouldn't be merged. func (i ApexInfo) mergedName(ctx PathContext) string { name := "apex" + strconv.Itoa(i.MinSdkVersion.FinalOrFutureInt()) for _, sdk := range i.RequiredSdks { name += "_" + sdk.Name + "_" + sdk.Version } + if i.UsePlatformApis { + name += "_private" + } return name } @@ -527,6 +546,10 @@ func mergeApexVariations(ctx PathContext, apexInfos []ApexInfo) (merged []ApexIn merged[index].InApexModules = append(merged[index].InApexModules, apexInfo.InApexModules...) merged[index].ApexContents = append(merged[index].ApexContents, apexInfo.ApexContents...) merged[index].Updatable = merged[index].Updatable || apexInfo.Updatable + if merged[index].UsePlatformApis != apexInfo.UsePlatformApis { + panic(fmt.Errorf("variants having different UsePlatformApis can't be merged")) + } + merged[index].UsePlatformApis = apexInfo.UsePlatformApis } else { seen[mergedName] = len(merged) apexInfo.ApexVariationName = mergedName |