diff options
-rw-r--r-- | java/builder.go | 16 | ||||
-rw-r--r-- | java/config/config.go | 1 | ||||
-rw-r--r-- | java/java.go | 17 |
3 files changed, 34 insertions, 0 deletions
diff --git a/java/builder.go b/java/builder.go index 88058e09a..72f4e145c 100644 --- a/java/builder.go +++ b/java/builder.go @@ -226,6 +226,12 @@ var ( }, "jarArgs") + extractR8Rules = pctx.AndroidStaticRule("extractR8Rules", + blueprint.RuleParams{ + Command: `${config.ExtractR8RulesCmd} --rules-output $out --include-origin-comments $in`, + CommandDeps: []string{"${config.ExtractR8RulesCmd}"}, + }) + jarjar = pctx.AndroidStaticRule("jarjar", blueprint.RuleParams{ Command: "" + @@ -739,6 +745,16 @@ func TransformJarsToJar(ctx android.ModuleContext, outputFile android.WritablePa }) } +func TransformJarToR8Rules(ctx android.ModuleContext, outputFile android.WritablePath, + jar android.Path) { + + ctx.Build(pctx, android.BuildParams{ + Rule: extractR8Rules, + Output: outputFile, + Input: jar, + }) +} + func convertImplementationJarToHeaderJar(ctx android.ModuleContext, implementationJarFile android.Path, headerJarFile android.WritablePath) { ctx.Build(pctx, android.BuildParams{ diff --git a/java/config/config.go b/java/config/config.go index 19d695291..2ed2953f7 100644 --- a/java/config/config.go +++ b/java/config/config.go @@ -174,6 +174,7 @@ func init() { pctx.HostBinToolVariable("ApiCheckCmd", "apicheck") pctx.HostBinToolVariable("D8Cmd", "d8") pctx.HostBinToolVariable("R8Cmd", "r8") + pctx.HostBinToolVariable("ExtractR8RulesCmd", "extract-r8-rules") pctx.HostBinToolVariable("ResourceShrinkerCmd", "resourceshrinker") pctx.HostBinToolVariable("HiddenAPICmd", "hiddenapi") pctx.HostBinToolVariable("ExtractApksCmd", "extract_apks") diff --git a/java/java.go b/java/java.go index a975ca61c..0ab344066 100644 --- a/java/java.go +++ b/java/java.go @@ -2827,6 +2827,23 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) { outputFile = combinedJar } + proguardFlags := android.PathForModuleOut(ctx, "proguard_flags") + TransformJarToR8Rules(ctx, proguardFlags, outputFile) + + transitiveProguardFlags, transitiveUnconditionalExportedFlags := collectDepProguardSpecInfo(ctx) + android.SetProvider(ctx, ProguardSpecInfoProvider, ProguardSpecInfo{ + ProguardFlagsFiles: depset.New[android.Path]( + depset.POSTORDER, + android.Paths{proguardFlags}, + transitiveProguardFlags, + ), + UnconditionallyExportedProguardFlags: depset.New[android.Path]( + depset.POSTORDER, + nil, + transitiveUnconditionalExportedFlags, + ), + }) + // Save the output file with no relative path so that it doesn't end up in a subdirectory when used as a resource. // Also strip the relative path from the header output file so that the reuseImplementationJarAsHeaderJar check // in a module that depends on this module considers them equal. |