aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2015-04-03 16:54:17 -0700
committerColin Cross <ccross@android.com>2015-04-08 15:15:15 -0700
commit65bf4f231c9407a0f53c7c2b9237d0b219032231 (patch)
treed62616dd14797fc600c2655a90e0c8d5409dc904 /java
parente1d62a8b1f26bb3bd4b6a42980da9b1daf407273 (diff)
downloadbuild_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.go25
-rw-r--r--java/java.go15
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 {