diff --git a/Android.bp b/Android.bp
index bf348a4..95c5d50 100644
--- a/Android.bp
+++ b/Android.bp
@@ -191,7 +191,6 @@
     visibility: [
         "//packages/modules/Connectivity/Tethering",
         "//packages/modules/Connectivity/tests/cts/net",
-        "//packages/modules/Connectivity/tests/cts/hostside/app",
     ],
 }
 
@@ -212,7 +211,6 @@
     visibility: [
         "//packages/modules/Connectivity/Tethering",
         "//packages/modules/Connectivity/tests/cts/net",
-        "//packages/modules/Connectivity/tests/cts/hostside/app",
     ],
 }
 
diff --git a/apishim/29/com/android/networkstack/apishim/api29/VpnServiceBuilderShimImpl.java b/apishim/29/com/android/networkstack/apishim/api29/VpnServiceBuilderShimImpl.java
deleted file mode 100644
index 0f221bf..0000000
--- a/apishim/29/com/android/networkstack/apishim/api29/VpnServiceBuilderShimImpl.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2021 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.networkstack.apishim.api29;
-
-import android.net.IpPrefix;
-import android.net.VpnService;
-
-import com.android.networkstack.apishim.common.UnsupportedApiLevelException;
-import com.android.networkstack.apishim.common.VpnServiceBuilderShim;
-
-/**
- * Implementation of {@link com.android.networkstack.apishim.common.VpnServiceBuilderShim}.
- */
-public class VpnServiceBuilderShimImpl implements VpnServiceBuilderShim {
-
-    /**
-     * Get a new instance of {@link VpnServiceBuilderShim}.
-     */
-    public static VpnServiceBuilderShim newInstance() {
-        return new VpnServiceBuilderShimImpl();
-    }
-
-    @Override
-    public VpnService.Builder excludeRoute(VpnService.Builder builder, IpPrefix prefix)
-            throws UnsupportedApiLevelException {
-        throw new UnsupportedApiLevelException("Only supported after API level 31.");
-    }
-
-    @Override
-    public VpnService.Builder addRoute(VpnService.Builder builder, IpPrefix prefix)
-            throws UnsupportedApiLevelException {
-        throw new UnsupportedApiLevelException("Only supported after API level 31.");
-    }
-}
diff --git a/apishim/31/com/android/networkstack/apishim/api31/VpnServiceBuilderShimImpl.java b/apishim/31/com/android/networkstack/apishim/api31/VpnServiceBuilderShimImpl.java
deleted file mode 100644
index 8b82935..0000000
--- a/apishim/31/com/android/networkstack/apishim/api31/VpnServiceBuilderShimImpl.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2021 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.networkstack.apishim.api31;
-
-/**
- * Implementation of {@link com.android.networkstack.apishim.common.VpnServiceBuilderShim}.
- */
-public class VpnServiceBuilderShimImpl extends
-        com.android.networkstack.apishim.api29.VpnServiceBuilderShimImpl {
-}
diff --git a/apishim/32/com/android/networkstack/apishim/VpnServiceBuilderShimImpl.java b/apishim/32/com/android/networkstack/apishim/VpnServiceBuilderShimImpl.java
deleted file mode 100644
index e869909..0000000
--- a/apishim/32/com/android/networkstack/apishim/VpnServiceBuilderShimImpl.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2021 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.networkstack.apishim;
-
-import android.net.IpPrefix;
-import android.net.VpnService;
-import android.os.Build;
-
-import androidx.annotation.RequiresApi;
-
-import com.android.modules.utils.build.SdkLevel;
-import com.android.networkstack.apishim.common.UnsupportedApiLevelException;
-import com.android.networkstack.apishim.common.VpnServiceBuilderShim;
-
-/**
- * Implementation of {@link com.android.networkstack.apishim.common.VpnServiceBuilderShim}.
- */
-@RequiresApi(32) // Change to Build.VERSION_CODES.T when it is available, and adding T methods
-public class VpnServiceBuilderShimImpl extends
-        com.android.networkstack.apishim.api31.VpnServiceBuilderShimImpl {
-
-    /**
-     * Get a new instance of {@link VpnServiceBuilderShim}.
-     */
-    @RequiresApi(Build.VERSION_CODES.Q)
-    public static VpnServiceBuilderShim newInstance() {
-        if (SdkLevel.isAtLeastT()) {
-            return new VpnServiceBuilderShimImpl();
-        } else {
-            return new com.android.networkstack.apishim.api31.VpnServiceBuilderShimImpl();
-        }
-    }
-
-    @Override
-    public VpnService.Builder excludeRoute(VpnService.Builder builder, IpPrefix prefix)
-            throws UnsupportedApiLevelException {
-        return builder.excludeRoute(prefix);
-    }
-
-    @Override
-    public VpnService.Builder addRoute(VpnService.Builder builder, IpPrefix prefix)
-            throws UnsupportedApiLevelException {
-        return builder.addRoute(prefix);
-    }
-}
diff --git a/apishim/common/com/android/networkstack/apishim/common/VpnServiceBuilderShim.java b/apishim/common/com/android/networkstack/apishim/common/VpnServiceBuilderShim.java
deleted file mode 100644
index fbfcf6c..0000000
--- a/apishim/common/com/android/networkstack/apishim/common/VpnServiceBuilderShim.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2021 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.networkstack.apishim.common;
-
-import android.net.IpPrefix;
-import android.net.VpnService;
-
-/** Shim for {@link VpnService.Builder}. */
-public interface VpnServiceBuilderShim {
-    /**
-     * @see VpnService.Builder#excludeRoute(IpPrefix)
-     */
-    VpnService.Builder excludeRoute(VpnService.Builder builder, IpPrefix prefix)
-            throws UnsupportedApiLevelException;
-
-    /**
-     * @see VpnService.Builder#addRoute(IpPrefix)
-     */
-    VpnService.Builder addRoute(VpnService.Builder builder, IpPrefix prefix)
-            throws UnsupportedApiLevelException;
-}
