diff --git a/apex/apex.go b/apex/apex.go
index 7a66b2e..d3c5df0 100644
--- a/apex/apex.go
+++ b/apex/apex.go
@@ -1656,7 +1656,7 @@
 
 func apexFileForJavaLibrary(ctx android.BaseModuleContext, lib javaDependency, module android.Module) apexFile {
 	dirInApex := "javalib"
-	fileToCopy := lib.DexJarBuildPath()
+	fileToCopy := lib.DexJar()
 	af := newApexFile(ctx, fileToCopy, module.Name(), dirInApex, javaSharedLib, module)
 	af.jacocoReportClassesFile = lib.JacocoReportClassesFile()
 	af.stem = lib.Stem() + ".jar"
diff --git a/java/aar.go b/java/aar.go
index 7413c80..c8daf83 100644
--- a/java/aar.go
+++ b/java/aar.go
@@ -730,7 +730,7 @@
 	return android.Paths{a.classpathFile}
 }
 
-func (a *AARImport) DexJarBuildPath() android.Path {
+func (a *AARImport) DexJar() android.Path {
 	return nil
 }
 
diff --git a/java/app.go b/java/app.go
index fb02c99..a45ab6f 100755
--- a/java/app.go
+++ b/java/app.go
@@ -1882,7 +1882,7 @@
 	if !ctx.Config().UnbundledBuild() {
 		ctx.VisitDirectDepsWithTag(usesLibTag, func(m android.Module) {
 			if lib, ok := m.(Dependency); ok {
-				if dexJar := lib.DexJarBuildPath(); dexJar != nil {
+				if dexJar := lib.DexJar(); dexJar != nil {
 					usesLibPaths[ctx.OtherModuleName(m)] = dexJar
 				} else {
 					ctx.ModuleErrorf("module %q in uses_libs or optional_uses_libs must produce a dex jar, does it have installable: true?",
diff --git a/java/device_host_converter.go b/java/device_host_converter.go
index 1ffb13f..b40ab93 100644
--- a/java/device_host_converter.go
+++ b/java/device_host_converter.go
@@ -150,7 +150,7 @@
 	return d.implementationAndResourceJars
 }
 
-func (d *DeviceHostConverter) DexJarBuildPath() android.Path {
+func (d *DeviceHostConverter) DexJar() android.Path {
 	return nil
 }
 
diff --git a/java/dexpreopt_bootjars.go b/java/dexpreopt_bootjars.go
index 9d93838..ed61d4b 100644
--- a/java/dexpreopt_bootjars.go
+++ b/java/dexpreopt_bootjars.go
@@ -255,7 +255,7 @@
 		return -1, nil
 	}
 
-	jar, hasJar := module.(interface{ DexJarBuildPath() android.Path })
+	jar, hasJar := module.(interface{ DexJar() android.Path })
 	if !hasJar {
 		return -1, nil
 	}
@@ -296,7 +296,7 @@
 		panic("unknown boot image: " + image.name)
 	}
 
-	return index, jar.DexJarBuildPath()
+	return index, jar.DexJar()
 }
 
 // buildBootImage takes a bootImageConfig, creates rules to build it, and returns the image.
diff --git a/java/hiddenapi_singleton.go b/java/hiddenapi_singleton.go
index 2f35798..c7f7cbd 100644
--- a/java/hiddenapi_singleton.go
+++ b/java/hiddenapi_singleton.go
@@ -147,7 +147,7 @@
 			name := ctx.ModuleName(module)
 			for moduleList, pathList := range moduleListToPathList {
 				if i := android.IndexList(name, *moduleList); i != -1 {
-					pathList[i] = j.DexJarBuildPath()
+					pathList[i] = j.DexJar()
 				}
 			}
 		}
diff --git a/java/java.go b/java/java.go
index 778fe31..09df2ad 100644
--- a/java/java.go
+++ b/java/java.go
@@ -498,7 +498,7 @@
 	ImplementationJars() android.Paths
 	ResourceJars() android.Paths
 	ImplementationAndResourcesJars() android.Paths
-	DexJarBuildPath() android.Path
+	DexJar() android.Path
 	AidlIncludeDirs() android.Paths
 	ExportedSdkLibs() []string
 	ExportedPlugins() (android.Paths, []string)
@@ -1736,7 +1736,7 @@
 	return android.Paths{j.implementationJarFile}
 }
 
-func (j *Module) DexJarBuildPath() android.Path {
+func (j *Module) DexJar() android.Path {
 	return j.dexJarFile
 }
 
@@ -2562,7 +2562,7 @@
 	return android.Paths{j.combinedClasspathFile}
 }
 
-func (j *Import) DexJarBuildPath() android.Path {
+func (j *Import) DexJar() android.Path {
 	return nil
 }
 
@@ -2745,7 +2745,7 @@
 		j.Stem()+".jar", dexOutputFile)
 }
 
-func (j *DexImport) DexJarBuildPath() android.Path {
+func (j *DexImport) DexJar() android.Path {
 	return j.dexJarFile
 }
 
