diff --git a/main.cpp b/main.cpp
index 0a31727..58720dc 100644
--- a/main.cpp
+++ b/main.cpp
@@ -686,6 +686,60 @@
     out << "}\n\n";
 }
 
+static void generateAndroidBpLibSection(
+        Formatter &out,
+        bool generateVendor,
+        const std::string &libraryName,
+        const std::string &genSourceName,
+        const std::string &genHeaderName,
+        const std::set<FQName> &importedPackagesHierarchy) {
+
+    // C++ library definition
+    out << "cc_library_shared {\n";
+    out.indent();
+    out << "name: \"" << libraryName << (generateVendor ? "_vendor" : "") << "\",\n"
+        << "defaults: [\"hidl-module-defaults\"],\n"
+        << "generated_sources: [\"" << genSourceName << "\"],\n"
+        << "generated_headers: [\"" << genHeaderName << "\"],\n"
+        << "export_generated_headers: [\"" << genHeaderName << "\"],\n";
+
+    if (generateVendor) {
+        out << "vendor: true,\n";
+    } else {
+        out << "vendor_available: true,\n";
+    }
+    out << "shared_libs: [\n";
+
+    out.indent();
+    out << "\"libhidlbase\",\n"
+        << "\"libhidltransport\",\n"
+        << "\"libhwbinder\",\n"
+        << "\"liblog\",\n"
+        << "\"libutils\",\n"
+        << "\"libcutils\",\n";
+    for (const auto &importedPackage : importedPackagesHierarchy) {
+        out << "\"" << makeLibraryName(importedPackage) << "\",\n";
+    }
+    out.unindent();
+
+    out << "],\n";
+
+    out << "export_shared_lib_headers: [\n";
+    out.indent();
+    out << "\"libhidlbase\",\n"
+        << "\"libhidltransport\",\n"
+        << "\"libhwbinder\",\n"
+        << "\"libutils\",\n";
+    for (const auto &importedPackage : importedPackagesHierarchy) {
+        out << "\"" << makeLibraryName(importedPackage) << "\",\n";
+    }
+    out.unindent();
+    out << "],\n";
+    out.unindent();
+
+    out << "}\n";
+}
+
 static status_t generateAndroidBpForPackage(
         const FQName &packageFQName,
         const char *hidl_gen,
@@ -807,56 +861,40 @@
                 }
             });
 
-    // C++ library definition
-    out << "cc_library_shared {\n";
-    out.indent();
-    out << "name: \"" << libraryName << "\",\n"
-        << "defaults: [\"hidl-module-defaults\"],\n"
-        << "generated_sources: [\"" << genSourceName << "\"],\n"
-        << "generated_headers: [\"" << genHeaderName << "\"],\n"
-        << "export_generated_headers: [\"" << genHeaderName << "\"],\n";
+    generateAndroidBpLibSection(
+        out,
+        false /* generateVendor */,
+        libraryName,
+        genSourceName,
+        genHeaderName,
+        importedPackagesHierarchy);
 
-    // TODO(b/35813011): make always vendor_available
-    // Explicitly mark libraries vendor until BOARD_VNDK_VERSION can
-    // be enabled.
-    if (packageFQName.inPackage("android.hidl") ||
+    // TODO(b/35813011): make all libraries vendor_available
+    // Explicitly create '_vendor' copies of libraries so that
+    // vendor code can link against the extensions. When this is
+    // used, framework code should link against vendor.awesome.foo@1.0
+    // and code on the vendor image should link against
+    // vendor.awesome.foo@1.0_vendor. For libraries with the below extensions,
+    // they will be available even on the generic system image.
+    // Because of this, they should always be referenced without the
+    // '_vendor' name suffix.
+    if (!(packageFQName.inPackage("android.hidl") ||
             packageFQName.inPackage("android.system") ||
             packageFQName.inPackage("android.frameworks") ||
-            packageFQName.inPackage("android.hardware")) {
-        out << "vendor_available: true,\n";
-    } else {
-        out << "vendor: true,\n";
+            packageFQName.inPackage("android.hardware"))) {
+
+        // Note, not using cc_defaults here since it's already not used and
+        // because generating this libraries will be removed when the VNDK
+        // is enabled (done by the build system itself).
+        out.endl();
+        generateAndroidBpLibSection(
+            out,
+            true /* generateVendor */,
+            libraryName,
+            genSourceName,
+            genHeaderName,
+            importedPackagesHierarchy);
     }
-    out << "shared_libs: [\n";
-
-    out.indent();
-    out << "\"libhidlbase\",\n"
-        << "\"libhidltransport\",\n"
-        << "\"libhwbinder\",\n"
-        << "\"liblog\",\n"
-        << "\"libutils\",\n"
-        << "\"libcutils\",\n";
-    for (const auto &importedPackage : importedPackagesHierarchy) {
-        out << "\"" << makeLibraryName(importedPackage) << "\",\n";
-    }
-    out.unindent();
-
-    out << "],\n";
-
-    out << "export_shared_lib_headers: [\n";
-    out.indent();
-    out << "\"libhidlbase\",\n"
-        << "\"libhidltransport\",\n"
-        << "\"libhwbinder\",\n"
-        << "\"libutils\",\n";
-    for (const auto &importedPackage : importedPackagesHierarchy) {
-        out << "\"" << makeLibraryName(importedPackage) << "\",\n";
-    }
-    out.unindent();
-    out << "],\n";
-    out.unindent();
-
-    out << "}\n";
 
     return OK;
 }
diff --git a/test/vendor/1.0/Android.bp b/test/vendor/1.0/Android.bp
index e436233..752a5ff 100644
--- a/test/vendor/1.0/Android.bp
+++ b/test/vendor/1.0/Android.bp
@@ -45,6 +45,33 @@
     generated_sources: ["tests.vendor@1.0_genc++"],
     generated_headers: ["tests.vendor@1.0_genc++_headers"],
     export_generated_headers: ["tests.vendor@1.0_genc++_headers"],
+    vendor_available: true,
+    shared_libs: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "liblog",
+        "libutils",
+        "libcutils",
+        "android.hardware.tests.baz@1.0",
+        "android.hidl.base@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hardware.tests.baz@1.0",
+        "android.hidl.base@1.0",
+    ],
+}
+
+cc_library_shared {
+    name: "tests.vendor@1.0_vendor",
+    defaults: ["hidl-module-defaults"],
+    generated_sources: ["tests.vendor@1.0_genc++"],
+    generated_headers: ["tests.vendor@1.0_genc++_headers"],
+    export_generated_headers: ["tests.vendor@1.0_genc++_headers"],
     vendor: true,
     shared_libs: [
         "libhidlbase",
