diff --git a/java/droiddoc.go b/java/droiddoc.go
index 82beb96..9d6f58e 100644
--- a/java/droiddoc.go
+++ b/java/droiddoc.go
@@ -18,7 +18,6 @@
 	"android/soong/android"
 	"android/soong/java/config"
 	"fmt"
-	"path/filepath"
 	"strings"
 
 	"github.com/google/blueprint"
@@ -52,6 +51,7 @@
 func init() {
 	android.RegisterModuleType("droiddoc", DroiddocFactory)
 	android.RegisterModuleType("droiddoc_host", DroiddocHostFactory)
+	android.RegisterModuleType("droiddoc_template", DroiddocTemplateFactory)
 	android.RegisterModuleType("javadoc", JavadocFactory)
 	android.RegisterModuleType("javadoc_host", JavadocHostFactory)
 }
@@ -82,7 +82,7 @@
 
 type DroiddocProperties struct {
 	// directory relative to top of the source tree that contains doc templates files.
-	Custom_template_dir *string `android:"arch_variant"`
+	Custom_template *string `android:"arch_variant"`
 
 	// directories relative to top of the source tree which contains html/jd files.
 	Html_dirs []string `android:"arch_variant"`
@@ -233,7 +233,7 @@
 			}
 		default:
 			switch tag {
-			case android.DefaultsDepTag, android.SourceDepTag:
+			case android.DefaultsDepTag, android.SourceDepTag, droiddocTemplateTag:
 				// Nothing to do
 			default:
 				ctx.ModuleErrorf("depends on non-java module %q", otherName)
@@ -319,6 +319,13 @@
 func (d *Droiddoc) DepsMutator(ctx android.BottomUpMutatorContext) {
 	d.Javadoc.addDeps(ctx)
 
+	if String(d.properties.Custom_template) == "" {
+		// TODO: This is almost always droiddoc-templates-sdk
+		ctx.PropertyErrorf("custom_template", "must specify a template")
+	} else {
+		ctx.AddDependency(ctx.Module(), droiddocTemplateTag, String(d.properties.Custom_template))
+	}
+
 	// extra_arg_files may contains filegroup or genrule.
 	android.ExtractSourcesDeps(ctx, d.properties.Arg_files)
 
@@ -373,24 +380,32 @@
 		classpathArgs = "-classpath " + strings.Join(deps.classpath.Strings(), ":")
 	}
 
-	// templateDir (maybe missing) is relative to top of the source tree instead of current module.
-	templateDir := android.PathForSource(ctx, String(d.properties.Custom_template_dir)).String()
-	implicits = append(implicits, ctx.GlobFiles(filepath.Join(templateDir, "**/*"), nil)...)
+	var templateDir string
+	ctx.VisitDirectDepsWithTag(droiddocTemplateTag, func(m android.Module) {
+		if t, ok := m.(*DroiddocTemplate); ok {
+			implicits = append(implicits, t.deps...)
+			templateDir = t.dir.String()
+		} else {
+			ctx.PropertyErrorf("custom_template", "module %q is not a droiddoc_template", ctx.OtherModuleName(m))
+		}
+	})
 
 	var htmlDirArgs string
 	if len(d.properties.Html_dirs) > 0 {
-		// htmlDir is relative to top of the source tree instead of current module.
-		htmlDir := android.PathForSource(ctx, d.properties.Html_dirs[0]).String()
-		implicits = append(implicits, ctx.GlobFiles(filepath.Join(htmlDir, "**/*"), nil)...)
-		htmlDirArgs = "-htmldir " + htmlDir
+		htmlDir := android.PathForModuleSrc(ctx, d.properties.Html_dirs[0])
+		implicits = append(implicits, ctx.Glob(htmlDir.Join(ctx, "**/*").String(), nil)...)
+		htmlDirArgs = "-htmldir " + htmlDir.String()
 	}
 
 	var htmlDir2Args string
 	if len(d.properties.Html_dirs) > 1 {
-		// htmlDir2 is relative to top of the source tree instead of current module.
-		htmlDir2 := android.PathForSource(ctx, d.properties.Html_dirs[1]).String()
-		implicits = append(implicits, ctx.GlobFiles(filepath.Join(htmlDir2, "**/*"), nil)...)
-		htmlDirArgs = "-htmldir2 " + htmlDir2
+		htmlDir2 := android.PathForModuleSrc(ctx, d.properties.Html_dirs[1])
+		implicits = append(implicits, ctx.Glob(htmlDir2.Join(ctx, "**/*").String(), nil)...)
+		htmlDir2Args = "-htmldir2 " + htmlDir2.String()
+	}
+
+	if len(d.properties.Html_dirs) > 2 {
+		ctx.PropertyErrorf("html_dirs", "Droiddoc only supports up to 2 html dirs")
 	}
 
 	knownTags := ctx.ExpandSources(d.properties.Knowntags, nil)
@@ -451,3 +466,34 @@
 		},
 	})
 }
+
+var droiddocTemplateTag = dependencyTag{name: "droiddoc-template"}
+
+type DroiddocTemplateProperties struct {
+	// path to the directory containing the droiddoc templates.
+	Path *string
+}
+
+type DroiddocTemplate struct {
+	android.ModuleBase
+
+	properties DroiddocTemplateProperties
+
+	deps android.Paths
+	dir  android.Path
+}
+
+func DroiddocTemplateFactory() android.Module {
+	module := &DroiddocTemplate{}
+	module.AddProperties(&module.properties)
+	android.InitAndroidModule(module)
+	return module
+}
+
+func (d *DroiddocTemplate) DepsMutator(android.BottomUpMutatorContext) {}
+
+func (d *DroiddocTemplate) GenerateAndroidBuildActions(ctx android.ModuleContext) {
+	path := android.PathForModuleSrc(ctx, String(d.properties.Path))
+	d.dir = path
+	d.deps = ctx.Glob(path.Join(ctx, "**/*").String(), nil)
+}
diff --git a/java/java_test.go b/java/java_test.go
index 8bae019..5d6a6e0 100644
--- a/java/java_test.go
+++ b/java/java_test.go
@@ -81,6 +81,7 @@
 	ctx.RegisterModuleType("genrule", android.ModuleFactoryAdaptor(genrule.GenRuleFactory))
 	ctx.RegisterModuleType("droiddoc", android.ModuleFactoryAdaptor(DroiddocFactory))
 	ctx.RegisterModuleType("droiddoc_host", android.ModuleFactoryAdaptor(DroiddocHostFactory))
+	ctx.RegisterModuleType("droiddoc_template", android.ModuleFactoryAdaptor(DroiddocTemplateFactory))
 	ctx.PreArchMutators(android.RegisterPrebuiltsPreArchMutators)
 	ctx.PreArchMutators(android.RegisterPrebuiltsPostDepsMutators)
 	ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
@@ -865,6 +866,10 @@
 
 func TestDroiddoc(t *testing.T) {
 	ctx := testJava(t, `
+		droiddoc_template {
+		    name: "droiddoc-templates-sdk",
+		    path: ".",
+		}
 		droiddoc {
 		    name: "bar-doc",
 		    srcs: [
@@ -873,7 +878,7 @@
 		    exclude_srcs: [
 		        "bar-doc/b.java"
 		    ],
-		    custom_template_dir: "external/doclava/templates-sdk",
+		    custom_template: "droiddoc-templates-sdk",
 		    hdf: [
 		        "android.whichdoc offline",
 		    ],
