diff options
Diffstat (limited to 'java/aar.go')
| -rw-r--r-- | java/aar.go | 61 |
1 files changed, 41 insertions, 20 deletions
diff --git a/java/aar.go b/java/aar.go index 1e38efc59..021619603 100644 --- a/java/aar.go +++ b/java/aar.go @@ -23,13 +23,13 @@ import ( "android/soong/android" "android/soong/bazel" "android/soong/dexpreopt" + "android/soong/ui/metrics/bp2build_metrics_proto" "github.com/google/blueprint" "github.com/google/blueprint/proptools" ) type AndroidLibraryDependency interface { - LibraryDependency ExportPackage() android.Path ResourcesNodeDepSet() *android.DepSet[*resourcesNode] RRODirsDepSet() *android.DepSet[rroDir] @@ -777,17 +777,9 @@ func (a *AndroidLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) ctx.CheckbuildFile(a.aarFile) } - a.exportedProguardFlagFiles = append(a.exportedProguardFlagFiles, - android.PathsForModuleSrc(ctx, a.dexProperties.Optimize.Proguard_flags_files)...) - - ctx.VisitDirectDeps(func(m android.Module) { - if ctx.OtherModuleDependencyTag(m) == staticLibTag { - if lib, ok := m.(LibraryDependency); ok { - a.exportedProguardFlagFiles = append(a.exportedProguardFlagFiles, lib.ExportedProguardFlagFiles()...) - } - } - }) - a.exportedProguardFlagFiles = android.FirstUniquePaths(a.exportedProguardFlagFiles) + proguardSpecInfo := a.collectProguardSpecInfo(ctx) + ctx.SetProvider(ProguardSpecInfoProvider, proguardSpecInfo) + a.exportedProguardFlagFiles = proguardSpecInfo.ProguardFlagsFiles.ToList() prebuiltJniPackages := android.Paths{} ctx.VisitDirectDeps(func(module android.Module) { @@ -938,10 +930,6 @@ var _ AndroidLibraryDependency = (*AARImport)(nil) func (a *AARImport) ExportPackage() android.Path { return a.exportPackage } -func (a *AARImport) ExportedProguardFlagFiles() android.Paths { - return android.Paths{a.proguardFlags} -} - func (a *AARImport) ResourcesNodeDepSet() *android.DepSet[*resourcesNode] { return a.resourcesNodesDepSet } @@ -1045,10 +1033,17 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) { extractedAARDir := android.PathForModuleOut(ctx, "aar") a.classpathFile = extractedAARDir.Join(ctx, "classes-combined.jar") - a.proguardFlags = extractedAARDir.Join(ctx, "proguard.txt") a.manifest = extractedAARDir.Join(ctx, "AndroidManifest.xml") aarRTxt := extractedAARDir.Join(ctx, "R.txt") a.assetsPackage = android.PathForModuleOut(ctx, "assets.zip") + a.proguardFlags = extractedAARDir.Join(ctx, "proguard.txt") + ctx.SetProvider(ProguardSpecInfoProvider, ProguardSpecInfo{ + ProguardFlagsFiles: android.NewDepSet[android.Path]( + android.POSTORDER, + android.Paths{a.proguardFlags}, + nil, + ), + }) ctx.Build(pctx, android.BuildParams{ Rule: unzipAAR, @@ -1228,6 +1223,8 @@ func AARImportFactory() android.Module { type bazelAapt struct { Manifest bazel.Label Resource_files bazel.LabelListAttribute + Assets_dir bazel.StringAttribute + Assets bazel.LabelListAttribute } type bazelAndroidLibrary struct { @@ -1242,7 +1239,7 @@ type bazelAndroidLibraryImport struct { Sdk_version bazel.StringAttribute } -func (a *aapt) convertAaptAttrsWithBp2Build(ctx android.TopDownMutatorContext) *bazelAapt { +func (a *aapt) convertAaptAttrsWithBp2Build(ctx android.TopDownMutatorContext) (*bazelAapt, bool) { manifest := proptools.StringDefault(a.aaptProperties.Manifest, "AndroidManifest.xml") resourceFiles := bazel.LabelList{ @@ -1252,10 +1249,30 @@ func (a *aapt) convertAaptAttrsWithBp2Build(ctx android.TopDownMutatorContext) * files := android.RootToModuleRelativePaths(ctx, androidResourceGlob(ctx, dir)) resourceFiles.Includes = append(resourceFiles.Includes, files...) } + + assetsDir := bazel.StringAttribute{} + var assets bazel.LabelList + for i, dir := range android.PathsWithOptionalDefaultForModuleSrc(ctx, a.aaptProperties.Asset_dirs, "assets") { + if i > 0 { + ctx.MarkBp2buildUnconvertible(bp2build_metrics_proto.UnconvertedReasonType_PROPERTY_UNSUPPORTED, "multiple asset_dirs") + return &bazelAapt{}, false + } + // Assets_dirs are relative to the module dir when specified, but if the default in used in + // PathsWithOptionalDefaultForModuleSrc, then dir is relative to the top. + assetsRelDir, error := filepath.Rel(ctx.ModuleDir(), dir.Rel()) + if error != nil { + assetsRelDir = dir.Rel() + } + assetsDir.Value = proptools.StringPtr(assetsRelDir) + assets = bazel.MakeLabelList(android.RootToModuleRelativePaths(ctx, androidResourceGlob(ctx, dir))) + + } return &bazelAapt{ android.BazelLabelForModuleSrcSingle(ctx, manifest), bazel.MakeLabelListAttribute(resourceFiles), - } + assetsDir, + bazel.MakeLabelListAttribute(assets), + }, true } func (a *AARImport) ConvertWithBp2build(ctx android.TopDownMutatorContext) { @@ -1328,6 +1345,10 @@ func (a *AndroidLibrary) ConvertWithBp2build(ctx android.TopDownMutatorContext) name := a.Name() props := AndroidLibraryBazelTargetModuleProperties() + aaptAttrs, supported := a.convertAaptAttrsWithBp2Build(ctx) + if !supported { + return + } ctx.CreateBazelTargetModule( props, android.CommonAttributes{Name: name}, @@ -1337,7 +1358,7 @@ func (a *AndroidLibrary) ConvertWithBp2build(ctx android.TopDownMutatorContext) Deps: deps, Exports: depLabels.StaticDeps, }, - a.convertAaptAttrsWithBp2Build(ctx), + aaptAttrs, }, ) |