diff --git a/cc/androidmk.go b/cc/androidmk.go
index 2cfa3f4..fa7ce42 100644
--- a/cc/androidmk.go
+++ b/cc/androidmk.go
@@ -279,7 +279,7 @@
 }
 
 func (c *stubDecorator) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) {
-	ret.SubName = "." + c.properties.ApiLevel
+	ret.SubName = ndkLibrarySuffix + "." + c.properties.ApiLevel
 	ret.Class = "SHARED_LIBRARIES"
 
 	ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) error {
@@ -301,6 +301,7 @@
 
 func (c *llndkStubDecorator) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) {
 	ret.Class = "SHARED_LIBRARIES"
+	ret.SubName = llndkLibrarySuffix
 
 	ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) error {
 		c.libraryDecorator.androidMkWriteExportedFlags(w)
diff --git a/cc/cc.go b/cc/cc.go
index 8ef606f..ae203a3 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -430,7 +430,9 @@
 
 func (c *Module) Name() string {
 	name := c.ModuleBase.Name()
-	if p, ok := c.linker.(prebuiltLinkerInterface); ok {
+	if p, ok := c.linker.(interface {
+		Name(string) string
+	}); ok {
 		name = p.Name(name)
 	}
 	return name
diff --git a/cc/llndk_library.go b/cc/llndk_library.go
index 60efc57..cde1bc7 100644
--- a/cc/llndk_library.go
+++ b/cc/llndk_library.go
@@ -29,15 +29,10 @@
 
 // Creates a stub shared library based on the provided version file.
 //
-// The name of the generated file will be based on the module name by stripping
-// the ".llndk" suffix from the module name. Module names must end with ".llndk"
-// (as a convention to allow soong to guess the LL-NDK name of a dependency when
-// needed). "libfoo.llndk" will generate "libfoo.so".
-//
 // Example:
 //
 // llndk_library {
-//     name: "libfoo.llndk",
+//     name: "libfoo",
 //     symbol_file: "libfoo.map.txt",
 //     export_include_dirs: ["include_vndk"],
 // }
@@ -69,10 +64,6 @@
 }
 
 func (stub *llndkStubDecorator) compile(ctx ModuleContext, flags Flags, deps PathDeps) Objects {
-	if !strings.HasSuffix(ctx.ModuleName(), llndkLibrarySuffix) {
-		ctx.ModuleErrorf("llndk_library modules names must be suffixed with %q\n",
-			llndkLibrarySuffix)
-	}
 	objs, versionScript := compileStubLibrary(ctx, flags, stub.Properties.Symbol_file, "current", "--vndk")
 	stub.versionScriptPath = versionScript
 	return objs
@@ -82,6 +73,10 @@
 	return Deps{}
 }
 
+func (stub *llndkStubDecorator) Name(name string) string {
+	return name + llndkLibrarySuffix
+}
+
 func (stub *llndkStubDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flags {
 	stub.libraryDecorator.libName = strings.TrimSuffix(ctx.ModuleName(),
 		llndkLibrarySuffix)
diff --git a/cc/ndk_library.go b/cc/ndk_library.go
index 75785f9..f5499dd 100644
--- a/cc/ndk_library.go
+++ b/cc/ndk_library.go
@@ -65,15 +65,10 @@
 
 // Creates a stub shared library based on the provided version file.
 //
-// The name of the generated file will be based on the module name by stripping
-// the ".ndk" suffix from the module name. Module names must end with ".ndk"
-// (as a convention to allow soong to guess the NDK name of a dependency when
-// needed). "libfoo.ndk" will generate "libfoo.so.
-//
 // Example:
 //
 // ndk_library {
-//     name: "libfoo.ndk",
+//     name: "libfoo",
 //     symbol_file: "libfoo.map.txt",
 //     first_version: "9",
 // }
@@ -230,7 +225,11 @@
 func (c *stubDecorator) compilerInit(ctx BaseModuleContext) {
 	c.baseCompiler.compilerInit(ctx)
 
-	name := strings.TrimSuffix(ctx.ModuleName(), ".ndk")
+	name := ctx.baseModuleName()
+	if strings.HasSuffix(name, ndkLibrarySuffix) {
+		ctx.PropertyErrorf("name", "Do not append %q manually, just use the base name", ndkLibrarySuffix)
+	}
+
 	ndkMigratedLibsLock.Lock()
 	defer ndkMigratedLibsLock.Unlock()
 	for _, lib := range ndkMigratedLibs {
@@ -276,10 +275,6 @@
 }
 
 func (c *stubDecorator) compile(ctx ModuleContext, flags Flags, deps PathDeps) Objects {
-	if !strings.HasSuffix(ctx.ModuleName(), ndkLibrarySuffix) {
-		ctx.ModuleErrorf("ndk_library modules names must be suffixed with %q\n",
-			ndkLibrarySuffix)
-	}
 	objs, versionScript := compileStubLibrary(ctx, flags, c.properties.Symbol_file, c.properties.ApiLevel, "")
 	c.versionScriptPath = versionScript
 	return objs
@@ -289,9 +284,12 @@
 	return Deps{}
 }
 
+func (linker *stubDecorator) Name(name string) string {
+	return name + ndkLibrarySuffix
+}
+
 func (stub *stubDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flags {
-	stub.libraryDecorator.libName = strings.TrimSuffix(ctx.ModuleName(),
-		ndkLibrarySuffix)
+	stub.libraryDecorator.libName = ctx.baseModuleName()
 	return stub.libraryDecorator.linkerFlags(ctx, flags)
 }
 
