diff --git a/Android.bp b/Android.bp
index 235be50..3bee8ab 100644
--- a/Android.bp
+++ b/Android.bp
@@ -15,6 +15,7 @@
         "-Wall",
         "-Werror",
     ],
+    group_static_libs: true,
 }
 
 cc_defaults {
diff --git a/neuralnetworks/V1_0/target/AndroidTest.xml b/neuralnetworks/V1_0/target/AndroidTest.xml
new file mode 100644
index 0000000..1ef1af9
--- /dev/null
+++ b/neuralnetworks/V1_0/target/AndroidTest.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<configuration description="Config for VTS VtsHalNeuralnetworksV1_0Target test cases">
+    <option name="config-descriptor:metadata" key="plan" value="vts-hal" />
+    <option name="config-descriptor:metadata" key="plan" value="vts10" />
+    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+        <option name="abort-on-push-failure" value="false"/>
+        <option name="push-group" value="HalHidlTargetTest.push"/>
+        <option name="push" value="DATA/nativetest/VtsHalNeuralnetworksV1_0TargetTest/VtsHalNeuralnetworksV1_0TargetTest->/data/nativetest/VtsHalNeuralnetworksV1_0TargetTest/VtsHalNeuralnetworksV1_0TargetTest"/>
+        <option name="push" value="DATA/nativetest64/VtsHalNeuralnetworksV1_0TargetTest/VtsHalNeuralnetworksV1_0TargetTest->/data/nativetest64/VtsHalNeuralnetworksV1_0TargetTest/VtsHalNeuralnetworksV1_0TargetTest"/>
+    </target_preparer>
+    <test class="com.android.tradefed.testtype.GTest">
+        <option name="module-name" value="VtsHalNeuralnetworksV1_0TargetTest"/>
+        <option name="native-test-timeout" value="30m"/>
+    </test>
+</configuration>
diff --git a/neuralnetworks/V1_1/target/AndroidTest.xml b/neuralnetworks/V1_1/target/AndroidTest.xml
new file mode 100644
index 0000000..a8c825d
--- /dev/null
+++ b/neuralnetworks/V1_1/target/AndroidTest.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<configuration description="Config for VTS VtsHalNeuralnetworksV1_1Target test cases">
+    <option name="config-descriptor:metadata" key="plan" value="vts-hal" />
+    <option name="config-descriptor:metadata" key="plan" value="vts10" />
+    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+        <option name="abort-on-push-failure" value="false"/>
+        <option name="push-group" value="HalHidlTargetTest.push"/>
+        <option name="push" value="DATA/nativetest/VtsHalNeuralnetworksV1_1TargetTest/VtsHalNeuralnetworksV1_1TargetTest->/data/nativetest/VtsHalNeuralnetworksV1_1TargetTest/VtsHalNeuralnetworksV1_1TargetTest"/>
+        <option name="push" value="DATA/nativetest64/VtsHalNeuralnetworksV1_1TargetTest/VtsHalNeuralnetworksV1_1TargetTest->/data/nativetest64/VtsHalNeuralnetworksV1_1TargetTest/VtsHalNeuralnetworksV1_1TargetTest"/>
+    </target_preparer>
+    <test class="com.android.tradefed.testtype.GTest">
+        <option name="module-name" value="VtsHalNeuralnetworksV1_1TargetTest"/>
+        <option name="native-test-timeout" value="1h"/>
+    </test>
+</configuration>
diff --git a/neuralnetworks/V1_2/benchmark/java/AndroidTest.xml b/neuralnetworks/V1_2/benchmark/java/AndroidTest.xml
index 2e80c83..681bed8 100644
--- a/neuralnetworks/V1_2/benchmark/java/AndroidTest.xml
+++ b/neuralnetworks/V1_2/benchmark/java/AndroidTest.xml
@@ -27,6 +27,5 @@
         <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" />
         <option name="package" value="com.android.nn.benchmark.vts.v1_2" />
         <option name="test-timeout" value="2h"/>
-        <option name="shell-timeout" value="1h" />
     </test>
 </configuration>
diff --git a/neuralnetworks/V1_2/benchmark/java/OWNERS b/neuralnetworks/V1_2/benchmark/java/OWNERS
deleted file mode 100644
index a48301d..0000000
--- a/neuralnetworks/V1_2/benchmark/java/OWNERS
+++ /dev/null
@@ -1,4 +0,0 @@
-# Bug component: 195575
-jeanluc@google.com
-miaowang@google.com
-pszczepaniak@google.com
diff --git a/neuralnetworks/V1_2/target/AndroidTest.xml b/neuralnetworks/V1_2/target/AndroidTest.xml
new file mode 100644
index 0000000..f24ef59
--- /dev/null
+++ b/neuralnetworks/V1_2/target/AndroidTest.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2019 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<configuration description="Config for VTS VtsHalNeuralnetworksV1_2Target test cases">
+    <option name="config-descriptor:metadata" key="plan" value="vts-hal" />
+    <option name="config-descriptor:metadata" key="plan" value="vts10" />
+    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+        <option name="abort-on-push-failure" value="false"/>
+        <option name="push-group" value="HalHidlTargetTest.push"/>
+        <option name="push" value="DATA/nativetest/VtsHalNeuralnetworksV1_2TargetTest/VtsHalNeuralnetworksV1_2TargetTest->/data/nativetest/VtsHalNeuralnetworksV1_2TargetTest/VtsHalNeuralnetworksV1_2TargetTest"/>
+        <option name="push" value="DATA/nativetest64/VtsHalNeuralnetworksV1_2TargetTest/VtsHalNeuralnetworksV1_2TargetTest->/data/nativetest64/VtsHalNeuralnetworksV1_2TargetTest/VtsHalNeuralnetworksV1_2TargetTest"/>
+    </target_preparer>
+    <test class="com.android.tradefed.testtype.GTest">
+        <option name="module-name" value="VtsHalNeuralnetworksV1_2TargetTest"/>
+        <option name="native-test-timeout" value="10h"/>
+    </test>
+</configuration>
diff --git a/neuralnetworks/V1_3/benchmark/java/AndroidTest.xml b/neuralnetworks/V1_3/benchmark/java/AndroidTest.xml
index 501a2c1..e558005 100644
--- a/neuralnetworks/V1_3/benchmark/java/AndroidTest.xml
+++ b/neuralnetworks/V1_3/benchmark/java/AndroidTest.xml
@@ -27,6 +27,5 @@
         <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" />
         <option name="package" value="com.android.nn.benchmark.vts.v1_3" />
         <option name="test-timeout" value="2h"/>
-        <option name="shell-timeout" value="1h" />
     </test>
 </configuration>
diff --git a/neuralnetworks/V1_3/benchmark/java/OWNERS b/neuralnetworks/V1_3/benchmark/java/OWNERS
deleted file mode 100644
index a48301d..0000000
--- a/neuralnetworks/V1_3/benchmark/java/OWNERS
+++ /dev/null
@@ -1,4 +0,0 @@
-# Bug component: 195575
-jeanluc@google.com
-miaowang@google.com
-pszczepaniak@google.com
diff --git a/neuralnetworks/V1_3/target/AndroidTest.xml b/neuralnetworks/V1_3/target/AndroidTest.xml
new file mode 100644
index 0000000..1cfccd7
--- /dev/null
+++ b/neuralnetworks/V1_3/target/AndroidTest.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2019 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<configuration description="Config for VTS VtsHalNeuralnetworksV1_3Target test cases">
+    <option name="config-descriptor:metadata" key="plan" value="vts-hal" />
+    <option name="config-descriptor:metadata" key="plan" value="vts10" />
+    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+        <option name="abort-on-push-failure" value="false"/>
+        <option name="push-group" value="HalHidlTargetTest.push"/>
+        <option name="push" value="DATA/nativetest/VtsHalNeuralnetworksV1_3TargetTest/VtsHalNeuralnetworksV1_3TargetTest->/data/nativetest/VtsHalNeuralnetworksV1_3TargetTest/VtsHalNeuralnetworksV1_3TargetTest"/>
+        <option name="push" value="DATA/nativetest64/VtsHalNeuralnetworksV1_3TargetTest/VtsHalNeuralnetworksV1_3TargetTest->/data/nativetest64/VtsHalNeuralnetworksV1_3TargetTest/VtsHalNeuralnetworksV1_3TargetTest"/>
+    </target_preparer>
+    <test class="com.android.tradefed.testtype.GTest">
+        <option name="module-name" value="VtsHalNeuralnetworksV1_3TargetTest"/>
+        <option name="native-test-timeout" value="10h"/>
+    </test>
+</configuration>
diff --git a/treble/OWNERS b/treble/OWNERS
index f32487d..2c6bc15 100644
--- a/treble/OWNERS
+++ b/treble/OWNERS
@@ -1,4 +1,5 @@
 elsk@google.com
+hridya@google.com
 malchev@google.com
 smoreland@google.com
 trong@google.com
diff --git a/treble/platform_version/OWNERS b/treble/platform_version/OWNERS
deleted file mode 100644
index d5b3a2f..0000000
--- a/treble/platform_version/OWNERS
+++ /dev/null
@@ -1,3 +0,0 @@
-# Bug component: 151862
-smoreland@google.com
-elsk@google.com
diff --git a/treble/vintf/Android.bp b/treble/vintf/Android.bp
index 51ce8e6..55824a9 100644
--- a/treble/vintf/Android.bp
+++ b/treble/vintf/Android.bp
@@ -44,6 +44,7 @@
         "libvintf",
         "libvts_vintf_test_common",
     ],
+    group_static_libs: true,
     srcs: [
         "VtsTrebleVintfTestBase.cpp",
         "utils.cpp",
diff --git a/treble/vintf/DeviceManifestTest.cpp b/treble/vintf/DeviceManifestTest.cpp
index 9a655fe..48c2e05 100644
--- a/treble/vintf/DeviceManifestTest.cpp
+++ b/treble/vintf/DeviceManifestTest.cpp
@@ -45,24 +45,21 @@
 }
 
 TEST_F(DeviceManifestTest, KernelFcmVersion) {
-  const char* kHeader =
-      "Kernel FCM version (specified in VINTF manifests with <kernel "
-      "target-level=\"[0-9]+\"/> if not by /proc/version) ";
   Level shipping_fcm_version = VintfObject::GetDeviceHalManifest()->level();
 
   if (shipping_fcm_version == Level::UNSPECIFIED ||
       shipping_fcm_version < Level::R) {
-    GTEST_SKIP() << kHeader << " not enforced on target FCM version "
+    GTEST_SKIP() << "Kernel FCM version not enforced on target FCM version "
                  << shipping_fcm_version;
   }
   std::string error;
   Level kernel_fcm_version = VintfObject::GetInstance()->getKernelLevel(&error);
   ASSERT_NE(Level::UNSPECIFIED, kernel_fcm_version)
-      << kHeader << " must be specified for target FCM version '"
+      << "Kernel FCM version must be specified for target FCM version '"
       << shipping_fcm_version << "': " << error;
   ASSERT_GE(kernel_fcm_version, shipping_fcm_version)
-      << kHeader << " is " << kernel_fcm_version
-      << ", but it must be greater or equal to target FCM version "
+      << "Kernel FCM version " << kernel_fcm_version
+      << " must be greater or equal to target FCM version "
       << shipping_fcm_version;
 }
 
@@ -79,13 +76,13 @@
 // Tests that devices launching R support mapper@4.0.  Go devices are exempt
 // from this requirement, so we use this test to enforce instead of the
 // compatibility matrix.
-TEST_F(DeviceManifestTest, GraphicsMapperHalVersionCompatibility) {
+TEST_F(DeviceManifestTest, GrallocHalVersionCompatibility) {
   Level shipping_fcm_version = VintfObject::GetDeviceHalManifest()->level();
   bool is_go_device =
       android::base::GetBoolProperty("ro.config.low_ram", false);
   if (shipping_fcm_version == Level::UNSPECIFIED ||
       shipping_fcm_version < Level::R || is_go_device) {
-    GTEST_SKIP() << "Graphics mapper 4 is only required on launching R devices";
+    GTEST_SKIP() << "Gralloc4 is only required on launching R devices";
   }
 
   ASSERT_TRUE(vendor_manifest_->hasHidlInstance(
@@ -96,81 +93,6 @@
       "android.hardware.graphics.mapper", {2, 1}, "IMapper", "default"));
 }
 
-// Devices with Shipping FCM version 3~6 must have either the HIDL or the
-// AIDL health HAL. Because compatibility matrices cannot express OR condition
-// between <hal>'s, add a test here.
-//
-// There's no need to enforce minimum HAL versions because
-// NoDeprecatedHalsOnManifest already checks it.
-TEST_F(DeviceManifestTest, HealthHal) {
-  bool has_hidl = vendor_manifest_->hasHidlInstance(
-      "android.hardware.health", {2, 0}, "IHealth", "default");
-  bool has_aidl = vendor_manifest_->hasAidlInstance("android.hardware.health",
-                                                    1, "IHealth", "default");
-  ASSERT_TRUE(has_hidl || has_aidl)
-      << "Device must have either health HIDL HAL or AIDL HAL";
-}
-
-// Devices with Shipping FCM version 7 must have either the HIDL or the
-// AIDL composer HAL. Because compatibility matrices cannot express OR condition
-// between <hal>'s, add a test here.
-//
-// There's no need to enforce minimum HAL versions because
-// NoDeprecatedHalsOnManifest already checks it.
-TEST_F(DeviceManifestTest, ComposerHal) {
-  bool has_hidl = vendor_manifest_->hasHidlInstance(
-      "android.hardware.graphics.composer", {2, 1}, "IComposer", "default");
-  bool has_aidl = vendor_manifest_->hasAidlInstance(
-      "android.hardware.graphics.composer3", 1, "IComposer", "default");
-  ASSERT_TRUE(has_hidl || has_aidl)
-      << "Device must have either composer HIDL HAL or AIDL HAL";
-}
-
-// Devices with Shipping FCM version 7 must have either the HIDL or the
-// AIDL gralloc HAL. Because compatibility matrices cannot express OR condition
-// between <hal>'s, add a test here.
-//
-// There's no need to enforce minimum HAL versions because
-// NoDeprecatedHalsOnManifest already checks it.
-TEST_F(DeviceManifestTest, GrallocHal) {
-  bool has_hidl = false;
-  for (size_t hidl_major = 2; hidl_major <= 4; hidl_major++)
-    has_hidl = has_hidl || vendor_manifest_->hasHidlInstance(
-                               "android.hardware.graphics.allocator",
-                               {hidl_major, 0}, "IAllocator", "default");
-
-  bool has_aidl = vendor_manifest_->hasAidlInstance(
-      "android.hardware.graphics.allocator", 1, "IAllocator", "default");
-
-  ASSERT_TRUE(has_hidl || has_aidl)
-      << "Device must have either graphics allocator HIDL HAL or AIDL HAL";
-}
-
-// Tests that devices launching T support allocator@4.0 or AIDL.
-// Go devices are exempt
-// from this requirement, so we use this test to enforce instead of the
-// compatibility matrix.
-TEST_F(DeviceManifestTest, GrallocHalVersionCompatibility) {
-  Level shipping_fcm_version = VintfObject::GetDeviceHalManifest()->level();
-  bool is_go_device =
-      android::base::GetBoolProperty("ro.config.low_ram", false);
-  if (shipping_fcm_version == Level::UNSPECIFIED ||
-      shipping_fcm_version < Level::T || is_go_device) {
-    GTEST_SKIP() << "Gralloc 4.0/AIDL is only required on launching T devices";
-  }
-
-  bool has_aidl = vendor_manifest_->hasAidlInstance(
-      "android.hardware.graphics.allocator", 1, "IAllocator", "default");
-  bool has_hidl_4_0 = vendor_manifest_->hasHidlInstance(
-      "android.hardware.graphics.allocator", {4, 0}, "IAllocator", "default");
-  ASSERT_TRUE(has_aidl || has_hidl_4_0);
-
-  ASSERT_FALSE(vendor_manifest_->hasHidlInstance(
-      "android.hardware.graphics.allocator", {2, 0}, "IAllocator", "default"));
-  ASSERT_FALSE(vendor_manifest_->hasHidlInstance(
-      "android.hardware.graphics.allocator", {3, 0}, "IAllocator", "default"));
-}
-
 static std::vector<HalManifestPtr> GetTestManifests() {
   return {
       VintfObject::GetDeviceHalManifest(),
diff --git a/treble/vintf/OWNERS b/treble/vintf/OWNERS
deleted file mode 100644
index 8d7d421..0000000
--- a/treble/vintf/OWNERS
+++ /dev/null
@@ -1,3 +0,0 @@
-# Bug component: 192869
-smoreland@google.com
-elsk@google.com
diff --git a/treble/vintf/SingleManifestTest.cpp b/treble/vintf/SingleManifestTest.cpp
index 3a9d552..c1a3a54 100644
--- a/treble/vintf/SingleManifestTest.cpp
+++ b/treble/vintf/SingleManifestTest.cpp
@@ -17,7 +17,6 @@
 #include "SingleManifestTest.h"
 
 #include <aidl/metadata.h>
-#include <android-base/hex.h>
 #include <android-base/properties.h>
 #include <android-base/strings.h>
 #include <android/apex/ApexInfo.h>
@@ -134,7 +133,7 @@
       return nullptr;
     }
 
-    auto hal_service = VtsTrebleVintfTestBase::GetHidlService(
+    auto hal_service = VtsTrebleVintfTestBase::GetHalService(
         interface.string(), fq_instance.getInstance(), Transport::PASSTHROUGH);
 
     if (hal_service != nullptr) {
@@ -272,8 +271,7 @@
       std::inserter(passthrough_not_allowed, passthrough_not_allowed.begin()));
 
   EXPECT_TRUE(passthrough_not_allowed.empty())
-      << "The following HALs can't be passthrough under Treble rules (or they "
-         "can't be retrieved): ["
+      << "The following HALs can't be passthrough under Treble rules: ["
       << InstancesToString(passthrough_not_allowed) << "].";
 }
 
@@ -314,12 +312,12 @@
 
         const FQName lowest_name =
             fq_name.withVersion(fq_name.getPackageMajorVersion(), 0);
-        hal_service = GetHidlService(lowest_name, instance_name, transport);
+        hal_service = GetHalService(lowest_name, instance_name, transport);
         EXPECT_TRUE(
             canCastInterface(hal_service.get(), fq_name.string().c_str()))
             << fq_name.string() << " is not on the device.";
       } else {
-        hal_service = GetHidlService(fq_name, instance_name, transport);
+        hal_service = GetHalService(fq_name, instance_name, transport);
       }
 
       if (hal_service == nullptr) {
@@ -364,10 +362,10 @@
       EXPECT_TRUE(fqInstanceName.setTo(name));
 
       auto service =
-          GetHidlService(toFQNameString(fqInstanceName.getPackage(),
-                                        fqInstanceName.getVersion(),
-                                        fqInstanceName.getInterface()),
-                         fqInstanceName.getInstance(), Transport::HWBINDER);
+          GetHalService(toFQNameString(fqInstanceName.getPackage(),
+                                       fqInstanceName.getVersion(),
+                                       fqInstanceName.getInterface()),
+                        fqInstanceName.getInstance(), Transport::HWBINDER);
       ASSERT_NE(service, nullptr);
 
       Partition partition = GetPartition(service);
@@ -405,7 +403,7 @@
     const FQName lowest_name =
         fq_name.withVersion(fq_name.getPackageMajorVersion(), 0);
     sp<IBase> hal_service =
-        GetHidlService(lowest_name, instance_name, transport);
+        GetHalService(lowest_name, instance_name, transport);
     if (hal_service == nullptr) {
       ADD_FAILURE() << "Could not get service " << fq_name.string() << "/"
                     << instance_name;
@@ -445,7 +443,7 @@
       return;
     }
 
-    sp<IBase> hal_service = GetHidlService(fq_name, instance_name, transport);
+    sp<IBase> hal_service = GetHalService(fq_name, instance_name, transport);
 
     if (hal_service == nullptr) {
       FailureHalMissing(fq_name, instance_name);
@@ -457,9 +455,10 @@
     vector<string> hash_chain{};
     hal_service->getHashChain(
         [&hash_chain](const hidl_vec<HashCharArray> &chain) {
-          for (const HashCharArray &hash : chain) {
-            hash_chain.push_back(
-                android::base::HexString(hash.data(), hash.size()));
+          for (const HashCharArray &hash_array : chain) {
+            vector<uint8_t> hash{hash_array.data(),
+                                 hash_array.data() + hash_array.size()};
+            hash_chain.push_back(Hash::hexString(hash));
           }
         });
 
@@ -472,8 +471,7 @@
         return;
       }
       string hash = hash_chain[i];
-      if (hash == android::base::HexString(Hash::kEmptyHash.data(),
-                                           Hash::kEmptyHash.size())) {
+      if (hash == Hash::hexString(Hash::kEmptyHash)) {
         FailureHashMissing(fq_iface_name);
       } else if (IsAndroidPlatformInterface(fq_iface_name)) {
         set<string> released_hashes = ReleasedHashes(fq_iface_name);
@@ -488,15 +486,14 @@
   ForEachHidlHalInstance(GetParam(), is_released);
 }
 
-static std::optional<AidlInterfaceMetadata> metadataForInterface(
-    const std::string &name) {
+static std::vector<std::string> hashesForInterface(const std::string &name) {
   for (const auto &module : AidlInterfaceMetadata::all()) {
     if (std::find(module.types.begin(), module.types.end(), name) !=
         module.types.end()) {
-      return module;
+      return module.hashes;
     }
   }
-  return std::nullopt;
+  return {};
 }
 
 // TODO(b/150155678): using standard code to do this
@@ -576,13 +573,9 @@
     return;
   }
 
-  ADD_FAILURE()
-      << "For " << name << ", manifest (" << shipping_fcm_version
-      << ") declares version " << declared_version
-      << ", but the actual version is " << actual_version << std::endl
-      << "Either the VINTF manifest <hal> entry needs to be updated with a "
-         "version tag for the actual version, or the implementation should be "
-         "changed to use the declared version";
+  ADD_FAILURE() << "For " << name << ", manifest (" << shipping_fcm_version
+                << ") declares version " << declared_version
+                << ", but the actual version is " << actual_version;
 }
 
 // An AIDL HAL with VINTF stability can only be registered if it is in the
@@ -596,9 +589,8 @@
                                           &updatable_via_apex) {
     const std::string type = package + "." + interface;
     const std::string name = type + "/" + instance;
-
-    sp<IBinder> binder = GetAidlService(name);
-
+    sp<IBinder> binder =
+        defaultServiceManager()->waitForService(String16(name.c_str()));
     ASSERT_NE(binder, nullptr) << "Failed to get " << name;
 
     // allow upgrade if updatable HAL's declared APEX is actually updated.
@@ -607,30 +599,17 @@
     CheckAidlVersionMatchesDeclared(binder, name, version, allow_upgrade);
 
     const std::string hash = getInterfaceHash(binder);
-    const std::optional<AidlInterfaceMetadata> metadata =
-        metadataForInterface(type);
+    const std::vector<std::string> hashes = hashesForInterface(type);
 
     const bool is_aosp = base::StartsWith(package, "android.");
-    ASSERT_TRUE(!is_aosp || metadata)
-        << "AOSP interface must have metadata: " << package;
-
     const bool is_release =
         base::GetProperty("ro.build.version.codename", "") == "REL";
-
-    const bool is_existing =
-        metadata
-            ? std::find(metadata->versions.begin(), metadata->versions.end(),
-                        version) != metadata->versions.end()
-            : false;
-
-    const std::vector<std::string> hashes =
-        metadata ? metadata->hashes : std::vector<std::string>();
     const bool found_hash =
         std::find(hashes.begin(), hashes.end(), hash) != hashes.end();
 
     if (is_aosp) {
       if (!found_hash) {
-        if (is_release || is_existing) {
+        if (is_release) {
           ADD_FAILURE() << "Interface " << name
                         << " has an unrecognized hash: '" << hash
                         << "'. The following hashes are known:\n"
diff --git a/treble/vintf/TEST_MAPPING b/treble/vintf/TEST_MAPPING
index aa61969..53804f9 100644
--- a/treble/vintf/TEST_MAPPING
+++ b/treble/vintf/TEST_MAPPING
@@ -6,13 +6,5 @@
     {
       "name": "vts_treble_vintf_vendor_test"
     }
-  ],
-  "hwasan-postsubmit": [
-    {
-      "name": "vts_treble_vintf_framework_test"
-    },
-    {
-      "name": "vts_treble_vintf_vendor_test"
-    }
   ]
 }
diff --git a/treble/vintf/VtsTrebleVintfTestBase.cpp b/treble/vintf/VtsTrebleVintfTestBase.cpp
index 68f9687..ddc358f 100644
--- a/treble/vintf/VtsTrebleVintfTestBase.cpp
+++ b/treble/vintf/VtsTrebleVintfTestBase.cpp
@@ -16,22 +16,6 @@
 
 #include "VtsTrebleVintfTestBase.h"
 
-#include <android-base/logging.h>
-#include <android-base/properties.h>
-#include <android-base/strings.h>
-#include <android/hidl/manager/1.0/IServiceManager.h>
-#include <binder/IServiceManager.h>
-#include <gtest/gtest.h>
-#include <hidl-hash/Hash.h>
-#include <hidl-util/FQName.h>
-#include <hidl-util/FqInstance.h>
-#include <hidl/HidlTransportUtils.h>
-#include <hidl/ServiceManagement.h>
-#include <procpartition/procpartition.h>
-#include <vintf/HalManifest.h>
-#include <vintf/VintfObject.h>
-#include <vintf/parse_string.h>
-
 #include <chrono>
 #include <condition_variable>
 #include <functional>
@@ -45,6 +29,20 @@
 #include <thread>
 #include <vector>
 
+#include <android-base/logging.h>
+#include <android-base/strings.h>
+#include <android/hidl/manager/1.0/IServiceManager.h>
+#include <gtest/gtest.h>
+#include <hidl-hash/Hash.h>
+#include <hidl-util/FQName.h>
+#include <hidl-util/FqInstance.h>
+#include <hidl/HidlTransportUtils.h>
+#include <hidl/ServiceManagement.h>
+#include <procpartition/procpartition.h>
+#include <vintf/HalManifest.h>
+#include <vintf/VintfObject.h>
+#include <vintf/parse_string.h>
+
 #include "SingleManifestTest.h"
 #include "utils.h"
 
@@ -100,8 +98,7 @@
 
     auto future_result =
         std::async([&]() { fn(fq_name, instance_name, transport); });
-    int timeout_multiplier = base::GetIntProperty("ro.hw_timeout_multiplier", 1);
-    auto timeout = timeout_multiplier * std::chrono::seconds(1);
+    auto timeout = std::chrono::seconds(1);
     std::future_status status = future_result.wait_for(timeout);
     if (status != std::future_status::ready) {
       cout << "Timed out on: " << fq_name.string() << " " << instance_name
@@ -127,8 +124,7 @@
     auto future_result = std::async([&]() {
       fn(package, version, interface, instance, updatable_via_apex);
     });
-    int timeout_multiplier = base::GetIntProperty("ro.hw_timeout_multiplier", 1);
-    auto timeout = timeout_multiplier * std::chrono::seconds(1);
+    auto timeout = std::chrono::seconds(1);
     std::future_status status = future_result.wait_for(timeout);
     if (status != std::future_status::ready) {
       cout << "Timed out on: " << package << "." << interface << "/" << instance
@@ -138,17 +134,15 @@
   });
 }
 
-sp<IBase> VtsTrebleVintfTestBase::GetHidlService(const FQName &fq_name,
-                                                 const string &instance_name,
-                                                 Transport transport,
-                                                 bool log) {
-  return GetHidlService(fq_name.string(), instance_name, transport, log);
+sp<IBase> VtsTrebleVintfTestBase::GetHalService(const FQName &fq_name,
+                                                const string &instance_name,
+                                                Transport transport, bool log) {
+  return GetHalService(fq_name.string(), instance_name, transport, log);
 }
 
-sp<IBase> VtsTrebleVintfTestBase::GetHidlService(const string &fq_name,
-                                                 const string &instance_name,
-                                                 Transport transport,
-                                                 bool log) {
+sp<IBase> VtsTrebleVintfTestBase::GetHalService(const string &fq_name,
+                                                const string &instance_name,
+                                                Transport transport, bool log) {
   using android::hardware::details::getRawServiceInternal;
 
   if (log) {
@@ -165,8 +159,7 @@
     return getRawServiceInternal(fq_name, instance_name, true /* retry */,
                                  false /* getStub */);
   });
-  int timeout_multiplier = base::GetIntProperty("ro.hw_timeout_multiplier", 1);
-  auto max_time = timeout_multiplier * std::chrono::seconds(1);
+  auto max_time = std::chrono::seconds(1);
 
   std::future<sp<IBase>> future = task.get_future();
   std::thread(std::move(task)).detach();
@@ -183,21 +176,6 @@
   return base;
 }
 
-sp<IBinder> VtsTrebleVintfTestBase::GetAidlService(const string &name) {
-  auto task = std::packaged_task<sp<IBinder>()>([name]() {
-    return defaultServiceManager()->waitForService(String16(name.c_str()));
-  });
-
-  int timeout_multiplier = base::GetIntProperty("ro.hw_timeout_multiplier", 1);
-  // TODO(b/205347235)
-  auto max_time = timeout_multiplier * std::chrono::seconds(2);
-  auto future = task.get_future();
-  std::thread(std::move(task)).detach();
-  auto status = future.wait_for(max_time);
-
-  return status == std::future_status::ready ? future.get() : nullptr;
-}
-
 vector<string> VtsTrebleVintfTestBase::GetInstanceNames(
     const sp<IServiceManager> &manager, const FQName &fq_name) {
   vector<string> ret;
diff --git a/treble/vintf/VtsTrebleVintfTestBase.h b/treble/vintf/VtsTrebleVintfTestBase.h
index 64d3ff9..779e898 100644
--- a/treble/vintf/VtsTrebleVintfTestBase.h
+++ b/treble/vintf/VtsTrebleVintfTestBase.h
@@ -17,14 +17,13 @@
 #ifndef VTS_TREBLE_VINTF_TEST_BASE_H_
 #define VTS_TREBLE_VINTF_TEST_BASE_H_
 
-#include <android/hidl/manager/1.0/IServiceManager.h>
-#include <binder/IBinder.h>
-#include <gtest/gtest.h>
-#include <vintf/VintfObject.h>
-
 #include <string>
 #include <vector>
 
+#include <android/hidl/manager/1.0/IServiceManager.h>
+#include <gtest/gtest.h>
+#include <vintf/VintfObject.h>
+
 #include "utils.h"
 
 namespace android {
@@ -46,13 +45,12 @@
   static void ForEachHidlHalInstance(const HalManifestPtr &, HidlVerifyFn);
 
   // Retrieves an existing HAL service.
-  static sp<IBase> GetHidlService(const string &fq_name,
-                                  const string &instance_name, Transport,
-                                  bool log = true);
-  static sp<IBase> GetHidlService(const FQName &fq_name,
-                                  const string &instance_name, Transport,
-                                  bool log = true);
-  static sp<IBinder> GetAidlService(const std::string &name);
+  static sp<IBase> GetHalService(const string &fq_name,
+                                 const string &instance_name, Transport,
+                                 bool log = true);
+  static sp<IBase> GetHalService(const FQName &fq_name,
+                                 const string &instance_name, Transport,
+                                 bool log = true);
 
   static vector<string> GetInstanceNames(const sp<IServiceManager> &manager,
                                          const FQName &fq_name);
diff --git a/treble/vintf/libvts_vintf_test_common/common.cpp b/treble/vintf/libvts_vintf_test_common/common.cpp
index 0791ac4..1813aaf 100644
--- a/treble/vintf/libvts_vintf_test_common/common.cpp
+++ b/treble/vintf/libvts_vintf_test_common/common.cpp
@@ -46,8 +46,6 @@
         {29, Level::Q},
         {30, Level::R},
         {31, Level::S},
-        {32, Level::S},  // subject to change, placeholder value
-        {33, Level::T},  // subject to change, placeholder value
     }};
 
 android::base::Result<void> TestTargetFcmVersion(Level shipping_fcm_version,
diff --git a/treble/vintf/utils.cpp b/treble/vintf/utils.cpp
index 2ec51ed..9c8e48e 100644
--- a/treble/vintf/utils.cpp
+++ b/treble/vintf/utils.cpp
@@ -50,8 +50,31 @@
     "android.hidl.memory",
 };
 
+const uint64_t kCurrentApiLevel = 10000;
+
+uint64_t ReadApiLevelProps(vector<string> api_level_props) {
+  uint64_t api_level = kCurrentApiLevel;
+  for (const auto &api_level_prop : api_level_props) {
+    api_level = GetUintProperty<uint64_t>(api_level_prop, kCurrentApiLevel);
+    if (api_level != kCurrentApiLevel) {
+      break;
+    }
+  }
+  return api_level;
+}
+
 uint64_t GetBoardApiLevel() {
-  return GetUintProperty<uint64_t>("ro.vendor.api_level", 0);
+  uint64_t device_api_level =
+      ReadApiLevelProps({"ro.product.first_api_level", "ro.build.version.sdk"});
+  uint64_t board_api_level =
+      ReadApiLevelProps({"ro.board.api_level", "ro.board.first_api_level",
+                         "ro.vendor.build.version.sdk"});
+  uint64_t api_level =
+      board_api_level < device_api_level ? board_api_level : device_api_level;
+  if (api_level == kCurrentApiLevel) {
+    return 0;
+  }
+  return api_level;
 }
 
 // For a given interface returns package root if known. Returns empty string
diff --git a/treble/vintf/utils.h b/treble/vintf/utils.h
index 814c19d..1f434e3 100644
--- a/treble/vintf/utils.h
+++ b/treble/vintf/utils.h
@@ -84,17 +84,16 @@
 // HALs that are allowed to be passthrough under Treble rules.
 extern const set<string> kPassthroughHals;
 
-// Read ro.vendor.api_level, that shows the minimum of the following two
-// values:
-// * First non-empty value for the board api level from the following
+// Read the first non-empty value for the board api level from the following
 // properties:
-// -- ro.board.api_level
-// -- ro.board.first_api_level
-// -- ro.vendor.build.version.sdk
-// * First non-empty value for the device api level from the following
-// properties:
-// -- ro.product.first_api_level
-// -- ro.build.version.sdk
+// - ro.board.api_level
+// - ro.board.first_api_level
+// - ro.vendor.build.version.sdk
+// Also read the first non-empty value for the device api level from the
+// following properties:
+// - ro.product.first_api_level
+// - ro.build.version.sdk
+// Use the minimum of the two values.
 uint64_t GetBoardApiLevel();
 
 // For a given interface returns package root if known. Returns empty string
diff --git a/usb/usb/aidl/host/Android.bp b/usb/usb/aidl/host/Android.bp
deleted file mode 100644
index 02ebf29..0000000
--- a/usb/usb/aidl/host/Android.bp
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (C) 2022 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-
-package {
-    default_applicable_licenses: ["Android-Apache-2.0"],
-}
-
-java_test_host {
-    name: "VtsAidlUsbHostTest",
-    libs: [
-        "compatibility-host-util",
-        "tradefed",
-    ],
-
-    static_libs: [
-        "platform-test-annotations-host",
-    ],
-
-    srcs: ["src/**/*.java"],
-    test_suites: [
-        "general-tests",
-        "vts",
-    ],
-}
diff --git a/usb/usb/aidl/host/AndroidTest.xml b/usb/usb/aidl/host/AndroidTest.xml
deleted file mode 100644
index c6de571..0000000
--- a/usb/usb/aidl/host/AndroidTest.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2022 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<configuration description="Config for VtsAidlUsbHost test cases">
-    <option name="config-descriptor:metadata" key="plan" value="vts-staging-default" />
-    <option name="config-descriptor:metadata" key="plan" value="vts-hal-host" />
-    <option name="config-descriptor:metadata" key="plan" value="vts-hal" />
-    <target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer" />
-
-    <test class="com.android.compatibility.common.tradefed.testtype.JarHostTest">
-        <option name="jar" value="VtsAidlUsbHostTest.jar" />
-    </test>
-</configuration>
diff --git a/usb/usb/aidl/host/src/com/android/usb/vts/VtsAidlUsbHostTest.java b/usb/usb/aidl/host/src/com/android/usb/vts/VtsAidlUsbHostTest.java
deleted file mode 100644
index d62ff6c..0000000
--- a/usb/usb/aidl/host/src/com/android/usb/vts/VtsAidlUsbHostTest.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.tests.usbport;
-
-import com.android.tradefed.device.DeviceNotAvailableException;
-import com.android.tradefed.device.ITestDevice;
-import com.android.tradefed.log.LogUtil.CLog;
-import com.android.tradefed.invoker.TestInformation;
-import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
-import com.android.tradefed.testtype.junit4.BaseHostJUnit4Test;
-import com.android.tradefed.testtype.junit4.BeforeClassWithInfo;
-import com.google.common.base.Strings;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import org.junit.Assert;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-@RunWith(DeviceJUnit4ClassRunner.class)
-public final class VtsAidlUsbHostTest extends BaseHostJUnit4Test {
-    public static final String TAG = VtsAidlUsbHostTest.class.getSimpleName();
-
-    private static final String HAL_SERVICE = "android.hardware.usb-service";
-    private static final long CONN_TIMEOUT = 5000;
-
-    private static boolean mHasService;
-
-    private ITestDevice mDevice;
-    private AtomicBoolean mReconnected = new AtomicBoolean(false);
-
-    @Before
-    public void setUp() {
-        mDevice = getDevice();
-    }
-
-    @BeforeClassWithInfo
-    public static void beforeClassWithDevice(TestInformation testInfo) throws Exception {
-        String serviceFound =
-                testInfo.getDevice()
-                        .executeShellCommand(String.format("ps -A | grep \"%s\"", HAL_SERVICE))
-                        .trim();
-        mHasService = !Strings.isNullOrEmpty(serviceFound);
-    }
-
-    @Test
-    public void testResetUsbPort() throws Exception {
-        Assume.assumeTrue(
-                String.format("The device doesn't have service %s", HAL_SERVICE), mHasService);
-        Assert.assertNotNull("Target device does not exist", mDevice);
-
-        String portResult, content;
-        String deviceSerialNumber = mDevice.getSerialNumber();
-        HashSet<String> noSupportCases =
-                    new HashSet<>(Arrays.asList("No USB ports",
-                        "There is no available reset USB port"));
-
-        CLog.i("testResetUsbPort on device [%s]", deviceSerialNumber);
-
-        new Thread(new Runnable() {
-            public void run() {
-                try {
-                    mDevice.waitForDeviceNotAvailable(CONN_TIMEOUT);
-                    Thread.sleep(500);
-                    mDevice.waitForDeviceAvailable(CONN_TIMEOUT);
-                    mReconnected.set(true);
-                } catch (DeviceNotAvailableException dnae) {
-                    CLog.e("Device is not available");
-                } catch (InterruptedException ie) {
-                    CLog.w("Thread.sleep interrupted");
-                }
-            }
-        }).start();
-
-        Thread.sleep(100);
-        String cmd = "svc usb resetUsbPort";
-        CLog.i("Invoke shell command [" + cmd + "]");
-        long startTime = System.currentTimeMillis();
-        portResult = mDevice.executeShellCommand(cmd);
-        content = portResult.trim();
-
-        if (portResult != null && (noSupportCases.contains(content))) {
-            CLog.i("portResult: %s", portResult);
-            return;
-        }
-
-        Thread.sleep(100);
-        while (!mReconnected.get() && System.currentTimeMillis() - startTime < CONN_TIMEOUT) {
-            Thread.sleep(300);
-        }
-
-        Assert.assertTrue("usb not reconnect", mReconnected.get());
-    }
-}
