Don't add uses_libs
/optional_uses_libs
to the manifest_fixer.
These properties specify libraries that cannot be implicitly inferred by Soong. If these properties are added to Android.bp, this can only be for the reason that there is a <uses-library> tag in the manifest which is unknown to the build system. Adding them to the manifest_fixer doesn't make sense: if they are not in the manifest, they should be removed from Android.bp as well. Bug: 132357300 Test: $ lunch aosp_cf_x86_64_phone-userdebug && m && launch_cvd $ adb wait-for-device && adb root && adb logcat \ | grep -E 'ClassLoaderContext [a-z ]+ mismatch' # empty grep output, no errors Change-Id: Ic6eb5268a954ef3be7f06a181ec72af99000c547
This commit is contained in:
@@ -196,6 +196,10 @@ type ClassLoaderContext struct {
|
||||
// If the library is optional or required.
|
||||
Optional bool
|
||||
|
||||
// If the library is implicitly infered by Soong (as opposed to explicitly added via `uses_libs`
|
||||
// or `optional_uses_libs`.
|
||||
Implicit bool
|
||||
|
||||
// On-host build path to the library dex file (used in dex2oat argument --class-loader-context).
|
||||
Host android.Path
|
||||
|
||||
@@ -258,8 +262,9 @@ const UnknownInstallLibraryPath = "error"
|
||||
const AnySdkVersion int = android.FutureApiLevelInt
|
||||
|
||||
// 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,
|
||||
optional bool, hostPath, installPath android.Path, nestedClcMap ClassLoaderContextMap) error {
|
||||
func (clcMap ClassLoaderContextMap) addContext(ctx android.ModuleInstallPathContext, sdkVer int,
|
||||
lib string, optional, implicit bool, hostPath, installPath android.Path,
|
||||
nestedClcMap ClassLoaderContextMap) error {
|
||||
|
||||
// For prebuilts, library should have the same name as the source module.
|
||||
lib = android.RemoveOptionalPrebuiltPrefix(lib)
|
||||
@@ -308,6 +313,7 @@ func (clcMap ClassLoaderContextMap) addContext(ctx android.ModuleInstallPathCont
|
||||
clcMap[sdkVer] = append(clcMap[sdkVer], &ClassLoaderContext{
|
||||
Name: lib,
|
||||
Optional: optional,
|
||||
Implicit: implicit,
|
||||
Host: hostPath,
|
||||
Device: devicePath,
|
||||
Subcontexts: subcontexts,
|
||||
@@ -320,9 +326,10 @@ func (clcMap ClassLoaderContextMap) addContext(ctx android.ModuleInstallPathCont
|
||||
// about paths). For the subset of libraries that are used in dexpreopt, their build/install paths
|
||||
// are validated later before CLC is used (in validateClassLoaderContext).
|
||||
func (clcMap ClassLoaderContextMap) AddContext(ctx android.ModuleInstallPathContext, sdkVer int,
|
||||
lib string, optional bool, hostPath, installPath android.Path, nestedClcMap ClassLoaderContextMap) {
|
||||
lib string, optional, implicit bool, hostPath, installPath android.Path,
|
||||
nestedClcMap ClassLoaderContextMap) {
|
||||
|
||||
err := clcMap.addContext(ctx, sdkVer, lib, optional, hostPath, installPath, nestedClcMap)
|
||||
err := clcMap.addContext(ctx, sdkVer, lib, optional, implicit, hostPath, installPath, nestedClcMap)
|
||||
if err != nil {
|
||||
ctx.ModuleErrorf(err.Error())
|
||||
}
|
||||
@@ -366,13 +373,15 @@ func (clcMap ClassLoaderContextMap) AddContextMap(otherClcMap ClassLoaderContext
|
||||
// included). This is the list of libraries that should be in the <uses-library> tags in the
|
||||
// manifest. Some of them may be present in the source manifest, others are added by manifest_fixer.
|
||||
// Required and optional libraries are in separate lists.
|
||||
func (clcMap ClassLoaderContextMap) UsesLibs() (required []string, optional []string) {
|
||||
func (clcMap ClassLoaderContextMap) usesLibs(implicit bool) (required []string, optional []string) {
|
||||
if clcMap != nil {
|
||||
clcs := clcMap[AnySdkVersion]
|
||||
required = make([]string, 0, len(clcs))
|
||||
optional = make([]string, 0, len(clcs))
|
||||
for _, clc := range clcs {
|
||||
if clc.Optional {
|
||||
if implicit && !clc.Implicit {
|
||||
// Skip, this is an explicit library and we need only the implicit ones.
|
||||
} else if clc.Optional {
|
||||
optional = append(optional, clc.Name)
|
||||
} else {
|
||||
required = append(required, clc.Name)
|
||||
@@ -382,6 +391,14 @@ func (clcMap ClassLoaderContextMap) UsesLibs() (required []string, optional []st
|
||||
return required, optional
|
||||
}
|
||||
|
||||
func (clcMap ClassLoaderContextMap) UsesLibs() ([]string, []string) {
|
||||
return clcMap.usesLibs(false)
|
||||
}
|
||||
|
||||
func (clcMap ClassLoaderContextMap) ImplicitUsesLibs() ([]string, []string) {
|
||||
return clcMap.usesLibs(true)
|
||||
}
|
||||
|
||||
func (clcMap ClassLoaderContextMap) Dump() string {
|
||||
jsonCLC := toJsonClassLoaderContext(clcMap)
|
||||
bytes, err := json.MarshalIndent(jsonCLC, "", " ")
|
||||
@@ -524,6 +541,8 @@ func computeClassLoaderContextRec(clcs []*ClassLoaderContext) (string, string, a
|
||||
// the same as Soong representation except that SDK versions and paths are represented with strings.
|
||||
type jsonClassLoaderContext struct {
|
||||
Name string
|
||||
Optional bool
|
||||
Implicit bool
|
||||
Host string
|
||||
Device string
|
||||
Subcontexts []*jsonClassLoaderContext
|
||||
@@ -555,6 +574,8 @@ func fromJsonClassLoaderContextRec(ctx android.PathContext, jClcs []*jsonClassLo
|
||||
for _, clc := range jClcs {
|
||||
clcs = append(clcs, &ClassLoaderContext{
|
||||
Name: clc.Name,
|
||||
Optional: clc.Optional,
|
||||
Implicit: clc.Implicit,
|
||||
Host: constructPath(ctx, clc.Host),
|
||||
Device: clc.Device,
|
||||
Subcontexts: fromJsonClassLoaderContextRec(ctx, clc.Subcontexts),
|
||||
@@ -579,6 +600,8 @@ func toJsonClassLoaderContextRec(clcs []*ClassLoaderContext) []*jsonClassLoaderC
|
||||
for i, clc := range clcs {
|
||||
jClcs[i] = &jsonClassLoaderContext{
|
||||
Name: clc.Name,
|
||||
Optional: clc.Optional,
|
||||
Implicit: clc.Implicit,
|
||||
Host: clc.Host.String(),
|
||||
Device: clc.Device,
|
||||
Subcontexts: toJsonClassLoaderContextRec(clc.Subcontexts),
|
||||
|
Reference in New Issue
Block a user