diff --git a/cc/cc.go b/cc/cc.go
index de07229..6075ba1 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -583,6 +583,13 @@
 	return c.depsInLinkOrder
 }
 
+func (c *Module) StubsSymbolFile() android.OptionalPath {
+	if library, ok := c.linker.(*libraryDecorator); ok {
+		return library.stubsSymbolFile
+	}
+	return android.OptionalPath{}
+}
+
 func (c *Module) StubsVersions() []string {
 	if c.linker != nil {
 		if library, ok := c.linker.(*libraryDecorator); ok {
diff --git a/cc/library.go b/cc/library.go
index b9f448b..26e86f9 100644
--- a/cc/library.go
+++ b/cc/library.go
@@ -367,6 +367,9 @@
 	// Location of the file that should be copied to dist dir when requested
 	distFile android.OptionalPath
 
+	// stubs.symbol_file
+	stubsSymbolFile android.OptionalPath
+
 	versionScriptPath android.ModuleGenPath
 
 	post_install_cmds []string
@@ -376,7 +379,7 @@
 	useCoreVariant       bool
 	checkSameCoreVariant bool
 
-	// Decorated interafaces
+	// Decorated interfaces
 	*baseCompiler
 	*baseLinker
 	*baseInstaller
@@ -603,6 +606,7 @@
 
 func (library *libraryDecorator) compile(ctx ModuleContext, flags Flags, deps PathDeps) Objects {
 	if library.buildStubs() {
+		library.stubsSymbolFile = android.OptionalPathForModuleSrc(ctx, library.Properties.Stubs.Symbol_file)
 		objs, versionScript := compileStubLibrary(ctx, flags, String(library.Properties.Stubs.Symbol_file), library.MutatedProperties.StubsVersion, "--apex")
 		library.versionScriptPath = versionScript
 		return objs
diff --git a/cc/library_sdk_member.go b/cc/library_sdk_member.go
index 0a11af1..4e4df5b 100644
--- a/cc/library_sdk_member.go
+++ b/cc/library_sdk_member.go
@@ -269,12 +269,21 @@
 	for property, dirs := range includeDirs {
 		outputProperties.AddProperty(property, dirs)
 	}
+
+	if len(libInfo.StubsVersion) > 0 {
+		symbolFilePath := filepath.Join(nativeEtcDir, libInfo.StubsSymbolFile.Path().Base())
+		builder.CopyToSnapshot(libInfo.StubsSymbolFile.Path(), symbolFilePath)
+		stubsSet := outputProperties.AddPropertySet("stubs")
+		stubsSet.AddProperty("symbol_file", symbolFilePath)
+		stubsSet.AddProperty("versions", []string{libInfo.StubsVersion})
+	}
 }
 
 const (
 	nativeIncludeDir          = "include"
 	nativeGeneratedIncludeDir = "include_gen"
 	nativeStubDir             = "lib"
+	nativeEtcDir              = "etc"
 )
 
 // path to the native library. Relative to <sdk_root>/<api_dir>
@@ -335,6 +344,13 @@
 	// This field is exported as its contents may not be arch specific.
 	SystemSharedLibs []string
 
+	// The specific stubs version for the lib variant, or empty string if stubs
+	// are not in use.
+	StubsVersion string
+
+	// The stubs symbol file.
+	StubsSymbolFile android.OptionalPath
+
 	// outputFile is not exported as it is always arch specific.
 	outputFile android.Path
 }
@@ -370,6 +386,11 @@
 		p.SystemSharedLibs = specifiedDeps.systemSharedLibs
 	}
 	p.exportedGeneratedHeaders = ccModule.ExportedGeneratedHeaders()
+
+	if ccModule.HasStubsVariants() {
+		p.StubsVersion = ccModule.StubsVersion()
+		p.StubsSymbolFile = ccModule.StubsSymbolFile()
+	}
 }
 
 func (p *nativeLibInfoProperties) AddToPropertySet(ctx android.SdkMemberContext, propertySet android.BpPropertySet) {
