diff options
| author | 2019-04-19 16:22:57 -0700 | |
|---|---|---|
| committer | 2019-04-24 14:40:14 -0700 | |
| commit | 90c25c689392a265c85d382152a938cae092623c (patch) | |
| tree | 1f3b8b1eb19525b197f513d5c2d2cc53b9706936 /java/aar.go | |
| parent | 28c3eb6829f6516ff3bb94d8c59ecd0b8ff16f17 (diff) | |
Don't use merged manifest for android_library modules
Don't use the merged manifest for android_library modules.  We
still have to run manifest merger for android_library modules
because Make can't handle transitive dependencies, so it will
continue to merge the manifests at each library, and then merge
the manifests of direct dependencies into the final application.
Bug: 113294940
Test: m checkbuild
Change-Id: Ia8f9f910bd0a134730ddf2d542460eeddbc0a075
Diffstat (limited to 'java/aar.go')
| -rw-r--r-- | java/aar.go | 61 | 
1 files changed, 39 insertions, 22 deletions
diff --git a/java/aar.go b/java/aar.go index c62127664..3af76102e 100644 --- a/java/aar.go +++ b/java/aar.go @@ -29,7 +29,7 @@ type AndroidLibraryDependency interface {  	ExportedProguardFlagFiles() android.Paths  	ExportedRRODirs() []rroDir  	ExportedStaticPackages() android.Paths -	ExportedManifest() android.Path +	ExportedManifests() android.Paths  }  func init() { @@ -71,17 +71,19 @@ type aaptProperties struct {  }  type aapt struct { -	aaptSrcJar            android.Path -	exportPackage         android.Path -	manifestPath          android.Path -	proguardOptionsFile   android.Path -	rroDirs               []rroDir -	rTxt                  android.Path -	extraAaptPackagesFile android.Path -	isLibrary             bool -	uncompressedJNI       bool -	useEmbeddedDex        bool -	usesNonSdkApis        bool +	aaptSrcJar              android.Path +	exportPackage           android.Path +	manifestPath            android.Path +	transitiveManifestPaths android.Paths +	proguardOptionsFile     android.Path +	rroDirs                 []rroDir +	rTxt                    android.Path +	extraAaptPackagesFile   android.Path +	mergedManifestFile      android.Path +	isLibrary               bool +	uncompressedJNI         bool +	useEmbeddedDex          bool +	usesNonSdkApis          bool  	splitNames []string  	splits     []split @@ -103,8 +105,8 @@ func (a *aapt) ExportedRRODirs() []rroDir {  	return a.rroDirs  } -func (a *aapt) ExportedManifest() android.Path { -	return a.manifestPath +func (a *aapt) ExportedManifests() android.Paths { +	return a.transitiveManifestPaths  }  func (a *aapt) aapt2Flags(ctx android.ModuleContext, sdkContext sdkContext, manifestPath android.Path) (flags []string, @@ -192,14 +194,28 @@ func (a *aapt) deps(ctx android.BottomUpMutatorContext, sdkContext sdkContext) {  }  func (a *aapt) buildActions(ctx android.ModuleContext, sdkContext sdkContext, extraLinkFlags ...string) { -	transitiveStaticLibs, staticLibManifests, staticRRODirs, libDeps, libFlags := aaptLibs(ctx, sdkContext) +	transitiveStaticLibs, transitiveStaticLibManifests, staticRRODirs, libDeps, libFlags := aaptLibs(ctx, sdkContext)  	// App manifest file  	manifestFile := proptools.StringDefault(a.aaptProperties.Manifest, "AndroidManifest.xml")  	manifestSrcPath := android.PathForModuleSrc(ctx, manifestFile) -	manifestPath := manifestMerger(ctx, manifestSrcPath, sdkContext, staticLibManifests, a.isLibrary, -		a.uncompressedJNI, a.useEmbeddedDex, a.usesNonSdkApis) +	manifestPath := manifestFixer(ctx, manifestSrcPath, sdkContext, +		a.isLibrary, a.uncompressedJNI, a.usesNonSdkApis, a.useEmbeddedDex) + +	a.transitiveManifestPaths = append(android.Paths{manifestPath}, transitiveStaticLibManifests...) + +	if len(transitiveStaticLibManifests) > 0 { +		a.mergedManifestFile = manifestMerger(ctx, manifestPath, transitiveStaticLibManifests) +		if !a.isLibrary { +			// Only use the merged manifest for applications.  For libraries, the transitive closure of manifests +			// will be propagated to the final application and merged there.  The merged manifest for libraries is +			// only passed to Make, which can't handle transitive dependencies. +			manifestPath = a.mergedManifestFile +		} +	} else { +		a.mergedManifestFile = manifestPath +	}  	linkFlags, linkDeps, resDirs, overlayDirs, rroDirs, resZips := a.aapt2Flags(ctx, sdkContext, manifestPath) @@ -286,7 +302,7 @@ func (a *aapt) buildActions(ctx android.ModuleContext, sdkContext sdkContext, ex  }  // aaptLibs collects libraries from dependencies and sdk_version and converts them into paths -func aaptLibs(ctx android.ModuleContext, sdkContext sdkContext) (transitiveStaticLibs, staticLibManifests android.Paths, +func aaptLibs(ctx android.ModuleContext, sdkContext sdkContext) (transitiveStaticLibs, transitiveStaticLibManifests android.Paths,  	staticRRODirs []rroDir, deps android.Paths, flags []string) {  	var sharedLibs android.Paths @@ -314,7 +330,7 @@ func aaptLibs(ctx android.ModuleContext, sdkContext sdkContext) (transitiveStati  			if exportPackage != nil {  				transitiveStaticLibs = append(transitiveStaticLibs, aarDep.ExportedStaticPackages()...)  				transitiveStaticLibs = append(transitiveStaticLibs, exportPackage) -				staticLibManifests = append(staticLibManifests, aarDep.ExportedManifest()) +				transitiveStaticLibManifests = append(transitiveStaticLibManifests, aarDep.ExportedManifests()...)  			outer:  				for _, d := range aarDep.ExportedRRODirs() { @@ -341,8 +357,9 @@ func aaptLibs(ctx android.ModuleContext, sdkContext sdkContext) (transitiveStati  	}  	transitiveStaticLibs = android.FirstUniquePaths(transitiveStaticLibs) +	transitiveStaticLibManifests = android.FirstUniquePaths(transitiveStaticLibManifests) -	return transitiveStaticLibs, staticLibManifests, staticRRODirs, deps, flags +	return transitiveStaticLibs, transitiveStaticLibManifests, staticRRODirs, deps, flags  }  type AndroidLibrary struct { @@ -498,8 +515,8 @@ func (a *AARImport) ExportedStaticPackages() android.Paths {  	return a.exportedStaticPackages  } -func (a *AARImport) ExportedManifest() android.Path { -	return a.manifest +func (a *AARImport) ExportedManifests() android.Paths { +	return android.Paths{a.manifest}  }  func (a *AARImport) Prebuilt() *android.Prebuilt {  |