diff options
Diffstat (limited to 'java/aar.go')
-rw-r--r-- | java/aar.go | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/java/aar.go b/java/aar.go index 7cb362a9f..506187959 100644 --- a/java/aar.go +++ b/java/aar.go @@ -104,6 +104,9 @@ type aaptProperties struct { // Filter only specified product and ignore other products Filter_product *string `blueprint:"mutated"` + + // Names of aconfig_declarations modules that specify aconfig flags that the module depends on. + Flags_packages []string } type aapt struct { @@ -204,6 +207,8 @@ func (a *aapt) aapt2Flags(ctx android.ModuleContext, sdkContext android.SdkConte // Flags specified in Android.bp linkFlags = append(linkFlags, a.aaptProperties.Aaptflags...) + linkFlags = append(linkFlags, "--enable-compact-entries") + // Find implicit or explicit asset and resource dirs assets := android.PathsRelativeToModuleSourceDir(android.SourceInput{ Context: ctx, @@ -346,6 +351,7 @@ type aaptBuildActionOptions struct { classLoaderContexts dexpreopt.ClassLoaderContextMap excludedLibs []string enforceDefaultTargetSdkVersion bool + forceNonFinalResourceIDs bool extraLinkFlags []string aconfigTextFiles android.Paths } @@ -453,6 +459,11 @@ func (a *aapt) buildActions(ctx android.ModuleContext, opts aaptBuildActionOptio // as imports. The resources from dependencies will not be merged into this module's package-res.apk, and // instead modules depending on this module will reference package-res.apk from all transitive static // dependencies. + for _, sharedDep := range sharedDeps { + if sharedDep.usedResourceProcessor { + transitiveRJars = append(transitiveRJars, sharedDep.rJar) + } + } for _, staticDep := range staticDeps { linkDeps = append(linkDeps, staticDep.resPackage) linkFlags = append(linkFlags, "-I "+staticDep.resPackage.String()) @@ -460,11 +471,6 @@ func (a *aapt) buildActions(ctx android.ModuleContext, opts aaptBuildActionOptio transitiveRJars = append(transitiveRJars, staticDep.rJar) } } - for _, sharedDep := range sharedDeps { - if sharedDep.usedResourceProcessor { - transitiveRJars = append(transitiveRJars, sharedDep.rJar) - } - } } else { // When building an app or building a library without ResourceProcessorBusyBox enabled all static // dependencies are compiled into this module's package-res.apk as overlays. @@ -539,7 +545,8 @@ func (a *aapt) buildActions(ctx android.ModuleContext, opts aaptBuildActionOptio if a.useResourceProcessorBusyBox(ctx) { rJar := android.PathForModuleOut(ctx, "busybox/R.jar") - resourceProcessorBusyBoxGenerateBinaryR(ctx, rTxt, a.mergedManifestFile, rJar, staticDeps, a.isLibrary, a.aaptProperties.Aaptflags) + resourceProcessorBusyBoxGenerateBinaryR(ctx, rTxt, a.mergedManifestFile, rJar, staticDeps, a.isLibrary, a.aaptProperties.Aaptflags, + opts.forceNonFinalResourceIDs) aapt2ExtractExtraPackages(ctx, extraPackages, rJar) transitiveRJars = append(transitiveRJars, rJar) a.rJar = rJar @@ -554,6 +561,10 @@ func (a *aapt) buildActions(ctx android.ModuleContext, opts aaptBuildActionOptio transitiveAaptResourcePackagesFile := android.PathForModuleOut(ctx, "transitive-res-packages") android.WriteFileRule(ctx, transitiveAaptResourcePackagesFile, strings.Join(transitiveAaptResourcePackages, "\n")) + // Reverse the list of R.jar files so that the current module comes first, and direct dependencies come before + // transitive dependencies. + transitiveRJars = android.ReversePaths(transitiveRJars) + a.aaptSrcJar = srcJar a.transitiveAaptRJars = transitiveRJars a.transitiveAaptResourcePackagesFile = transitiveAaptResourcePackagesFile @@ -599,7 +610,8 @@ var resourceProcessorBusyBox = pctx.AndroidStaticRule("resourceProcessorBusyBox" // using Bazel's ResourceProcessorBusyBox tool, which is faster than compiling the R.java files and // supports producing classes for static dependencies that only include resources from that dependency. func resourceProcessorBusyBoxGenerateBinaryR(ctx android.ModuleContext, rTxt, manifest android.Path, - rJar android.WritablePath, transitiveDeps transitiveAarDeps, isLibrary bool, aaptFlags []string) { + rJar android.WritablePath, transitiveDeps transitiveAarDeps, isLibrary bool, aaptFlags []string, + forceNonFinalIds bool) { var args []string var deps android.Paths @@ -609,6 +621,9 @@ func resourceProcessorBusyBoxGenerateBinaryR(ctx android.ModuleContext, rTxt, ma // to ResourceProcessorBusyBox so that it can regenerate R.class files with the final resource IDs for each // package. args, deps = transitiveDeps.resourceProcessorDeps() + if forceNonFinalIds { + args = append(args, "--finalFields=false") + } } else { // When compiling a library don't pass any dependencies as it only needs to generate an R.class file for this // library. Pass --finalFields=false so that the R.class file contains non-final fields so they don't get @@ -798,6 +813,10 @@ func (a *AndroidLibrary) DepsMutator(ctx android.BottomUpMutatorContext) { a.aapt.deps(ctx, sdkDep) } a.usesLibrary.deps(ctx, false) + + for _, aconfig_declaration := range a.aaptProperties.Flags_packages { + ctx.AddDependency(ctx.Module(), aconfigDeclarationTag, aconfig_declaration) + } } func (a *AndroidLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) { @@ -811,13 +830,14 @@ func (a *AndroidLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) sdkContext: android.SdkContext(a), classLoaderContexts: a.classLoaderContexts, enforceDefaultTargetSdkVersion: false, + aconfigTextFiles: getAconfigFilePaths(ctx), }, ) apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider) a.hideApexVariantFromMake = !apexInfo.IsForPlatform() - a.stem = proptools.StringDefault(a.overridableDeviceProperties.Stem, ctx.ModuleName()) + a.stem = proptools.StringDefault(a.overridableProperties.Stem, ctx.ModuleName()) ctx.CheckbuildFile(a.aapt.proguardOptionsFile) ctx.CheckbuildFile(a.aapt.exportPackage) @@ -1207,7 +1227,7 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) { linkFlags, linkDeps, nil, overlayRes, transitiveAssets, nil, nil) a.rJar = android.PathForModuleOut(ctx, "busybox/R.jar") - resourceProcessorBusyBoxGenerateBinaryR(ctx, a.rTxt, a.manifest, a.rJar, nil, true, nil) + resourceProcessorBusyBoxGenerateBinaryR(ctx, a.rTxt, a.manifest, a.rJar, nil, true, nil, false) aapt2ExtractExtraPackages(ctx, a.extraAaptPackagesFile, a.rJar) |