diff options
author | Colin Cross <ccross@android.com> | 2015-04-03 16:54:17 -0700 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2015-04-08 15:15:15 -0700 |
commit | 65bf4f231c9407a0f53c7c2b9237d0b219032231 (patch) | |
tree | d62616dd14797fc600c2655a90e0c8d5409dc904 /java | |
parent | e1d62a8b1f26bb3bd4b6a42980da9b1daf407273 (diff) | |
download | build_soong-65bf4f231c9407a0f53c7c2b9237d0b219032231.tar.gz build_soong-65bf4f231c9407a0f53c7c2b9237d0b219032231.tar.bz2 build_soong-65bf4f231c9407a0f53c7c2b9237d0b219032231.zip |
Add jarjar support
If jarjar_rules is set, pass the compiled jar through jarjar to
produce a new intermediate jar.
Change-Id: Ied596433fd5c49d05f07c04245f3abe8b9aadc5e
Diffstat (limited to 'java')
-rw-r--r-- | java/builder.go | 25 | ||||
-rw-r--r-- | java/java.go | 15 |
2 files changed, 40 insertions, 0 deletions
diff --git a/java/builder.go b/java/builder.go index 2c72caba..f0cfeaea 100644 --- a/java/builder.go +++ b/java/builder.go @@ -62,6 +62,13 @@ var ( }, "outDir", "dxFlags") + jarjar = pctx.StaticRule("jarjar", + blueprint.RuleParams{ + Command: "java -jar $jarjarCmd process $rulesFile $in $out", + Description: "jarjar $out", + }, + "rulesFile") + extractPrebuilt = pctx.StaticRule("extractPrebuilt", blueprint.RuleParams{ Command: `rm -rf $outDir && unzip -qo $in -d $outDir && ` + @@ -80,6 +87,9 @@ func init() { pctx.VariableFunc("dxCmd", func(c interface{}) (string, error) { return c.(Config).HostBinTool("dx") }) + pctx.VariableFunc("jarjarCmd", func(c interface{}) (string, error) { + return c.(Config).HostJavaTool("jarjar.jar") + }) } type javaBuilderFlags struct { @@ -198,6 +208,21 @@ func TransformDexToJavaLib(ctx common.AndroidModuleContext, resources []jarSpec, return outputFile } +func TransformJarJar(ctx common.AndroidModuleContext, classesJar string, rulesFile string) string { + outputFile := filepath.Join(common.ModuleOutDir(ctx), "classes-jarjar.jar") + ctx.Build(pctx, blueprint.BuildParams{ + Rule: jarjar, + Outputs: []string{outputFile}, + Inputs: []string{classesJar}, + Implicits: []string{"$jarjarCmd"}, + Args: map[string]string{ + "rulesFile": rulesFile, + }, + }) + + return outputFile +} + func TransformPrebuiltJarToClasses(ctx common.AndroidModuleContext, prebuilt string) (classJarSpec, resourceJarSpec jarSpec) { diff --git a/java/java.go b/java/java.go index 8b7e02d2..f9347218 100644 --- a/java/java.go +++ b/java/java.go @@ -33,6 +33,7 @@ type Config interface { SrcDir() string PrebuiltOS() string HostBinTool(string) (string, error) + HostJavaTool(string) (string, error) Getenv(string) string } @@ -90,6 +91,9 @@ type javaBase struct { // Set for device java libraries, and for host versions of device java libraries // built for testing Dex bool `blueprint:"mutated"` + + // jarjar_rules: if not blank, run jarjar using the specified rules file + Jarjar_rules string } // output file suitable for inserting into the classpath of another compile @@ -235,8 +239,19 @@ func (j *javaBase) GenerateJavaBuildActions(ctx common.AndroidModuleContext) { if ctx.Failed() { return } + j.classJarSpecs = classJarSpecs j.resourceJarSpecs = resourceJarSpecs + + if j.properties.Jarjar_rules != "" { + jarjar_rules := filepath.Join(common.ModuleSrcDir(ctx), j.properties.Jarjar_rules) + // Transform classes-full-debug.jar into classes-jarjar.jar + outputFile = TransformJarJar(ctx, outputFile, jarjar_rules) + if ctx.Failed() { + return + } + } + j.classpathFile = outputFile if j.properties.Dex { |