diff --git a/cc/androidmk.go b/cc/androidmk.go
index aa5c4dc..8b1b349 100644
--- a/cc/androidmk.go
+++ b/cc/androidmk.go
@@ -17,6 +17,7 @@
 import (
 	"fmt"
 	"io"
+	"path/filepath"
 	"strings"
 
 	"android/soong/common"
@@ -105,5 +106,17 @@
 }
 
 func (test *testLinker) AndroidMk(ret *common.AndroidMkData) {
-	ret.Disabled = true
+	test.binaryLinker.AndroidMk(ret)
+	if Bool(test.Properties.Test_per_src) {
+		ret.SubName = test.binaryLinker.Properties.Stem
+	}
+}
+
+func (installer *baseInstaller) AndroidMk(ret *common.AndroidMkData) {
+	ret.Extra = append(ret.Extra, func(w io.Writer, outputFile common.Path) error {
+		path := installer.path.RelPathString()
+		fmt.Fprintln(w, "LOCAL_MODULE_PATH := $(OUT_DIR)/"+filepath.Dir(path))
+		fmt.Fprintln(w, "LOCAL_MODULE_STEM := "+filepath.Base(path))
+		return nil
+	})
 }
diff --git a/cc/cc.go b/cc/cc.go
index d20a197..251d1cd 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -1195,7 +1195,7 @@
 	dir64 string
 	data  bool
 
-	path common.Path
+	path common.OutputPath
 }
 
 var _ installer = (*baseInstaller)(nil)
diff --git a/common/androidmk.go b/common/androidmk.go
index 49380e0..a16a652 100644
--- a/common/androidmk.go
+++ b/common/androidmk.go
@@ -38,6 +38,7 @@
 
 type AndroidMkData struct {
 	Class      string
+	SubName    string
 	OutputFile OptionalPath
 	Disabled   bool
 
@@ -141,6 +142,10 @@
 		return err
 	}
 
+	if data.SubName != "" {
+		name += "_" + data.SubName
+	}
+
 	hostCross := false
 	if amod.Host() && amod.HostType() != CurrentHostType() {
 		hostCross = true
diff --git a/common/module.go b/common/module.go
index 8e45952..ee028da 100644
--- a/common/module.go
+++ b/common/module.go
@@ -76,8 +76,8 @@
 	ExpandSources(srcFiles, excludes []string) Paths
 	Glob(outDir, globPattern string, excludes []string) Paths
 
-	InstallFile(installPath OutputPath, srcPath Path, deps ...Path) Path
-	InstallFileName(installPath OutputPath, name string, srcPath Path, deps ...Path) Path
+	InstallFile(installPath OutputPath, srcPath Path, deps ...Path) OutputPath
+	InstallFileName(installPath OutputPath, name string, srcPath Path, deps ...Path) OutputPath
 	CheckbuildFile(srcPath Path)
 
 	AddMissingDependencies(deps []string)
@@ -531,7 +531,7 @@
 }
 
 func (a *androidModuleContext) InstallFileName(installPath OutputPath, name string, srcPath Path,
-	deps ...Path) Path {
+	deps ...Path) OutputPath {
 
 	fullInstallPath := installPath.Join(a, name)
 
@@ -552,7 +552,7 @@
 	return fullInstallPath
 }
 
-func (a *androidModuleContext) InstallFile(installPath OutputPath, srcPath Path, deps ...Path) Path {
+func (a *androidModuleContext) InstallFile(installPath OutputPath, srcPath Path, deps ...Path) OutputPath {
 	return a.InstallFileName(installPath, filepath.Base(srcPath.String()), srcPath, deps...)
 }
 
diff --git a/common/paths.go b/common/paths.go
index 93cad13..554ce3f 100644
--- a/common/paths.go
+++ b/common/paths.go
@@ -478,6 +478,10 @@
 	return filepath.Join(p.config.buildDir, p.path)
 }
 
+func (p OutputPath) RelPathString() string {
+	return p.path
+}
+
 // Join creates a new OutputPath with paths... joined with the current path. The
 // provided paths... may not use '..' to escape from the current path.
 func (p OutputPath) Join(ctx PathContext, paths ...string) OutputPath {
