diff --git a/apex/apex_test.go b/apex/apex_test.go
index 21d517f..babc27b 100644
--- a/apex/apex_test.go
+++ b/apex/apex_test.go
@@ -858,89 +858,58 @@
 
 }
 
-func TestApexDependsOnLLNDKTransitively(t *testing.T) {
-	testcases := []struct {
-		name          string
-		minSdkVersion string
-		shouldLink    string
-		shouldNotLink []string
-	}{
-		{
-			name:          "should link to test latest",
-			minSdkVersion: "current",
-			shouldLink:    "30",
-			shouldNotLink: []string{"29"},
-		},
-		{
-			name:          "should link to llndk#29",
-			minSdkVersion: "29",
-			shouldLink:    "29",
-			shouldNotLink: []string{"30"},
-		},
-	}
-	for _, tc := range testcases {
-		t.Run(tc.name, func(t *testing.T) {
-			ctx, _ := testApex(t, `
-			apex {
-				name: "myapex",
-				key: "myapex.key",
-				use_vendor: true,
-				native_shared_libs: ["mylib"],
-				min_sdk_version: "`+tc.minSdkVersion+`",
-			}
+func TestApexDependencyToLLNDK(t *testing.T) {
+	ctx, _ := testApex(t, `
+		apex {
+			name: "myapex",
+			key: "myapex.key",
+			use_vendor: true,
+			native_shared_libs: ["mylib"],
+		}
 
-			apex_key {
-				name: "myapex.key",
-				public_key: "testkey.avbpubkey",
-				private_key: "testkey.pem",
-			}
+		apex_key {
+			name: "myapex.key",
+			public_key: "testkey.avbpubkey",
+			private_key: "testkey.pem",
+		}
 
-			cc_library {
-				name: "mylib",
-				srcs: ["mylib.cpp"],
-				vendor_available: true,
-				shared_libs: ["libbar"],
-				system_shared_libs: [],
-				stl: "none",
-				apex_available: [ "myapex" ],
-			}
+		cc_library {
+			name: "mylib",
+			srcs: ["mylib.cpp"],
+			vendor_available: true,
+			shared_libs: ["libbar"],
+			system_shared_libs: [],
+			stl: "none",
+			apex_available: [ "myapex" ],
+		}
 
-			cc_library {
-				name: "libbar",
-				srcs: ["mylib.cpp"],
-				system_shared_libs: [],
-				stl: "none",
-				stubs: { versions: ["29","30"] },
-			}
+		cc_library {
+			name: "libbar",
+			srcs: ["mylib.cpp"],
+			system_shared_libs: [],
+			stl: "none",
+		}
 
-			llndk_library {
-				name: "libbar",
-				symbol_file: "",
-			}
-			`, func(fs map[string][]byte, config android.Config) {
-				setUseVendorWhitelistForTest(config, []string{"myapex"})
-			}, withUnbundledBuild)
+		llndk_library {
+			name: "libbar",
+			symbol_file: "",
+		}
+	`, func(fs map[string][]byte, config android.Config) {
+		setUseVendorWhitelistForTest(config, []string{"myapex"})
+	})
 
-			// Ensure that LLNDK dep is not included
-			ensureExactContents(t, ctx, "myapex", "android_common_myapex_image", []string{
-				"lib64/mylib.so",
-			})
+	apexRule := ctx.ModuleForTests("myapex", "android_common_myapex_image").Rule("apexRule")
+	copyCmds := apexRule.Args["copy_commands"]
 
-			// Ensure that LLNDK dep is required
-			apexManifestRule := ctx.ModuleForTests("myapex", "android_common_myapex_image").Rule("apexManifestRule")
-			ensureListEmpty(t, names(apexManifestRule.Args["provideNativeLibs"]))
-			ensureListContains(t, names(apexManifestRule.Args["requireNativeLibs"]), "libbar.so")
+	// Ensure that LLNDK dep is not included
+	ensureNotContains(t, copyCmds, "image.apex/lib64/libbar.so")
 
-			mylibLdFlags := ctx.ModuleForTests("mylib", "android_vendor.VER_arm64_armv8-a_shared_myapex").Rule("ld").Args["libFlags"]
-			ensureContains(t, mylibLdFlags, "libbar.llndk/android_vendor.VER_arm64_armv8-a_shared_"+tc.shouldLink+"/libbar.so")
-			for _, ver := range tc.shouldNotLink {
-				ensureNotContains(t, mylibLdFlags, "libbar.llndk/android_vendor.VER_arm64_armv8-a_shared_"+ver+"/libbar.so")
-			}
+	apexManifestRule := ctx.ModuleForTests("myapex", "android_common_myapex_image").Rule("apexManifestRule")
+	ensureListEmpty(t, names(apexManifestRule.Args["provideNativeLibs"]))
 
-			mylibCFlags := ctx.ModuleForTests("mylib", "android_vendor.VER_arm64_armv8-a_static_myapex").Rule("cc").Args["cFlags"]
-			ensureContains(t, mylibCFlags, "__LIBBAR_API__="+tc.shouldLink)
-		})
-	}
+	// Ensure that LLNDK dep is required
+	ensureListContains(t, names(apexManifestRule.Args["requireNativeLibs"]), "libbar.so")
+
 }
 
 func TestApexWithSystemLibsStubs(t *testing.T) {
@@ -1270,6 +1239,10 @@
 	// note that platform variant is not.
 	cm = ctx.ModuleForTests("libc++", "android_arm64_armv8-a_shared").Module().(*cc.Module)
 	ensureListNotContains(t, cm.Properties.AndroidMkStaticLibs, "libgcc_stripped")
+
+	libFlags := ctx.ModuleForTests("libx", "android_arm64_armv8-a_shared_myapex").Rule("ld").Args["libFlags"]
+	ensureContains(t, libFlags, "android_arm64_armv8-a_shared_myapex/libc++.so")
+	ensureContains(t, libFlags, "android_arm64_armv8-a_shared_29/libc.so") // min_sdk_version applied
 }
 
 func TestInvalidMinSdkVersion(t *testing.T) {
