diff --git a/android/module.go b/android/module.go
index 41499ca..f1af53a 100644
--- a/android/module.go
+++ b/android/module.go
@@ -56,8 +56,6 @@
 	Darwin() bool
 	Debug() bool
 	AConfig() Config
-	Proprietary() bool
-	InstallInData() bool
 }
 
 type BaseContext interface {
@@ -82,6 +80,9 @@
 	CheckbuildFile(srcPath Path)
 
 	AddMissingDependencies(deps []string)
+
+	Proprietary() bool
+	InstallInData() bool
 }
 
 type Module interface {
@@ -387,15 +388,14 @@
 
 func (a *ModuleBase) androidBaseContextFactory(ctx blueprint.BaseModuleContext) androidBaseContextImpl {
 	return androidBaseContextImpl{
-		target:        a.commonProperties.CompileTarget,
-		proprietary:   a.commonProperties.Proprietary,
-		config:        ctx.Config().(Config),
-		installInData: a.module.InstallInData(),
+		target: a.commonProperties.CompileTarget,
+		config: ctx.Config().(Config),
 	}
 }
 
 func (a *ModuleBase) GenerateBuildActions(ctx blueprint.ModuleContext) {
 	androidCtx := &androidModuleContext{
+		module:                 a.module,
 		ModuleContext:          ctx,
 		androidBaseContextImpl: a.androidBaseContextFactory(ctx),
 		installDeps:            a.computeInstallDeps(ctx),
@@ -422,11 +422,9 @@
 }
 
 type androidBaseContextImpl struct {
-	target        Target
-	debug         bool
-	config        Config
-	proprietary   bool
-	installInData bool
+	target Target
+	debug  bool
+	config Config
 }
 
 type androidModuleContext struct {
@@ -436,6 +434,7 @@
 	installFiles    Paths
 	checkbuildFiles Paths
 	missingDeps     []string
+	module          Module
 }
 
 func (a *androidModuleContext) ninjaError(outputs []string, err error) {
@@ -533,12 +532,12 @@
 	return a.config
 }
 
-func (a *androidBaseContextImpl) Proprietary() bool {
-	return a.proprietary
+func (a *androidModuleContext) Proprietary() bool {
+	return a.module.base().commonProperties.Proprietary
 }
 
-func (a *androidBaseContextImpl) InstallInData() bool {
-	return a.installInData
+func (a *androidModuleContext) InstallInData() bool {
+	return a.module.InstallInData()
 }
 
 func (a *androidModuleContext) InstallFileName(installPath OutputPath, name string, srcPath Path,
diff --git a/cc/ndk_library.go b/cc/ndk_library.go
index 903a96b..d681b77 100644
--- a/cc/ndk_library.go
+++ b/cc/ndk_library.go
@@ -93,6 +93,8 @@
 	baseCompiler
 
 	properties libraryProperties
+
+	linker *stubLinker
 }
 
 // OMG GO
@@ -175,6 +177,7 @@
 	stubSrcPath := android.PathForModuleGen(ctx, stubSrcName)
 	versionScriptName := fileBase + ".map"
 	versionScriptPath := android.PathForModuleGen(ctx, versionScriptName)
+	c.linker.versionScriptPath = versionScriptPath
 	symbolFilePath := android.PathForModuleSrc(ctx, c.properties.Symbol_file)
 	ctx.ModuleBuild(pctx, android.ModuleBuildParams{
 		Rule:    genStubSrc,
@@ -209,6 +212,8 @@
 
 type stubLinker struct {
 	libraryLinker
+
+	versionScriptPath android.ModuleGenPath
 }
 
 func (linker *stubLinker) linkerDeps(ctx BaseModuleContext, deps Deps) Deps {
@@ -221,6 +226,14 @@
 	return linker.libraryLinker.linkerFlags(ctx, flags)
 }
 
+func (linker *stubLinker) link(ctx ModuleContext, flags Flags, deps PathDeps,
+	objFiles android.Paths) android.Path {
+
+	linkerScriptFlag := "-Wl,--version-script," + linker.versionScriptPath.String()
+	flags.LdFlags = append(flags.LdFlags, linkerScriptFlag)
+	return linker.libraryLinker.link(ctx, flags, deps, objFiles)
+}
+
 type stubInstaller struct {
 	baseInstaller
 
@@ -258,6 +271,7 @@
 	module.linker = linker
 
 	compiler := &stubCompiler{}
+	compiler.linker = linker
 	module.compiler = compiler
 	module.installer = &stubInstaller{baseInstaller{
 		dir:   "lib",
