diff --git a/nn/runtime/test/Android.bp b/nn/runtime/test/Android.bp
index 65d9de6..df0c588 100644
--- a/nn/runtime/test/Android.bp
+++ b/nn/runtime/test/Android.bp
@@ -193,28 +193,28 @@
     ],
 }
 
-cc_fuzz {
-    name: "libneuralnetworks_fuzzer",
-    defaults: ["NeuralNetworksTest_default_libs"],
-    owner: "google",
-    fuzz_config: {
-        cc: ["butlermichael@google.com"],
-    },
-    srcs: [
-        "android_fuzzing/Converter.cpp",
-        "android_fuzzing/FuzzTest.cpp",
-        "android_fuzzing/StaticAssert.cpp",
-    ],
-    corpus: ["android_fuzzing/corpus/*"],
-    shared_libs: ["libprotobuf-cpp-full"],
-    static_libs: [
-        "libneuralnetworks_common",
-        "libneuralnetworks_fuzzer_proto",
-        "libneuralnetworks_generated_test_harness",
-        "libneuralnetworks_static",
-        "libprotobuf-mutator",
-    ],
-}
+//cc_fuzz {
+//    name: "libneuralnetworks_fuzzer",
+//    defaults: [
+//        "NeuralNetworksTest_default_libs",
+//        "libneuralnetworks_fuzzer_defaults",
+//    ],
+//    owner: "google",
+//    fuzz_config: {
+//        cc: ["butlermichael@google.com"],
+//        // Temporarily disabled due to b/151102177.
+//        fuzz_on_haiku_host: false,
+//        fuzz_on_haiku_device: false,
+//    },
+//    srcs: [
+//        "android_fuzzing/FuzzTest.cpp",
+//    ],
+//    static_libs: [
+//        "libneuralnetworks_common",
+//        "libneuralnetworks_generated_test_harness",
+//        "libneuralnetworks_static",
+//    ],
+//}
 
 // Temporarily disabled due to b/139889855.
 cc_test {
diff --git a/nn/runtime/test/GeneratedTestUtils.h b/nn/runtime/test/GeneratedTestUtils.h
index 3ac5cba..1354f67 100644
--- a/nn/runtime/test/GeneratedTestUtils.h
+++ b/nn/runtime/test/GeneratedTestUtils.h
@@ -20,6 +20,7 @@
 #include <gtest/gtest.h>
 
 #include <memory>
+#include <string>
 #include <utility>
 #include <vector>
 
@@ -31,6 +32,7 @@
 class GeneratedTestBase
     : public ::testing::TestWithParam<test_helper::TestModelManager::TestParam> {
    protected:
+    const std::string& kTestName = GetParam().first;
     const test_helper::TestModel& testModel = *GetParam().second;
 };
 
diff --git a/nn/runtime/test/TestGenerated.cpp b/nn/runtime/test/TestGenerated.cpp
index a76aecd..70b0e6f 100644
--- a/nn/runtime/test/TestGenerated.cpp
+++ b/nn/runtime/test/TestGenerated.cpp
@@ -15,6 +15,7 @@
  */
 
 #include <android-base/logging.h>
+#include <android-base/properties.h>
 #include <ftw.h>
 #include <gtest/gtest.h>
 #include <unistd.h>
@@ -26,6 +27,7 @@
 #include <iostream>
 #include <map>
 #include <memory>
+#include <set>
 #include <string>
 #include <thread>
 #include <utility>
@@ -60,6 +62,8 @@
     void SetUp() override;
     void TearDown() override;
 
+    bool shouldSkipTest();
+
     std::optional<Compilation> compileModel(const Model& model);
     void executeWithCompilation(const Compilation& compilation, const TestModel& testModel);
     void executeOnce(const Model& model, const TestModel& testModel);
@@ -68,6 +72,9 @@
     // Test driver for those generated from ml/nn/runtime/test/spec
     void execute(const TestModel& testModel);
 
+    // VNDK version of the device under test.
+    static int mVndkVersion;
+
     std::string mCacheDir;
     std::vector<uint8_t> mToken;
     bool mTestCompilationCaching = false;
@@ -77,6 +84,8 @@
     bool mTestDeviceMemory = false;
 };
 
+int GeneratedTests::mVndkVersion = __ANDROID_API_FUTURE__;
+
 // Tag for the dynamic output shape tests
 class DynamicOutputShapeTest : public GeneratedTests {
    protected:
@@ -328,8 +337,35 @@
     }
 }
 
+bool GeneratedTests::shouldSkipTest() {
+    // A map of {min VNDK version -> tests that should be skipped with earlier VNDK versions}.
+    // The listed tests are added in a later release, but exercising old APIs. They should be
+    // skipped if the device has a mixed build of system and vendor partitions.
+    static const std::map<int, std::set<std::string>> kMapOfMinVndkVersionToTests = {
+            {
+                    __ANDROID_API_R__,
+                    {
+                            "add_broadcast_quant8_all_inputs_as_internal",
+                    },
+            },
+    };
+    for (const auto& [minVersion, names] : kMapOfMinVndkVersionToTests) {
+        if (mVndkVersion < minVersion && names.count(kTestName) > 0) {
+            return true;
+        }
+    }
+    return false;
+}
+
 void GeneratedTests::SetUp() {
     GeneratedTestBase::SetUp();
+
+    mVndkVersion = ::android::base::GetIntProperty("ro.vndk.version", __ANDROID_API_FUTURE__);
+    if (shouldSkipTest()) {
+        GTEST_SKIP();
+        return;
+    }
+
     char cacheDirTemp[] = "/data/local/tmp/TestCompilationCachingXXXXXX";
     char* cacheDir = mkdtemp(cacheDirTemp);
     ASSERT_NE(cacheDir, nullptr);
diff --git a/nn/runtime/test/fuzzing/TestRandomGraph.cpp b/nn/runtime/test/fuzzing/TestRandomGraph.cpp
index 2c8024a..fc73bc2 100644
--- a/nn/runtime/test/fuzzing/TestRandomGraph.cpp
+++ b/nn/runtime/test/fuzzing/TestRandomGraph.cpp
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+#include <android-base/properties.h>
 #include <gtest/gtest.h>
 
 #include <algorithm>
@@ -31,7 +32,6 @@
 #include "fuzzing/RandomGraphGeneratorUtils.h"
 
 #ifndef NNTEST_CTS
-#include <android-base/properties.h>
 #include <memunreachable/memunreachable.h>
 
 #include <vector>
@@ -152,6 +152,7 @@
         mSyntheticDevices.push_back(makeTestDevice<TestDriverV1_1>());
         mSyntheticDevices.push_back(makeTestDevice<TestDriverV1_0>());
 #endif
+        mVndkVersion = ::android::base::GetIntProperty("ro.vndk.version", __ANDROID_API_FUTURE__);
 
         // Get all the devices and device names.
         mStandardDevicesFeatureLevel = __ANDROID_API_FUTURE__;
@@ -225,6 +226,11 @@
                 featureLevel <= __ANDROID_API_Q__) {
                 return true;
             }
+            // Skip the following operations when the VNDK version is earlier than R.
+            if (mVndkVersion < __ANDROID_API_R__ &&
+                op.type == TestOperationType::HEATMAP_MAX_KEYPOINT) {
+                return true;
+            }
         }
         return false;
     }
@@ -433,6 +439,7 @@
     // A vector of {name, output_results}.
     std::vector<std::pair<std::string, std::vector<TestBuffer>>> mResults;
 
+    static int mVndkVersion;
     static int64_t mStandardDevicesFeatureLevel;  // minimum across all devices
 #ifndef NNTEST_CTS
     static std::vector<std::shared_ptr<Device>> mStandardDevices;
@@ -445,6 +452,7 @@
 bool RandomGraphTest::mDetectMemoryLeak = false;
 std::map<std::string, ANeuralNetworksDevice*> RandomGraphTest::mDevices;
 
+int RandomGraphTest::mVndkVersion = __ANDROID_API_FUTURE__;
 int64_t RandomGraphTest::mStandardDevicesFeatureLevel;
 #ifndef NNTEST_CTS
 std::vector<std::shared_ptr<Device>> RandomGraphTest::mStandardDevices;
