Install external deps of an APEX
By default, if a lib is included in an APEX, all its direct and indirect dependencies are also included in the same APEX. However, when one of the dependencies have stable API (i.e. has stubs: {...}) then the lib having stable API and its dependencies are not included in the APEX. However, the problem here is that the lib having stable API might not be installed on the system, thus causing error at runtime. This can happen if there is no other module in the platform that depends on the lib. This change fixes the problem by adding such libraries as external dependencies so that they are also installed on the device along with the APEXes using them. Bug: 124831003 Test: m installclean; m com.android.resolv libbinder_ndk, libvndksupport are found under system/lib Change-Id: I457e03ff3fce37e0890c64d911e6e0ea6d0c6dd6
This commit is contained in:
14
apex/apex.go
14
apex/apex.go
@@ -389,6 +389,9 @@ type apexBundle struct {
|
||||
// list of files to be included in this apex
|
||||
filesInfo []apexFile
|
||||
|
||||
// list of module names that this APEX is depending on
|
||||
externalDeps []string
|
||||
|
||||
flattened bool
|
||||
|
||||
testApex bool
|
||||
@@ -731,6 +734,14 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
if am, ok := child.(android.ApexModule); ok && am.CanHaveApexVariants() && am.IsInstallableToApex() {
|
||||
if cc, ok := child.(*cc.Module); ok {
|
||||
if cc.IsStubs() || cc.HasStubsVariants() {
|
||||
// If the dependency is a stubs lib, don't include it in this APEX,
|
||||
// but make sure that the lib is installed on the device.
|
||||
// In case no APEX is having the lib, the lib is installed to the system
|
||||
// partition.
|
||||
if !android.DirectlyInAnyApex(ctx, cc.Name()) && !android.InList(cc.Name(), a.externalDeps) {
|
||||
a.externalDeps = append(a.externalDeps, cc.Name())
|
||||
}
|
||||
// Don't track further
|
||||
return false
|
||||
}
|
||||
depName := ctx.OtherModuleName(child)
|
||||
@@ -1126,6 +1137,9 @@ func (a *apexBundle) androidMkForType(apexType apexPackaging) android.AndroidMkD
|
||||
if len(moduleNames) > 0 {
|
||||
fmt.Fprintln(w, "LOCAL_REQUIRED_MODULES +=", strings.Join(moduleNames, " "))
|
||||
}
|
||||
if len(a.externalDeps) > 0 {
|
||||
fmt.Fprintln(w, "LOCAL_REQUIRED_MODULES +=", strings.Join(a.externalDeps, " "))
|
||||
}
|
||||
fmt.Fprintln(w, "include $(BUILD_PREBUILT)")
|
||||
|
||||
if apexType == imageApex {
|
||||
|
Reference in New Issue
Block a user