diff --git a/cc/androidmk.go b/cc/androidmk.go
index 5b160c6..53c05d4 100644
--- a/cc/androidmk.go
+++ b/cc/androidmk.go
@@ -26,6 +26,7 @@
 func (c *Module) AndroidMk() (ret common.AndroidMkData, err error) {
 	ret.OutputFile = c.outputFile
 	ret.Extra = append(ret.Extra, func(w io.Writer, outputFile common.Path) (err error) {
+		fmt.Fprintln(w, "LOCAL_SANITIZE := never")
 		if len(c.Properties.AndroidMkSharedLibs) > 0 {
 			fmt.Fprintln(w, "LOCAL_SHARED_LIBRARIES := "+strings.Join(c.Properties.AndroidMkSharedLibs, " "))
 		}
diff --git a/cc/cc.go b/cc/cc.go
index 1a8ba3b..f740ebc 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -1482,7 +1482,7 @@
 	flags.Nocrt = Bool(library.Properties.Nocrt)
 
 	if !library.static() {
-		libName := ctx.ModuleName()
+		libName := ctx.ModuleName() + library.Properties.VariantName
 		// GCC for Android assumes that -shared means -Bsymbolic, use -Wl,-shared instead
 		sharedFlag := "-Wl,-shared"
 		if flags.Clang || ctx.Host() {
@@ -1663,7 +1663,8 @@
 type libraryInstaller struct {
 	baseInstaller
 
-	linker *libraryLinker
+	linker   *libraryLinker
+	sanitize *sanitize
 }
 
 func (library *libraryInstaller) install(ctx ModuleContext, file common.Path) {
@@ -1672,6 +1673,10 @@
 	}
 }
 
+func (library *libraryInstaller) inData() bool {
+	return library.baseInstaller.inData() || library.sanitize.inData()
+}
+
 func NewLibrary(hod common.HostOrDeviceSupported, shared, static bool) *Module {
 	module := newModule(hod, common.MultilibBoth)
 
@@ -1688,7 +1693,8 @@
 			dir:   "lib",
 			dir64: "lib64",
 		},
-		linker: linker,
+		linker:   linker,
+		sanitize: module.sanitize,
 	}
 
 	return module
diff --git a/cc/sanitize.go b/cc/sanitize.go
index 676d5b3..670443b 100644
--- a/cc/sanitize.go
+++ b/cc/sanitize.go
@@ -69,6 +69,7 @@
 
 	SanitizerEnabled bool `blueprint:"mutated"`
 	SanitizeDep      bool `blueprint:"mutated"`
+	InData           bool `blueprint:"mutated"`
 }
 
 type sanitize struct {
@@ -266,6 +267,10 @@
 	return flags
 }
 
+func (sanitize *sanitize) inData() bool {
+	return sanitize.Properties.InData
+}
+
 func (sanitize *sanitize) Sanitizer(t sanitizerType) bool {
 	if sanitize == nil {
 		return false
@@ -314,14 +319,24 @@
 	return func(mctx common.AndroidBottomUpMutatorContext) {
 		if c, ok := mctx.Module().(*Module); ok && c.sanitize != nil {
 			if d, ok := c.linker.(baseLinkerInterface); ok && d.isDependencyRoot() && c.sanitize.Sanitizer(t) {
-				mctx.CreateVariations(t.String())
+				modules := mctx.CreateVariations(t.String())
+				modules[0].(*Module).sanitize.SetSanitizer(t, true)
+				if mctx.AConfig().EmbeddedInMake() {
+					modules[0].(*Module).sanitize.Properties.InData = true
+				}
 			} else if c.sanitize.Properties.SanitizeDep {
-				modules := mctx.CreateVariations("", t.String())
-				modules[0].(*Module).sanitize.SetSanitizer(t, false)
-				modules[1].(*Module).sanitize.SetSanitizer(t, true)
-				modules[1].(*Module).appendVariantName("_" + t.String())
-				modules[0].(*Module).sanitize.Properties.SanitizeDep = false
-				modules[1].(*Module).sanitize.Properties.SanitizeDep = false
+				if mctx.AConfig().EmbeddedInMake() {
+					modules := mctx.CreateVariations(t.String())
+					modules[0].(*Module).sanitize.SetSanitizer(t, true)
+					modules[0].(*Module).sanitize.Properties.InData = true
+				} else {
+					modules := mctx.CreateVariations("", t.String())
+					modules[0].(*Module).sanitize.SetSanitizer(t, false)
+					modules[1].(*Module).sanitize.SetSanitizer(t, true)
+					modules[1].(*Module).appendVariantName("_" + t.String())
+					modules[0].(*Module).sanitize.Properties.SanitizeDep = false
+					modules[1].(*Module).sanitize.Properties.SanitizeDep = false
+				}
 			}
 			c.sanitize.Properties.SanitizeDep = false
 		}
