Add an `Override_apex_available` property for APEX
This property allows an APEX bundle to ignore the apex_available rules
defined in its dependencies, effectively allowing it to use any APEX
as its dependency.
Bug: 269660351
Test: m
Change-Id: Ib2797e04438ad908ac10b256dce07a7819e836b3
diff --git a/apex/apex.go b/apex/apex.go
index b77568d..9a80aa8 100644
--- a/apex/apex.go
+++ b/apex/apex.go
@@ -141,6 +141,9 @@
// Default: true.
Installable *bool
+ // Whether this APEX ignores the apex_available list defined in its dependencies.
+ Override_apex_available *bool
+
// If set true, VNDK libs are considered as stable libs and are not included in this APEX.
// Should be only used in non-system apexes (e.g. vendor: true). Default is false.
Use_vndk_as_stable *bool
@@ -1513,6 +1516,10 @@
return proptools.BoolDefault(a.properties.Platform_apis, false)
}
+func (a *apexBundle) OverrideApexAvailable() bool {
+ return proptools.BoolDefault(a.properties.Override_apex_available, false)
+}
+
// getCertString returns the name of the cert that should be used to sign this APEX. This is
// basically from the "certificate" property, but could be overridden by the device config.
func (a *apexBundle) getCertString(ctx android.BaseModuleContext) string {
@@ -3040,6 +3047,11 @@
return
}
+ // Ignore availability when `override_apex_available` is true.
+ if a.OverrideApexAvailable() {
+ return
+ }
+
a.WalkPayloadDeps(ctx, func(ctx android.ModuleContext, from blueprint.Module, to android.ApexModule, externalDep bool) bool {
// As soon as the dependency graph crosses the APEX boundary, don't go further.
if externalDep {