diff --git a/framework/api/current.txt b/framework/api/current.txt
index a755234..9a77a3c 100644
--- a/framework/api/current.txt
+++ b/framework/api/current.txt
@@ -206,7 +206,6 @@
   }
 
   public final class IpPrefix implements android.os.Parcelable {
-    ctor public IpPrefix(@NonNull java.net.InetAddress, @IntRange(from=0, to=128) int);
     method public boolean contains(@NonNull java.net.InetAddress);
     method public int describeContents();
     method @NonNull public java.net.InetAddress getAddress();
@@ -440,15 +439,11 @@
     method @NonNull public android.net.IpPrefix getDestination();
     method @Nullable public java.net.InetAddress getGateway();
     method @Nullable public String getInterface();
-    method public int getType();
     method public boolean hasGateway();
     method public boolean isDefaultRoute();
     method public boolean matches(java.net.InetAddress);
     method public void writeToParcel(android.os.Parcel, int);
     field @NonNull public static final android.os.Parcelable.Creator<android.net.RouteInfo> CREATOR;
-    field public static final int RTN_THROW = 9; // 0x9
-    field public static final int RTN_UNICAST = 1; // 0x1
-    field public static final int RTN_UNREACHABLE = 7; // 0x7
   }
 
   public abstract class SocketKeepalive implements java.lang.AutoCloseable {
diff --git a/framework/api/system-current.txt b/framework/api/system-current.txt
index 5337b38..cfab872 100644
--- a/framework/api/system-current.txt
+++ b/framework/api/system-current.txt
@@ -131,6 +131,7 @@
   }
 
   public final class IpPrefix implements android.os.Parcelable {
+    ctor public IpPrefix(@NonNull java.net.InetAddress, @IntRange(from=0, to=128) int);
     ctor public IpPrefix(@NonNull String);
   }
 
@@ -431,6 +432,10 @@
     ctor public RouteInfo(@Nullable android.net.IpPrefix, @Nullable java.net.InetAddress, @Nullable String, int);
     ctor public RouteInfo(@Nullable android.net.IpPrefix, @Nullable java.net.InetAddress, @Nullable String, int, int);
     method public int getMtu();
+    method public int getType();
+    field public static final int RTN_THROW = 9; // 0x9
+    field public static final int RTN_UNICAST = 1; // 0x1
+    field public static final int RTN_UNREACHABLE = 7; // 0x7
   }
 
   public abstract class SocketKeepalive implements java.lang.AutoCloseable {
diff --git a/framework/src/android/net/IpPrefix.java b/framework/src/android/net/IpPrefix.java
index c26a0b5..bf4481a 100644
--- a/framework/src/android/net/IpPrefix.java
+++ b/framework/src/android/net/IpPrefix.java
@@ -87,7 +87,9 @@
      *
      * @param address the IP address. Must be non-null.
      * @param prefixLength the prefix length. Must be &gt;= 0 and &lt;= (32 or 128) (IPv4 or IPv6).
+     * @hide
      */
+    @SystemApi
     public IpPrefix(@NonNull InetAddress address, @IntRange(from = 0, to = 128) int prefixLength) {
         // We don't reuse the (byte[], int) constructor because it calls clone() on the byte array,
         // which is unnecessary because getAddress() already returns a clone.
diff --git a/framework/src/android/net/RouteInfo.java b/framework/src/android/net/RouteInfo.java
index df5f151..fad3144 100644
--- a/framework/src/android/net/RouteInfo.java
+++ b/framework/src/android/net/RouteInfo.java
@@ -86,26 +86,16 @@
     private final String mInterface;
 
 
-    /**
-     * Unicast route.
-     *
-     * Indicates that destination is reachable directly or via gateway.
-     **/
+    /** Unicast route. @hide */
+    @SystemApi
     public static final int RTN_UNICAST = 1;
 
-    /**
-     * Unreachable route.
-     *
-     * Indicates that destination is unreachable.
-     **/
+    /** Unreachable route. @hide */
+    @SystemApi
     public static final int RTN_UNREACHABLE = 7;
 
-    /**
-     * Throw route.
-     *
-     * Indicates that routing information about this destination is not in this table.
-     * Routing lookup should continue in another table.
-     **/
+    /** Throw route. @hide */
+    @SystemApi
     public static final int RTN_THROW = 9;
 
     /**
@@ -401,7 +391,10 @@
      * Retrieves the type of this route.
      *
      * @return The type of this route; one of the {@code RTN_xxx} constants defined in this class.
+     *
+     * @hide
      */
+    @SystemApi
     @RouteType
     public int getType() {
         return mType;
diff --git a/tests/common/java/android/net/IpPrefixTest.java b/tests/common/java/android/net/IpPrefixTest.java
index f61c8c3..50ecb42 100644
--- a/tests/common/java/android/net/IpPrefixTest.java
+++ b/tests/common/java/android/net/IpPrefixTest.java
@@ -122,9 +122,6 @@
 
         p = new IpPrefix("[2001:db8::123]/64");
         assertEquals("2001:db8::/64", p.toString());
-
-        p = new IpPrefix(InetAddresses.parseNumericAddress("::128"), 64);
-        assertEquals("::/64", p.toString());
     }
 
     @Test
diff --git a/tests/common/java/android/net/RouteInfoTest.java b/tests/common/java/android/net/RouteInfoTest.java
index b69b045..71689f9 100644
--- a/tests/common/java/android/net/RouteInfoTest.java
+++ b/tests/common/java/android/net/RouteInfoTest.java
@@ -16,8 +16,6 @@
 
 package android.net;
 
-import static android.net.RouteInfo.RTN_THROW;
-import static android.net.RouteInfo.RTN_UNICAST;
 import static android.net.RouteInfo.RTN_UNREACHABLE;
 
 import static com.android.testutils.MiscAsserts.assertEqualBothWays;
@@ -331,16 +329,6 @@
     }
 
     @Test
-    public void testRouteTypes() {
-        RouteInfo r = new RouteInfo(new IpPrefix(Inet6Address.ANY, 0), RTN_UNREACHABLE);
-        assertEquals(RTN_UNREACHABLE, r.getType());
-        r = new RouteInfo(new IpPrefix(Inet6Address.ANY, 0), RTN_UNICAST);
-        assertEquals(RTN_UNICAST, r.getType());
-        r = new RouteInfo(new IpPrefix(Inet6Address.ANY, 0), RTN_THROW);
-        assertEquals(RTN_THROW, r.getType());
-    }
-
-    @Test
     public void testTruncation() {
       LinkAddress l;
       RouteInfo r;
diff --git a/tests/cts/hostside/Android.bp b/tests/cts/hostside/Android.bp
index b684068..f72a458 100644
--- a/tests/cts/hostside/Android.bp
+++ b/tests/cts/hostside/Android.bp
@@ -25,9 +25,6 @@
         "cts-tradefed",
         "tradefed",
     ],
-    static_libs: [
-        "modules-utils-build-testing",
-    ],
     // Tag this module as a cts test artifact
     test_suites: [
         "cts",
diff --git a/tests/cts/hostside/app/Android.bp b/tests/cts/hostside/app/Android.bp
index 12e7d33..63572c3 100644
--- a/tests/cts/hostside/app/Android.bp
+++ b/tests/cts/hostside/app/Android.bp
@@ -18,8 +18,12 @@
     default_applicable_licenses: ["Android-Apache-2.0"],
 }
 
-java_defaults {
-    name: "CtsHostsideNetworkTestsAppDefaults",
+android_test_helper_app {
+    name: "CtsHostsideNetworkTestsApp",
+    defaults: [
+        "cts_support_defaults",
+        "framework-connectivity-test-defaults",
+    ],
     platform_apis: true,
     static_libs: [
         "CtsHostsideNetworkTestsAidl",
@@ -44,28 +48,3 @@
         "sts",
     ],
 }
-
-android_test_helper_app {
-    name: "CtsHostsideNetworkTestsApp",
-    defaults: [
-        "cts_support_defaults",
-        "framework-connectivity-test-defaults",
-        "CtsHostsideNetworkTestsAppDefaults",
-    ],
-    static_libs: [
-        "NetworkStackApiStableShims",
-    ],
-}
-
-android_test_helper_app {
-    name: "CtsHostsideNetworkTestsAppNext",
-    defaults: [
-        "cts_support_defaults",
-        "framework-connectivity-test-defaults",
-        "CtsHostsideNetworkTestsAppDefaults",
-        "ConnectivityNextEnableDefaults",
-    ],
-    static_libs: [
-        "NetworkStackApiCurrentShims",
-    ],
-}
diff --git a/tests/cts/hostside/app/src/com/android/cts/net/hostside/MyVpnService.java b/tests/cts/hostside/app/src/com/android/cts/net/hostside/MyVpnService.java
index 7adc71a..7d3d4fc 100644
--- a/tests/cts/hostside/app/src/com/android/cts/net/hostside/MyVpnService.java
+++ b/tests/cts/hostside/app/src/com/android/cts/net/hostside/MyVpnService.java
@@ -17,27 +17,18 @@
 package com.android.cts.net.hostside;
 
 import android.content.Intent;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.net.IpPrefix;
 import android.net.Network;
-import android.net.NetworkUtils;
 import android.net.ProxyInfo;
 import android.net.VpnService;
 import android.os.ParcelFileDescriptor;
+import android.content.pm.PackageManager.NameNotFoundException;
 import android.text.TextUtils;
 import android.util.Log;
-import android.util.Pair;
-
-import com.android.modules.utils.build.SdkLevel;
-import com.android.networkstack.apishim.VpnServiceBuilderShimImpl;
-import com.android.networkstack.apishim.common.UnsupportedApiLevelException;
-import com.android.networkstack.apishim.common.VpnServiceBuilderShim;
 
 import java.io.IOException;
 import java.net.InetAddress;
+import java.net.UnknownHostException;
 import java.util.ArrayList;
-import java.util.function.BiConsumer;
-import java.util.function.Consumer;
 
 public class MyVpnService extends VpnService {
 
@@ -64,62 +55,39 @@
         return START_NOT_STICKY;
     }
 
-    private String parseIpAndMaskListArgument(String packageName, Intent intent, String argName,
-            BiConsumer<InetAddress, Integer> consumer) {
-        final String addresses = intent.getStringExtra(packageName + "." + argName);
-
-        if (TextUtils.isEmpty(addresses)) {
-            return null;
-        }
-
-        final String[] addressesArray = addresses.split(",");
-        for (String address : addressesArray) {
-            final Pair<InetAddress, Integer> ipAndMask = NetworkUtils.parseIpAndMask(address);
-            consumer.accept(ipAndMask.first, ipAndMask.second);
-        }
-
-        return addresses;
-    }
-
-    private String parseIpPrefixListArgument(String packageName, Intent intent, String argName,
-            Consumer<IpPrefix> consumer) {
-        return parseIpAndMaskListArgument(packageName, intent, argName,
-                (inetAddress, prefixLength) -> consumer.accept(
-                        new IpPrefix(inetAddress, prefixLength)));
-    }
-
     private void start(String packageName, Intent intent) {
         Builder builder = new Builder();
-        VpnServiceBuilderShim vpnServiceBuilderShim = VpnServiceBuilderShimImpl.newInstance();
 
-        final String addresses = parseIpAndMaskListArgument(packageName, intent, "addresses",
-                builder::addAddress);
-
-        String addedRoutes;
-        if (SdkLevel.isAtLeastT() && intent.getBooleanExtra(packageName + ".addRoutesByIpPrefix",
-                false)) {
-            addedRoutes = parseIpPrefixListArgument(packageName, intent, "routes", (prefix) -> {
+        String addresses = intent.getStringExtra(packageName + ".addresses");
+        if (addresses != null) {
+            String[] addressArray = addresses.split(",");
+            for (int i = 0; i < addressArray.length; i++) {
+                String[] prefixAndMask = addressArray[i].split("/");
                 try {
-                    vpnServiceBuilderShim.addRoute(builder, prefix);
-                } catch (UnsupportedApiLevelException e) {
-                    throw new RuntimeException(e);
+                    InetAddress address = InetAddress.getByName(prefixAndMask[0]);
+                    int prefixLength = Integer.parseInt(prefixAndMask[1]);
+                    builder.addAddress(address, prefixLength);
+                } catch (UnknownHostException|NumberFormatException|
+                         ArrayIndexOutOfBoundsException e) {
+                    continue;
                 }
-            });
-        } else {
-            addedRoutes = parseIpAndMaskListArgument(packageName, intent, "routes",
-                    builder::addRoute);
+            }
         }
 
-        String excludedRoutes = null;
-        if (SdkLevel.isAtLeastT()) {
-            excludedRoutes = parseIpPrefixListArgument(packageName, intent, "excludedRoutes",
-                    (prefix) -> {
-                        try {
-                            vpnServiceBuilderShim.excludeRoute(builder, prefix);
-                        } catch (UnsupportedApiLevelException e) {
-                            throw new RuntimeException(e);
-                        }
-                    });
+        String routes = intent.getStringExtra(packageName + ".routes");
+        if (routes != null) {
+            String[] routeArray = routes.split(",");
+            for (int i = 0; i < routeArray.length; i++) {
+                String[] prefixAndMask = routeArray[i].split("/");
+                try {
+                    InetAddress address = InetAddress.getByName(prefixAndMask[0]);
+                    int prefixLength = Integer.parseInt(prefixAndMask[1]);
+                    builder.addRoute(address, prefixLength);
+                } catch (UnknownHostException|NumberFormatException|
+                         ArrayIndexOutOfBoundsException e) {
+                    continue;
+                }
+            }
         }
 
         String allowed = intent.getStringExtra(packageName + ".allowedapplications");
@@ -172,8 +140,7 @@
 
         Log.i(TAG, "Establishing VPN,"
                 + " addresses=" + addresses
-                + " addedRoutes=" + addedRoutes
-                + " excludedRoutes=" + excludedRoutes
+                + " routes=" + routes
                 + " allowedApplications=" + allowed
                 + " disallowedApplications=" + disallowed);
 
diff --git a/tests/cts/hostside/app/src/com/android/cts/net/hostside/VpnTest.java b/tests/cts/hostside/app/src/com/android/cts/net/hostside/VpnTest.java
index 1841200..3abc4fb 100755
--- a/tests/cts/hostside/app/src/com/android/cts/net/hostside/VpnTest.java
+++ b/tests/cts/hostside/app/src/com/android/cts/net/hostside/VpnTest.java
@@ -268,32 +268,9 @@
 
     // TODO: Consider replacing arguments with a Builder.
     private void startVpn(
-            String[] addresses, String[] routes, String allowedApplications,
-            String disallowedApplications, @Nullable ProxyInfo proxyInfo,
-            @Nullable ArrayList<Network> underlyingNetworks, boolean isAlwaysMetered)
-            throws Exception {
-        startVpn(addresses, routes, new String[0] /* excludedRoutes */, allowedApplications,
-                disallowedApplications, proxyInfo, underlyingNetworks, isAlwaysMetered);
-    }
-
-    private void startVpn(
-            String[] addresses, String[] routes, String[] excludedRoutes,
-            String allowedApplications, String disallowedApplications,
-            @Nullable ProxyInfo proxyInfo,
-            @Nullable ArrayList<Network> underlyingNetworks, boolean isAlwaysMetered)
-            throws Exception {
-        startVpn(addresses, routes, new String[0] /* excludedRoutes */, allowedApplications,
-                disallowedApplications, proxyInfo, underlyingNetworks, isAlwaysMetered,
-                false /* addRoutesByIpPrefix */);
-    }
-
-    private void startVpn(
-            String[] addresses, String[] routes, String[] excludedRoutes,
-            String allowedApplications, String disallowedApplications,
-            @Nullable ProxyInfo proxyInfo,
-            @Nullable ArrayList<Network> underlyingNetworks, boolean isAlwaysMetered,
-            boolean addRoutesByIpPrefix)
-            throws Exception {
+        String[] addresses, String[] routes, String allowedApplications,
+        String disallowedApplications, @Nullable ProxyInfo proxyInfo,
+        @Nullable ArrayList<Network> underlyingNetworks, boolean isAlwaysMetered) throws Exception {
         prepareVpn();
 
         // Register a callback so we will be notified when our VPN comes up.
@@ -318,14 +295,12 @@
                 .putExtra(mPackageName + ".cmd", "connect")
                 .putExtra(mPackageName + ".addresses", TextUtils.join(",", addresses))
                 .putExtra(mPackageName + ".routes", TextUtils.join(",", routes))
-                .putExtra(mPackageName + ".excludedRoutes", TextUtils.join(",", excludedRoutes))
                 .putExtra(mPackageName + ".allowedapplications", allowedApplications)
                 .putExtra(mPackageName + ".disallowedapplications", disallowedApplications)
                 .putExtra(mPackageName + ".httpProxy", proxyInfo)
                 .putParcelableArrayListExtra(
                     mPackageName + ".underlyingNetworks", underlyingNetworks)
-                .putExtra(mPackageName + ".isAlwaysMetered", isAlwaysMetered)
-                .putExtra(mPackageName + ".addRoutesByIpPrefix", addRoutesByIpPrefix);
+                .putExtra(mPackageName + ".isAlwaysMetered", isAlwaysMetered);
 
         mActivity.startService(intent);
         synchronized (mLock) {
@@ -547,12 +522,6 @@
     }
 
     private void checkUdpEcho(String to, String expectedFrom) throws IOException {
-        checkUdpEcho(to, expectedFrom, expectedFrom != null);
-    }
-
-    private void checkUdpEcho(String to, String expectedFrom,
-            boolean expectConnectionOwnerIsVisible)
-            throws IOException {
         DatagramSocket s;
         InetAddress address = InetAddress.getByName(to);
         if (address instanceof Inet6Address) {  // http://b/18094870
@@ -576,7 +545,7 @@
         try {
             if (expectedFrom != null) {
                 s.send(p);
-                checkConnectionOwnerUidUdp(s, expectConnectionOwnerIsVisible);
+                checkConnectionOwnerUidUdp(s, true);
                 s.receive(p);
                 MoreAsserts.assertEquals(data, p.getData());
             } else {
@@ -585,7 +554,7 @@
                     s.receive(p);
                     fail("Received unexpected reply");
                 } catch (IOException expected) {
-                    checkConnectionOwnerUidUdp(s, expectConnectionOwnerIsVisible);
+                    checkConnectionOwnerUidUdp(s, false);
                 }
             }
         } finally {
@@ -593,38 +562,19 @@
         }
     }
 
-    private void checkTrafficOnVpn(String destination) throws Exception {
-        final InetAddress address = InetAddress.getByName(destination);
-
-        if (address instanceof Inet6Address) {
-            checkUdpEcho(destination, "2001:db8:1:2::ffe");
-            checkTcpReflection(destination, "2001:db8:1:2::ffe");
-            checkPing(destination);
-        } else {
-            checkUdpEcho(destination, "192.0.2.2");
-            checkTcpReflection(destination, "192.0.2.2");
-        }
-
-    }
-
-    private void checkNoTrafficOnVpn(String destination) throws IOException {
-        checkUdpEcho(destination, null);
-        checkTcpReflection(destination, null);
-    }
-
     private void checkTrafficOnVpn() throws Exception {
-        checkTrafficOnVpn("192.0.2.251");
-        checkTrafficOnVpn("2001:db8:dead:beef::f00");
+        checkUdpEcho("192.0.2.251", "192.0.2.2");
+        checkUdpEcho("2001:db8:dead:beef::f00", "2001:db8:1:2::ffe");
+        checkPing("2001:db8:dead:beef::f00");
+        checkTcpReflection("192.0.2.252", "192.0.2.2");
+        checkTcpReflection("2001:db8:dead:beef::f00", "2001:db8:1:2::ffe");
     }
 
     private void checkNoTrafficOnVpn() throws Exception {
-        checkNoTrafficOnVpn("192.0.2.251");
-        checkNoTrafficOnVpn("2001:db8:dead:beef::f00");
-    }
-
-    private void checkTrafficBypassesVpn(String destination) throws Exception {
-        checkUdpEcho(destination, null, true /* expectVpnOwnedConnection */);
-        checkTcpReflection(destination, null);
+        checkUdpEcho("192.0.2.251", null);
+        checkUdpEcho("2001:db8:dead:beef::f00", null);
+        checkTcpReflection("192.0.2.252", null);
+        checkTcpReflection("2001:db8:dead:beef::f00", null);
     }
 
     private FileDescriptor openSocketFd(String host, int port, int timeoutMs) throws Exception {
@@ -908,9 +858,9 @@
         }
         Log.i(TAG, "Append shell app to disallowedApps: " + disallowedApps);
         startVpn(new String[] {"192.0.2.2/32", "2001:db8:1:2::ffe/128"},
-                new String[] {"192.0.2.0/24", "2001:db8::/32"},
-                "", disallowedApps, null, null /* underlyingNetworks */,
-                false /* isAlwaysMetered */);
+                 new String[] {"192.0.2.0/24", "2001:db8::/32"},
+                 "", disallowedApps, null, null /* underlyingNetworks */,
+                 false /* isAlwaysMetered */);
 
         assertSocketStillOpen(localFd, TEST_HOST);
         assertSocketStillOpen(remoteFd, TEST_HOST);
@@ -923,74 +873,6 @@
     }
 
     @Test
-    public void testExcludedRoutes() throws Exception {
-        if (!supportedHardware()) return;
-        if (!SdkLevel.isAtLeastT()) return;
-
-        // Shell app must not be put in here or it would kill the ADB-over-network use case
-        String allowedApps = mRemoteSocketFactoryClient.getPackageName() + "," + mPackageName;
-        startVpn(new String[]{"192.0.2.2/32", "2001:db8:1:2::ffe/128"} /* addresses */,
-                new String[]{"0.0.0.0/0", "::/0"} /* routes */,
-                new String[]{"192.0.2.0/24", "2001:db8::/32"} /* excludedRoutes */,
-                allowedApps, "" /* disallowedApplications */, null /* proxyInfo */,
-                null /* underlyingNetworks */, false /* isAlwaysMetered */);
-
-        // Excluded routes should bypass VPN.
-        checkTrafficBypassesVpn("192.0.2.1");
-        checkTrafficBypassesVpn("2001:db8:dead:beef::f00");
-        // Other routes should go through VPN, since default routes are included.
-        checkTrafficOnVpn("198.51.100.1");
-        checkTrafficOnVpn("2002:db8::1");
-    }
-
-    @Test
-    public void testIncludedRoutes() throws Exception {
-        if (!supportedHardware()) return;
-
-        // Shell app must not be put in here or it would kill the ADB-over-network use case
-        String allowedApps = mRemoteSocketFactoryClient.getPackageName() + "," + mPackageName;
-        startVpn(new String[]{"192.0.2.2/32", "2001:db8:1:2::ffe/128"} /* addresses */,
-                new String[]{"192.0.2.0/24", "2001:db8::/32"} /* routes */,
-                allowedApps, "" /* disallowedApplications */, null /* proxyInfo */,
-                null /* underlyingNetworks */, false /* isAlwaysMetered */);
-
-        // Included routes should go through VPN.
-        checkTrafficOnVpn("192.0.2.1");
-        checkTrafficOnVpn("2001:db8:dead:beef::f00");
-        // Other routes should bypass VPN, since default routes are not included.
-        checkTrafficBypassesVpn("198.51.100.1");
-        checkTrafficBypassesVpn("2002:db8::1");
-    }
-
-    @Test
-    public void testInterleavedRoutes() throws Exception {
-        if (!supportedHardware()) return;
-        if (!SdkLevel.isAtLeastT()) return;
-
-        // Shell app must not be put in here or it would kill the ADB-over-network use case
-        String allowedApps = mRemoteSocketFactoryClient.getPackageName() + "," + mPackageName;
-        startVpn(new String[]{"192.0.2.2/32", "2001:db8:1:2::ffe/128"} /* addresses */,
-                new String[]{"0.0.0.0/0", "192.0.2.0/32", "::/0", "2001:db8::/128"} /* routes */,
-                new String[]{"192.0.2.0/24", "2001:db8::/32"} /* excludedRoutes */,
-                allowedApps, "" /* disallowedApplications */, null /* proxyInfo */,
-                null /* underlyingNetworks */, false /* isAlwaysMetered */,
-                true /* addRoutesByIpPrefix */);
-
-        // Excluded routes should bypass VPN.
-        checkTrafficBypassesVpn("192.0.2.1");
-        checkTrafficBypassesVpn("2001:db8:dead:beef::f00");
-
-        // Included routes inside excluded routes should go through VPN, since the longest common
-        // prefix precedes.
-        checkTrafficOnVpn("192.0.2.0");
-        checkTrafficOnVpn("2001:db8::");
-
-        // Other routes should go through VPN, since default routes are included.
-        checkTrafficOnVpn("198.51.100.1");
-        checkTrafficOnVpn("2002:db8::1");
-    }
-
-    @Test
     public void testGetConnectionOwnerUidSecurity() throws Exception {
         if (!supportedHardware()) return;
 
diff --git a/tests/cts/hostside/src/com/android/cts/net/HostsideNetworkTestCase.java b/tests/cts/hostside/src/com/android/cts/net/HostsideNetworkTestCase.java
index cc07fd1..89c79d3 100644
--- a/tests/cts/hostside/src/com/android/cts/net/HostsideNetworkTestCase.java
+++ b/tests/cts/hostside/src/com/android/cts/net/HostsideNetworkTestCase.java
@@ -20,7 +20,6 @@
 import com.android.ddmlib.Log;
 import com.android.ddmlib.testrunner.RemoteAndroidTestRunner;
 import com.android.ddmlib.testrunner.TestResult.TestStatus;
-import com.android.modules.utils.build.testing.DeviceSdkLevel;
 import com.android.tradefed.build.IBuildInfo;
 import com.android.tradefed.device.DeviceNotAvailableException;
 import com.android.tradefed.result.CollectingTestListener;
@@ -43,7 +42,6 @@
     protected static final String TAG = "HostsideNetworkTests";
     protected static final String TEST_PKG = "com.android.cts.net.hostside";
     protected static final String TEST_APK = "CtsHostsideNetworkTestsApp.apk";
-    protected static final String TEST_APK_NEXT = "CtsHostsideNetworkTestsAppNext.apk";
     protected static final String TEST_APP2_PKG = "com.android.cts.net.hostside.app2";
     protected static final String TEST_APP2_APK = "CtsHostsideNetworkTestsApp2.apk";
 
@@ -67,12 +65,8 @@
         assertNotNull(mAbi);
         assertNotNull(mCtsBuild);
 
-        DeviceSdkLevel deviceSdkLevel = new DeviceSdkLevel(getDevice());
-        String testApk = deviceSdkLevel.isDeviceAtLeastT() ? TEST_APK_NEXT
-                : TEST_APK;
-
         uninstallPackage(TEST_PKG, false);
-        installPackage(testApk);
+        installPackage(TEST_APK);
     }
 
     @Override
diff --git a/tests/cts/hostside/src/com/android/cts/net/HostsideVpnTests.java b/tests/cts/hostside/src/com/android/cts/net/HostsideVpnTests.java
index 24840d2..49b5f9d 100644
--- a/tests/cts/hostside/src/com/android/cts/net/HostsideVpnTests.java
+++ b/tests/cts/hostside/src/com/android/cts/net/HostsideVpnTests.java
@@ -100,16 +100,4 @@
         runDeviceTests(TEST_PKG, TEST_PKG + ".VpnTest",
                 "testDownloadWithDownloadManagerDisallowed");
     }
-
-    public void testExcludedRoutes() throws Exception {
-        runDeviceTests(TEST_PKG, TEST_PKG + ".VpnTest", "testExcludedRoutes");
-    }
-
-    public void testIncludedRoutes() throws Exception {
-        runDeviceTests(TEST_PKG, TEST_PKG + ".VpnTest", "testIncludedRoutes");
-    }
-
-    public void testInterleavedRoutes() throws Exception {
-        runDeviceTests(TEST_PKG, TEST_PKG + ".VpnTest", "testInterleavedRoutes");
-    }
 }
