diff --git a/android/rule_builder.go b/android/rule_builder.go
index c2e5989..d005839 100644
--- a/android/rule_builder.go
+++ b/android/rule_builder.go
@@ -27,14 +27,17 @@
 // RuleBuilder provides an alternative to ModuleContext.Rule and ModuleContext.Build to add a command line to the build
 // graph.
 type RuleBuilder struct {
-	commands []*RuleBuilderCommand
-	installs []RuleBuilderInstall
-	restat   bool
+	commands       []*RuleBuilderCommand
+	installs       []RuleBuilderInstall
+	temporariesSet map[string]bool
+	restat         bool
 }
 
 // NewRuleBuilder returns a newly created RuleBuilder.
 func NewRuleBuilder() *RuleBuilder {
-	return &RuleBuilder{}
+	return &RuleBuilder{
+		temporariesSet: make(map[string]bool),
+	}
 }
 
 // RuleBuilderInstall is a tuple of install from and to locations.
@@ -63,6 +66,25 @@
 	return command
 }
 
+// Temporary marks an output of a command as an intermediate file that will be used as an input to another command
+// in the same rule, and should not be listed in Outputs.
+func (r *RuleBuilder) Temporary(path string) {
+	r.temporariesSet[path] = true
+}
+
+// DeleteTemporaryFiles adds a command to the rule that deletes any outputs that have been marked using Temporary
+// when the rule runs.  DeleteTemporaryFiles should be called after all calls to Temporary.
+func (r *RuleBuilder) DeleteTemporaryFiles() {
+	var temporariesList []string
+
+	for intermediate := range r.temporariesSet {
+		temporariesList = append(temporariesList, intermediate)
+	}
+	sort.Strings(temporariesList)
+
+	r.Command().Text("rm").Flag("-f").Outputs(temporariesList)
+}
+
 // Inputs returns the list of paths that were passed to the RuleBuilderCommand methods that take input paths, such
 // as RuleBuilderCommand.Input, RuleBuilderComand.Implicit, or RuleBuilderCommand.FlagWithInput.  Inputs to a command
 // that are also outputs of another command in the same RuleBuilder are filtered out.
@@ -104,7 +126,9 @@
 
 	var outputList []string
 	for output := range outputs {
-		outputList = append(outputList, output)
+		if !r.temporariesSet[output] {
+			outputList = append(outputList, output)
+		}
 	}
 	sort.Strings(outputList)
 	return outputList
@@ -115,13 +139,27 @@
 	return append([]RuleBuilderInstall(nil), r.installs...)
 }
 
+func (r *RuleBuilder) toolsSet() map[string]bool {
+	tools := make(map[string]bool)
+	for _, c := range r.commands {
+		for _, tool := range c.tools {
+			tools[tool] = true
+		}
+	}
+
+	return tools
+}
+
 // Tools returns the list of paths that were passed to the RuleBuilderCommand.Tool method.
 func (r *RuleBuilder) Tools() []string {
-	var tools []string
-	for _, c := range r.commands {
-		tools = append(tools, c.tools...)
+	toolsSet := r.toolsSet()
+
+	var toolsList []string
+	for tool := range toolsSet {
+		toolsList = append(toolsList, tool)
 	}
-	return tools
+	sort.Strings(toolsList)
+	return toolsList
 }
 
 // Commands returns a slice containing a the built command line for each call to RuleBuilder.Command.
