diff --git a/java/androidmk.go b/java/androidmk.go
index 3658636..a45b600 100644
--- a/java/androidmk.go
+++ b/java/androidmk.go
@@ -218,15 +218,15 @@
 func (jd *Javadoc) AndroidMk() android.AndroidMkData {
 	return android.AndroidMkData{
 		Class:      "JAVA_LIBRARIES",
-		OutputFile: android.OptionalPathForPath(jd.stubsJar),
+		OutputFile: android.OptionalPathForPath(jd.stubsSrcJar),
 		Include:    "$(BUILD_SYSTEM)/soong_java_prebuilt.mk",
 		Extra: []android.AndroidMkExtraFunc{
 			func(w io.Writer, outputFile android.Path) {
 				if jd.properties.Installable == nil || *jd.properties.Installable == true {
 					fmt.Fprintln(w, "LOCAL_DROIDDOC_DOC_ZIP := ", jd.docZip.String())
 				}
-				if jd.stubsJar != nil {
-					fmt.Fprintln(w, "LOCAL_DROIDDOC_STUBS_JAR := ", jd.stubsJar.String())
+				if jd.stubsSrcJar != nil {
+					fmt.Fprintln(w, "LOCAL_DROIDDOC_STUBS_SRCJAR := ", jd.stubsSrcJar.String())
 				}
 			},
 		},
@@ -236,15 +236,15 @@
 func (ddoc *Droiddoc) AndroidMk() android.AndroidMkData {
 	return android.AndroidMkData{
 		Class:      "JAVA_LIBRARIES",
-		OutputFile: android.OptionalPathForPath(ddoc.stubsJar),
+		OutputFile: android.OptionalPathForPath(ddoc.stubsSrcJar),
 		Include:    "$(BUILD_SYSTEM)/soong_java_prebuilt.mk",
 		Extra: []android.AndroidMkExtraFunc{
 			func(w io.Writer, outputFile android.Path) {
 				if ddoc.Javadoc.properties.Installable == nil || *ddoc.Javadoc.properties.Installable == true {
 					fmt.Fprintln(w, "LOCAL_DROIDDOC_DOC_ZIP := ", ddoc.Javadoc.docZip.String())
 				}
-				if ddoc.Javadoc.stubsJar != nil {
-					fmt.Fprintln(w, "LOCAL_DROIDDOC_STUBS_JAR := ", ddoc.Javadoc.stubsJar.String())
+				if ddoc.Javadoc.stubsSrcJar != nil {
+					fmt.Fprintln(w, "LOCAL_DROIDDOC_STUBS_SRCJAR := ", ddoc.Javadoc.stubsSrcJar.String())
 				}
 			},
 		},
diff --git a/java/droiddoc.go b/java/droiddoc.go
index f60463b..eaa6c5f 100644
--- a/java/droiddoc.go
+++ b/java/droiddoc.go
@@ -129,8 +129,8 @@
 	srcFiles    android.Paths
 	sourcepaths android.Paths
 
-	docZip   android.WritablePath
-	stubsJar android.WritablePath
+	docZip      android.WritablePath
+	stubsSrcJar android.WritablePath
 }
 
 type Droiddoc struct {
@@ -255,7 +255,7 @@
 	j.srcFiles = srcFiles.FilterOutByExt(".srcjar")
 
 	j.docZip = android.PathForModuleOut(ctx, ctx.ModuleName()+"-"+"docs.zip")
-	j.stubsJar = android.PathForModuleOut(ctx, ctx.ModuleName()+"-"+"stubs.srcjar")
+	j.stubsSrcJar = android.PathForModuleOut(ctx, ctx.ModuleName()+"-"+"stubs.srcjar")
 
 	if j.properties.Local_sourcepaths == nil {
 		j.properties.Local_sourcepaths = append(j.properties.Local_sourcepaths, ".")
@@ -304,7 +304,7 @@
 	ctx.Build(pctx, android.BuildParams{
 		Rule:           javadoc,
 		Description:    "Javadoc",
-		Output:         j.stubsJar,
+		Output:         j.stubsSrcJar,
 		ImplicitOutput: j.docZip,
 		Inputs:         j.srcFiles,
 		Implicits:      implicits,
@@ -453,7 +453,7 @@
 	ctx.Build(pctx, android.BuildParams{
 		Rule:            javadoc,
 		Description:     "Droiddoc",
-		Output:          d.Javadoc.stubsJar,
+		Output:          d.Javadoc.stubsSrcJar,
 		Inputs:          d.Javadoc.srcFiles,
 		Implicits:       implicits,
 		ImplicitOutputs: implicitOutputs,
