Do not add dependencies of shared SDK libraries to manifest_fixer.
Test: lunch aosp_cf_x86_phone-userdebug && m Bug: 132357300 Bug: 168686456 Change-Id: Ibd9742684fa6a8f1353ca0e513f7fa814a6ec9fc
This commit is contained in:
@@ -71,6 +71,10 @@ type ClassLoaderContext struct {
|
||||
|
||||
// Nested class loader subcontexts for dependencies.
|
||||
Subcontexts []*ClassLoaderContext
|
||||
|
||||
// If the library is a shared library. This affects which elements of class loader context are
|
||||
// added as <uses-library> tags by the manifest_fixer (dependencies of shared libraries aren't).
|
||||
IsSharedLibrary bool
|
||||
}
|
||||
|
||||
// ClassLoaderContextMap is a map from SDK version to a class loader context.
|
||||
@@ -81,7 +85,7 @@ type ClassLoaderContextMap map[int][]*ClassLoaderContext
|
||||
|
||||
// Add class loader context for the given library to the map entry for the given SDK version.
|
||||
func (clcMap ClassLoaderContextMap) addContext(ctx android.ModuleInstallPathContext, sdkVer int, lib string,
|
||||
hostPath, installPath android.Path, strict bool, nestedClcMap ClassLoaderContextMap) error {
|
||||
shared bool, hostPath, installPath android.Path, strict bool, nestedClcMap ClassLoaderContextMap) error {
|
||||
|
||||
// If missing dependencies are allowed, the build shouldn't fail when a <uses-library> is
|
||||
// not found. However, this is likely to result is disabling dexpreopt, as it won't be
|
||||
@@ -128,46 +132,46 @@ func (clcMap ClassLoaderContextMap) addContext(ctx android.ModuleInstallPathCont
|
||||
}
|
||||
|
||||
clcMap[sdkVer] = append(clcMap[sdkVer], &ClassLoaderContext{
|
||||
Name: lib,
|
||||
Host: hostPath,
|
||||
Device: devicePath,
|
||||
Subcontexts: subcontexts,
|
||||
Name: lib,
|
||||
Host: hostPath,
|
||||
Device: devicePath,
|
||||
Subcontexts: subcontexts,
|
||||
IsSharedLibrary: shared,
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
// Wrapper around addContext that reports errors.
|
||||
func (clcMap ClassLoaderContextMap) addContextOrReportError(ctx android.ModuleInstallPathContext, sdkVer int, lib string,
|
||||
hostPath, installPath android.Path, strict bool, nestedClcMap ClassLoaderContextMap) {
|
||||
shared bool, hostPath, installPath android.Path, strict bool, nestedClcMap ClassLoaderContextMap) {
|
||||
|
||||
err := clcMap.addContext(ctx, sdkVer, lib, hostPath, installPath, strict, nestedClcMap)
|
||||
err := clcMap.addContext(ctx, sdkVer, lib, shared, hostPath, installPath, strict, nestedClcMap)
|
||||
if err != nil {
|
||||
ctx.ModuleErrorf(err.Error())
|
||||
android.ReportPathErrorf(ctx, err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
// Add class loader context. Fail on unknown build/install paths.
|
||||
func (clcMap ClassLoaderContextMap) AddContext(ctx android.ModuleInstallPathContext, lib string,
|
||||
hostPath, installPath android.Path) {
|
||||
shared bool, hostPath, installPath android.Path) {
|
||||
|
||||
clcMap.addContextOrReportError(ctx, AnySdkVersion, lib, hostPath, installPath, true, nil)
|
||||
clcMap.addContextOrReportError(ctx, AnySdkVersion, lib, shared, hostPath, installPath, true, nil)
|
||||
}
|
||||
|
||||
// Add class loader context if the library exists. Don't fail on unknown build/install paths.
|
||||
func (clcMap ClassLoaderContextMap) MaybeAddContext(ctx android.ModuleInstallPathContext, lib *string,
|
||||
hostPath, installPath android.Path) {
|
||||
shared bool, hostPath, installPath android.Path) {
|
||||
|
||||
if lib != nil {
|
||||
clcMap.addContextOrReportError(ctx, AnySdkVersion, *lib, hostPath, installPath, false, nil)
|
||||
clcMap.addContextOrReportError(ctx, AnySdkVersion, *lib, shared, hostPath, installPath, false, nil)
|
||||
}
|
||||
}
|
||||
|
||||
// Add class loader context for the given SDK version. Fail on unknown build/install paths.
|
||||
func (clcMap ClassLoaderContextMap) AddContextForSdk(ctx android.ModuleInstallPathContext, sdkVer int,
|
||||
lib string, hostPath, installPath android.Path, nestedClcMap ClassLoaderContextMap) {
|
||||
lib string, shared bool, hostPath, installPath android.Path, nestedClcMap ClassLoaderContextMap) {
|
||||
|
||||
clcMap.addContextOrReportError(ctx, sdkVer, lib, hostPath, installPath, true, nestedClcMap)
|
||||
clcMap.addContextOrReportError(ctx, sdkVer, lib, shared, hostPath, installPath, true, nestedClcMap)
|
||||
}
|
||||
|
||||
// Merge the other class loader context map into this one, do not override existing entries.
|
||||
@@ -204,7 +208,9 @@ func (clcMap ClassLoaderContextMap) AddContextMap(otherClcMap ClassLoaderContext
|
||||
}
|
||||
}
|
||||
|
||||
// List of libraries in the unconditional class loader context, excluding dependencies of shared libraries.
|
||||
// List of libraries in the unconditional class loader context, excluding dependencies of shared
|
||||
// libraries. These libraries should be in the <uses-library> tags in the manifest. Some of them may
|
||||
// be present in the original manifest, others are added by the manifest_fixer.
|
||||
func (clcMap ClassLoaderContextMap) UsesLibs() (ulibs []string) {
|
||||
if clcMap != nil {
|
||||
// compatibility libraries (those in conditional context) are not added to <uses-library> tags
|
||||
@@ -217,7 +223,12 @@ func (clcMap ClassLoaderContextMap) UsesLibs() (ulibs []string) {
|
||||
func usesLibsRec(clcs []*ClassLoaderContext) (ulibs []string) {
|
||||
for _, clc := range clcs {
|
||||
ulibs = append(ulibs, clc.Name)
|
||||
ulibs = append(ulibs, usesLibsRec(clc.Subcontexts)...)
|
||||
// <uses-library> tags in the manifest should not include dependencies of shared libraries,
|
||||
// because PackageManager already tracks all such dependencies and automatically adds their
|
||||
// class loader contexts as subcontext of the shared library.
|
||||
if !clc.IsSharedLibrary {
|
||||
ulibs = append(ulibs, usesLibsRec(clc.Subcontexts)...)
|
||||
}
|
||||
}
|
||||
return ulibs
|
||||
}
|
||||
|
Reference in New Issue
Block a user