Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1111b848 authored by Artur Satayev's avatar Artur Satayev Committed by satayev
Browse files

Introduce app -deps-info.

Similar to APEX-deps-info, app deps info produces two lists with
transitive dependencies.

Bug: 149622332
Test: m NetworkStack-deps-info
Change-Id: Ic6d94df3b7b4be5afe328a0abe768beee1a58362
Exempt-From-Owner-Approval: previous patch approved.
parent fb6d57e1
Loading
Loading
Loading
Loading
+47 −0
Original line number Original line Diff line number Diff line
@@ -171,6 +171,8 @@ type AndroidApp struct {
	noticeOutputs android.NoticeOutputs
	noticeOutputs android.NoticeOutputs


	overriddenManifestPackageName string
	overriddenManifestPackageName string

	android.ApexBundleDepsInfo
}
}


func (a *AndroidApp) IsInstallable() bool {
func (a *AndroidApp) IsInstallable() bool {
@@ -602,6 +604,8 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
			ctx.InstallFile(a.installDir, extra.Base(), extra)
			ctx.InstallFile(a.installDir, extra.Base(), extra)
		}
		}
	}
	}

	a.buildAppDependencyInfo(ctx)
}
}


func collectAppDeps(ctx android.ModuleContext, shouldCollectRecursiveNativeDeps bool,
func collectAppDeps(ctx android.ModuleContext, shouldCollectRecursiveNativeDeps bool,
@@ -670,6 +674,49 @@ func collectAppDeps(ctx android.ModuleContext, shouldCollectRecursiveNativeDeps
	return jniLibs, certificates
	return jniLibs, certificates
}
}


func (a *AndroidApp) walkPayloadDeps(ctx android.ModuleContext,
	do func(ctx android.ModuleContext, from blueprint.Module, to android.ApexModule, externalDep bool)) {

	ctx.WalkDeps(func(child, parent android.Module) bool {
		isExternal := !a.DepIsInSameApex(ctx, child)
		if am, ok := child.(android.ApexModule); ok {
			do(ctx, parent, am, isExternal)
		}
		return !isExternal
	})
}

func (a *AndroidApp) buildAppDependencyInfo(ctx android.ModuleContext) {
	if ctx.Host() {
		return
	}

	depsInfo := android.DepNameToDepInfoMap{}
	a.walkPayloadDeps(ctx, func(ctx android.ModuleContext, from blueprint.Module, to android.ApexModule, externalDep bool) {
		depName := to.Name()
		if info, exist := depsInfo[depName]; exist {
			info.From = append(info.From, from.Name())
			info.IsExternal = info.IsExternal && externalDep
			depsInfo[depName] = info
		} else {
			toMinSdkVersion := "(no version)"
			if m, ok := to.(interface{ MinSdkVersion() string }); ok {
				if v := m.MinSdkVersion(); v != "" {
					toMinSdkVersion = v
				}
			}
			depsInfo[depName] = android.ApexModuleDepInfo{
				To:            depName,
				From:          []string{from.Name()},
				IsExternal:    externalDep,
				MinSdkVersion: toMinSdkVersion,
			}
		}
	})

	a.ApexBundleDepsInfo.BuildDepsInfoLists(ctx, a.MinSdkVersion(), depsInfo)
}

func (a *AndroidApp) getCertString(ctx android.BaseModuleContext) string {
func (a *AndroidApp) getCertString(ctx android.BaseModuleContext) string {
	certificate, overridden := ctx.DeviceConfig().OverrideCertificateFor(ctx.ModuleName())
	certificate, overridden := ctx.DeviceConfig().OverrideCertificateFor(ctx.ModuleName())
	if overridden {
	if overridden {