Add jarjar support

If jarjar_rules is set, pass the compiled jar through jarjar to
produce a new intermediate jar.

Change-Id: Ied596433fd5c49d05f07c04245f3abe8b9aadc5e
This commit is contained in:
Colin Cross
2015-04-03 16:54:17 -07:00
parent e1d62a8b1f
commit 65bf4f231c
4 changed files with 51 additions and 0 deletions

View File

@@ -21,6 +21,7 @@ var stringProperties = map[string]string{
"LOCAL_SDK_VERSION": "sdk_version",
"LOCAL_NDK_STL_VARIANT": "stl",
"LOCAL_JAR_MANIFEST": "manifest",
"LOCAL_JARJAR_RULES": "jarjar_rules",
}
var listProperties = map[string]string{

View File

@@ -195,3 +195,13 @@ func (c *Config) HostBin() string {
func (c *Config) HostBinTool(tool string) (string, error) {
return filepath.Join(c.HostBin(), tool), nil
}
// HostJavaDir returns the path to framework directory for host targets
func (c *Config) HostJavaDir() string {
return filepath.Join(c.HostOut(), "framework")
}
// HostJavaTool returns the path to a host tool in the frameworks directory for host targets
func (c *Config) HostJavaTool(tool string) (string, error) {
return filepath.Join(c.HostJavaDir(), tool), nil
}

View File

@@ -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) {

View File

@@ -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 {