diff --git a/java/droidstubs.go b/java/droidstubs.go
index bdbaf92..ef13988 100644
--- a/java/droidstubs.go
+++ b/java/droidstubs.go
@@ -196,6 +196,10 @@
 	StubsSrcJar() android.Path
 }
 
+type ExportableApiStubsSrcProvider interface {
+	ExportableStubsSrcJar() android.Path
+}
+
 // Provider of information about API stubs, used by java_sdk_library.
 type ApiStubsProvider interface {
 	AnnotationsZip() android.Path
@@ -205,6 +209,14 @@
 	ApiStubsSrcProvider
 }
 
+type ExportableApiStubsProvider interface {
+	ExportableAnnotationsZip() android.Path
+	ExportableApiFilePath() android.Path
+	ExportableRemovedApiFilePath() android.Path
+
+	ExportableApiStubsSrcProvider
+}
+
 type currentApiTimestampProvider interface {
 	CurrentApiTimestamp() android.Path
 }
diff --git a/java/sdk_library.go b/java/sdk_library.go
index 74e2da4..72fbb15 100644
--- a/java/sdk_library.go
+++ b/java/sdk_library.go
@@ -727,7 +727,9 @@
 func (paths *scopePaths) extractEverythingStubsLibraryInfoFromDependency(ctx android.ModuleContext, dep android.Module) error {
 	if lib, ok := android.OtherModuleProvider(ctx, dep, JavaInfoProvider); ok {
 		paths.stubsHeaderPath = lib.HeaderJars
-		paths.stubsImplPath = lib.ImplementationJars
+		if !ctx.Config().ReleaseHiddenApiExportableStubs() {
+			paths.stubsImplPath = lib.ImplementationJars
+		}
 
 		libDep := dep.(UsesLibraryDependency)
 		paths.stubsDexJarPath = libDep.DexJarBuildPath(ctx)
@@ -738,7 +740,11 @@
 }
 
 func (paths *scopePaths) extractExportableStubsLibraryInfoFromDependency(ctx android.ModuleContext, dep android.Module) error {
-	if _, ok := android.OtherModuleProvider(ctx, dep, JavaInfoProvider); ok {
+	if lib, ok := android.OtherModuleProvider(ctx, dep, JavaInfoProvider); ok {
+		if ctx.Config().ReleaseHiddenApiExportableStubs() {
+			paths.stubsImplPath = lib.ImplementationJars
+		}
+
 		libDep := dep.(UsesLibraryDependency)
 		paths.exportableStubsDexJarPath = libDep.DexJarBuildPath(ctx)
 		return nil
@@ -756,6 +762,15 @@
 	}
 }
 
+func (paths *scopePaths) treatDepAsExportableApiStubsProvider(dep android.Module, action func(provider ExportableApiStubsProvider)) error {
+	if exportableApiStubsProvider, ok := dep.(ExportableApiStubsProvider); ok {
+		action(exportableApiStubsProvider)
+		return nil
+	} else {
+		return fmt.Errorf("expected module that implements ExportableApiStubsSrcProvider, e.g. droidstubs")
+	}
+}
+
 func (paths *scopePaths) treatDepAsApiStubsSrcProvider(dep android.Module, action func(provider ApiStubsSrcProvider)) error {
 	if apiStubsProvider, ok := dep.(ApiStubsSrcProvider); ok {
 		action(apiStubsProvider)
@@ -771,6 +786,12 @@
 	paths.removedApiFilePath = android.OptionalPathForPath(provider.RemovedApiFilePath())
 }
 
+func (paths *scopePaths) extractApiInfoFromExportableApiStubsProvider(provider ExportableApiStubsProvider) {
+	paths.annotationsZip = android.OptionalPathForPath(provider.ExportableAnnotationsZip())
+	paths.currentApiFilePath = android.OptionalPathForPath(provider.ExportableApiFilePath())
+	paths.removedApiFilePath = android.OptionalPathForPath(provider.ExportableRemovedApiFilePath())
+}
+
 func (paths *scopePaths) extractApiInfoFromDep(ctx android.ModuleContext, dep android.Module) error {
 	return paths.treatDepAsApiStubsProvider(dep, func(provider ApiStubsProvider) {
 		paths.extractApiInfoFromApiStubsProvider(provider)
@@ -781,6 +802,10 @@
 	paths.stubsSrcJar = android.OptionalPathForPath(provider.StubsSrcJar())
 }
 
+func (paths *scopePaths) extractStubsSourceInfoFromExportableApiStubsProviders(provider ExportableApiStubsSrcProvider) {
+	paths.stubsSrcJar = android.OptionalPathForPath(provider.ExportableStubsSrcJar())
+}
+
 func (paths *scopePaths) extractStubsSourceInfoFromDep(ctx android.ModuleContext, dep android.Module) error {
 	return paths.treatDepAsApiStubsSrcProvider(dep, func(provider ApiStubsSrcProvider) {
 		paths.extractStubsSourceInfoFromApiStubsProviders(provider)
@@ -788,6 +813,12 @@
 }
 
 func (paths *scopePaths) extractStubsSourceAndApiInfoFromApiStubsProvider(ctx android.ModuleContext, dep android.Module) error {
+	if ctx.Config().ReleaseHiddenApiExportableStubs() {
+		return paths.treatDepAsExportableApiStubsProvider(dep, func(provider ExportableApiStubsProvider) {
+			paths.extractApiInfoFromExportableApiStubsProvider(provider)
+			paths.extractStubsSourceInfoFromExportableApiStubsProviders(provider)
+		})
+	}
 	return paths.treatDepAsApiStubsProvider(dep, func(provider ApiStubsProvider) {
 		paths.extractApiInfoFromApiStubsProvider(provider)
 		paths.extractStubsSourceInfoFromApiStubsProviders(provider)
