diff --git a/tests/cts/net/Android.mk b/tests/cts/net/Android.mk
index bf51890..c139d1c 100644
--- a/tests/cts/net/Android.mk
+++ b/tests/cts/net/Android.mk
@@ -32,5 +32,4 @@
 # uncomment when dalvik.annotation.Test* are removed or part of SDK
 #LOCAL_SDK_VERSION := current
 
-include $(BUILD_PACKAGE)
-
+include $(BUILD_CTS_PACKAGE)
diff --git a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java
index cd80be2..99d2e43 100644
--- a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java
+++ b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java
@@ -16,11 +16,6 @@
 
 package android.net.cts;
 
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestTargetNew;
-import dalvik.annotation.TestTargets;
-import dalvik.annotation.ToBeFixed;
 
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -40,7 +35,6 @@
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
-@TestTargetClass(ConnectivityManager.class)
 public class ConnectivityManagerTest extends AndroidTestCase {
 
     private static final String TAG = ConnectivityManagerTest.class.getSimpleName();
@@ -66,11 +60,6 @@
         mPackageManager = getContext().getPackageManager();
     }
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        method = "getNetworkInfo",
-        args = {int.class}
-    )
     public void testGetNetworkInfo() {
         assertTrue(mCm.getAllNetworkInfo().length >= MIN_NUM_NETWORK_TYPES);
         NetworkInfo ni = mCm.getNetworkInfo(TYPE_WIFI);
@@ -95,18 +84,6 @@
         assertNull(ni);
     }
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "isNetworkTypeValid",
-            args = {int.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getAllNetworkInfo",
-            args = {}
-        )
-    })
     public void testIsNetworkTypeValid() {
 
         NetworkInfo[] ni = mCm.getAllNetworkInfo();
@@ -117,29 +94,11 @@
         assertFalse(ConnectivityManager.isNetworkTypeValid(-1));
     }
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        notes = "Test getAllNetworkInfo().",
-        method = "getAllNetworkInfo",
-        args = {}
-    )
     public void testGetAllNetworkInfo() {
         NetworkInfo[] ni = mCm.getAllNetworkInfo();
         assertTrue(ni.length >= MIN_NUM_NETWORK_TYPES);
     }
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "startUsingNetworkFeature",
-            args = {int.class, java.lang.String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "stopUsingNetworkFeature",
-            args = {int.class, java.lang.String.class}
-        )
-    })
     public void testStartUsingNetworkFeature() {
 
         final String invalidateFeature = "invalidateFeature";
@@ -166,11 +125,6 @@
         assertEquals(failureCode, mCm.stopUsingNetworkFeature(TYPE_WIFI, mmsFeature));
     }
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        method = "requestRouteToHost",
-        args = {int.class, int.class}
-    )
     public void testRequestRouteToHost() {
         Set<Integer> exceptionFreeTypes = new HashSet<Integer>();
         exceptionFreeTypes.add(ConnectivityManager.TYPE_BLUETOOTH);
@@ -192,12 +146,6 @@
         assertFalse(mCm.requestRouteToHost(-1, HOST_ADDRESS));
     }
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        method = "getActiveNetworkInfo",
-        args = {}
-    )
-    @ToBeFixed(bug="1695243", explanation="No Javadoc")
     public void testGetActiveNetworkInfo() {
         NetworkInfo ni = mCm.getActiveNetworkInfo();
 
@@ -206,11 +154,6 @@
         }
     }
 
-    @TestTargetNew(
-        level = TestLevel.SUFFICIENT,
-        method = "getBackgroundDataSetting",
-        args = {}
-    )
     public void testTest() {
         mCm.getBackgroundDataSetting();
     }
diff --git a/tests/cts/net/src/android/net/cts/CredentialsTest.java b/tests/cts/net/src/android/net/cts/CredentialsTest.java
index 6cf8c23..91c3621 100644
--- a/tests/cts/net/src/android/net/cts/CredentialsTest.java
+++ b/tests/cts/net/src/android/net/cts/CredentialsTest.java
@@ -18,36 +18,9 @@
 
 import android.net.Credentials;
 import android.test.AndroidTestCase;
-import dalvik.annotation.TestTargets;
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetNew;
-import dalvik.annotation.TestTargetClass;
 
-@TestTargetClass(android.net.Credentials.class)
 public class CredentialsTest extends AndroidTestCase {
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "Credentials",
-            args = {int.class, int.class, int.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getGid",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getPid",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getUid",
-            args = {}
-        )
-    })
     public void testCredentials() {
         // new the Credentials instance
         // Test with zero inputs
diff --git a/tests/cts/net/src/android/net/cts/DhcpInfoTest.java b/tests/cts/net/src/android/net/cts/DhcpInfoTest.java
index 97bd27a..085fdd9 100644
--- a/tests/cts/net/src/android/net/cts/DhcpInfoTest.java
+++ b/tests/cts/net/src/android/net/cts/DhcpInfoTest.java
@@ -18,29 +18,13 @@
 
 import android.net.DhcpInfo;
 import android.test.AndroidTestCase;
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestTargetNew;
 
-@TestTargetClass(DhcpInfo.class)
 public class DhcpInfoTest extends AndroidTestCase {
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        notes = "Test DhcpInfo's constructor.",
-        method = "DhcpInfo",
-        args = {}
-    )
     public void testConstructor() {
         new DhcpInfo();
     }
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        notes = "Test toString function.",
-        method = "toString",
-        args = {}
-    )
     public void testToString() {
         String expectedDefault = "ipaddr 0.0.0.0 gateway 0.0.0.0 netmask 0.0.0.0 dns1 0.0.0.0 "
                 + "dns2 0.0.0.0 DHCP server 0.0.0.0 lease 0 seconds";
diff --git a/tests/cts/net/src/android/net/cts/ListeningPortsTest.java b/tests/cts/net/src/android/net/cts/ListeningPortsTest.java
deleted file mode 100644
index bcec0fe..0000000
--- a/tests/cts/net/src/android/net/cts/ListeningPortsTest.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.net.cts;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Scanner;
-import java.util.regex.Pattern;
-
-import junit.framework.AssertionFailedError;
-import junit.framework.TestCase;
-
-public class ListeningPortsTest extends TestCase {
-
-    /** Address patterns used to check whether we're checking the right column in /proc/net. */
-    private static final List<String> ADDRESS_PATTERNS = new ArrayList<String>(2);
-
-    static {
-        ADDRESS_PATTERNS.add("[0-9A-F]{8}:[0-9A-F]{4}");
-        ADDRESS_PATTERNS.add("[0-9A-F]{32}:[0-9A-F]{4}");
-    }
-
-    /** Ports that are allowed to be listening on the emulator. */
-    private static final List<String> EXCEPTION_PATTERNS = new ArrayList<String>(6);
-
-    static {
-        // IPv4 exceptions
-        EXCEPTION_PATTERNS.add("00000000:15B3"); // 0.0.0.0:5555   - emulator port
-        EXCEPTION_PATTERNS.add("0F02000A:15B3"); // 10.0.2.15:5555 - net forwarding for emulator
-        EXCEPTION_PATTERNS.add("[0-9A-F]{6}7F:[0-9A-F]{4}"); // IPv4 Loopback
-
-        // IPv6 exceptions
-        EXCEPTION_PATTERNS.add("[0]{25}1[0]{6}:[0-9A-F]{4}"); // IPv6 Loopback
-        EXCEPTION_PATTERNS.add("[0]{16}[0]{4}[0]{4}[0-9A-F]{6}7F:[0-9A-F]{4}"); // IPv4-6 Conversion
-        EXCEPTION_PATTERNS.add("[0]{16}[F]{4}[0]{4}[0-9A-F]{6}7F:[0-9A-F]{4}"); // IPv4-6 Conversion
-    }
-
-    public void testNoListeningTcpPorts() {
-        assertNoListeningPorts("/proc/net/tcp", true);
-    }
-
-    public void testNoListeningTcp6Ports() {
-        assertNoListeningPorts("/proc/net/tcp6", true);
-    }
-
-    public void testNoListeningUdpPorts() throws Exception {
-        assertNoListeningUdpPorts("/proc/net/udp");
-    }
-
-    public void testNoListeningUdp6Ports() throws Exception {
-        assertNoListeningUdpPorts("/proc/net/udp6");
-    }
-
-    private static final int RETRIES_MAX = 6;
-
-    /**
-     * UDP tests can be flaky due to DNS lookups.  Compensate.
-     */
-    private static void assertNoListeningUdpPorts(String procFilePath) throws Exception {
-        for (int i = 0; i < RETRIES_MAX; i++) {
-            try {
-                assertNoListeningPorts(procFilePath, false);
-                return;
-            } catch (ListeningPortsAssertionError e) {
-                if (i == RETRIES_MAX - 1) {
-                    throw e;
-                }
-                Thread.sleep(2 * 1000 * i);
-            }
-        }
-        throw new IllegalStateException("unreachable");
-    }
-
-    private static void assertNoListeningPorts(String procFilePath, boolean isTcp) {
-
-        /*
-         * Sample output of "cat /proc/net/tcp" on emulator:
-         *
-         * sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  ...
-         * 0: 0100007F:13AD 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0   ...
-         * 1: 00000000:15B3 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0   ...
-         * 2: 0F02000A:15B3 0202000A:CE8A 01 00000000:00000000 00:00000000 00000000     0   ...
-         *
-         */
-
-        File procFile = new File(procFilePath);
-        Scanner scanner = null;
-        try {
-            scanner = new Scanner(procFile);
-            while (scanner.hasNextLine()) {
-                String line = scanner.nextLine().trim();
-
-                // Skip column headers
-                if (line.startsWith("sl")) {
-                    continue;
-                }
-
-                String[] fields = line.split("\\s+");
-                final int expectedNumColumns = 12;
-                assertTrue(procFilePath + " should have at least " + expectedNumColumns
-                        + " columns of output " + fields, fields.length >= expectedNumColumns);
-
-                String localAddress = fields[1];
-                String state = fields[3];
-                String uid = fields[7];
-
-                assertTrue(procFilePath + " should have an IP address in the second column",
-                        isAddress(localAddress));
-
-                String localIp = localAddress.split(":")[0];
-                int localPort = Integer.parseInt(localAddress.split(":")[1], 16);
-
-                if (!isException(localAddress) && isPortListening(state, isTcp)) {
-                    throw new ListeningPortsAssertionError(
-                            "Found port listening on addr=" + localIp + ", port="
-                                + localPort + ", UID=" + uid + " in " + procFilePath);
-                }
-            }
-        } catch (FileNotFoundException notFound) {
-            fail("Could not open file " + procFilePath + " to check for listening ports.");
-        } finally {
-            if (scanner != null) {
-                scanner.close();
-            }
-        }
-    }
-
-    private static boolean isAddress(String localAddress) {
-        return isPatternMatch(ADDRESS_PATTERNS, localAddress);
-    }
-
-    private static boolean isException(String localAddress) {
-        return isPatternMatch(EXCEPTION_PATTERNS, localAddress);
-    }
-
-    private static boolean isPatternMatch(List<String> patterns, String input) {
-        for (String pattern : patterns) {
-            if (Pattern.matches(pattern, input)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private static boolean isPortListening(String state, boolean isTcp) {
-        // 0A = TCP_LISTEN from include/net/tcp_states.h
-        String listeningState = isTcp ? "0A" : "07";
-        return listeningState.equals(state);
-    }
-
-    private static class ListeningPortsAssertionError extends AssertionFailedError {
-        private ListeningPortsAssertionError(String msg) {
-            super(msg);
-        }
-    }
-}
diff --git a/tests/cts/net/src/android/net/cts/LocalServerSocketTest.java b/tests/cts/net/src/android/net/cts/LocalServerSocketTest.java
index 21c7d5e..dc7be1f 100644
--- a/tests/cts/net/src/android/net/cts/LocalServerSocketTest.java
+++ b/tests/cts/net/src/android/net/cts/LocalServerSocketTest.java
@@ -22,49 +22,9 @@
 import android.net.LocalSocket;
 import android.net.LocalSocketAddress;
 import android.test.AndroidTestCase;
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestTargetNew;
-import dalvik.annotation.TestTargets;
-import dalvik.annotation.ToBeFixed;
 
-@TestTargetClass(LocalServerSocket.class)
 public class LocalServerSocketTest extends AndroidTestCase {
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "accept",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "close",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getFileDescriptor",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getLocalSocketAddress",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.NOT_FEASIBLE,
-            method = "LocalServerSocket",
-            args = {java.io.FileDescriptor.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "LocalServerSocket",
-            args = {java.lang.String.class}
-        )
-    })
-    @ToBeFixed(bug = "1520987", explanation = "Cannot find a proper FileDescriptor for " +
-            "android.net.LocalServerSocket constructor")
     public void testLocalServerSocket() throws IOException {
         LocalServerSocket localServerSocket = new LocalServerSocket(LocalSocketTest.mSockAddr);
         assertNotNull(localServerSocket.getLocalSocketAddress());
diff --git a/tests/cts/net/src/android/net/cts/LocalSocketAddressTest.java b/tests/cts/net/src/android/net/cts/LocalSocketAddressTest.java
index e3141d5..6ef003b 100644
--- a/tests/cts/net/src/android/net/cts/LocalSocketAddressTest.java
+++ b/tests/cts/net/src/android/net/cts/LocalSocketAddressTest.java
@@ -19,40 +19,9 @@
 import android.net.LocalSocketAddress;
 import android.net.LocalSocketAddress.Namespace;
 import android.test.AndroidTestCase;
-import dalvik.annotation.TestTargets;
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetNew;
-import dalvik.annotation.TestTargetClass;
 
-@TestTargetClass(LocalSocketAddress.class)
 public class LocalSocketAddressTest extends AndroidTestCase {
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test LocalSocketAddress",
-            method = "LocalSocketAddress",
-            args = {java.lang.String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test LocalSocketAddress",
-            method = "LocalSocketAddress",
-            args = {java.lang.String.class, android.net.LocalSocketAddress.Namespace.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test LocalSocketAddress",
-            method = "getName",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test LocalSocketAddress",
-            method = "getNamespace",
-            args = {}
-        )
-    })
     public void testNewLocalSocketAddressWithDefaultNamespace() {
         // default namespace
         LocalSocketAddress localSocketAddress = new LocalSocketAddress("name");
diff --git a/tests/cts/net/src/android/net/cts/LocalSocketAddress_NamespaceTest.java b/tests/cts/net/src/android/net/cts/LocalSocketAddress_NamespaceTest.java
index fc9de5b..97dfa43 100644
--- a/tests/cts/net/src/android/net/cts/LocalSocketAddress_NamespaceTest.java
+++ b/tests/cts/net/src/android/net/cts/LocalSocketAddress_NamespaceTest.java
@@ -18,31 +18,15 @@
 
 import android.net.LocalSocketAddress.Namespace;
 import android.test.AndroidTestCase;
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestTargetNew;
 
-@TestTargetClass(Namespace.class)
 public class LocalSocketAddress_NamespaceTest extends AndroidTestCase {
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        notes = "Test valueOf(String name).",
-        method = "valueOf",
-        args = {java.lang.String.class}
-    )
     public void testValueOf() {
         assertEquals(Namespace.ABSTRACT, Namespace.valueOf("ABSTRACT"));
         assertEquals(Namespace.RESERVED, Namespace.valueOf("RESERVED"));
         assertEquals(Namespace.FILESYSTEM, Namespace.valueOf("FILESYSTEM"));
     }
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        notes = "Test values().",
-        method = "values",
-        args = {}
-    )
     public void testValues() {
         Namespace[] expected = Namespace.values();
         assertEquals(Namespace.ABSTRACT, expected[0]);
diff --git a/tests/cts/net/src/android/net/cts/LocalSocketTest.java b/tests/cts/net/src/android/net/cts/LocalSocketTest.java
index 8e3cd67..0a4bc0d 100644
--- a/tests/cts/net/src/android/net/cts/LocalSocketTest.java
+++ b/tests/cts/net/src/android/net/cts/LocalSocketTest.java
@@ -25,89 +25,10 @@
 import android.net.LocalSocket;
 import android.net.LocalSocketAddress;
 import android.test.AndroidTestCase;
-import dalvik.annotation.TestTargets;
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetNew;
-import dalvik.annotation.TestTargetClass;
 
-@TestTargetClass(LocalSocket.class)
 public class LocalSocketTest extends AndroidTestCase{
     public final static String mSockAddr = "com.android.net.LocalSocketTest";
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test core functions of LocalSocket",
-            method = "LocalSocket",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test core functions of LocalSocket",
-            method = "close",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test core functions of LocalSocket",
-            method = "connect",
-            args = {android.net.LocalSocketAddress.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test core functions of LocalSocket",
-            method = "getAncillaryFileDescriptors",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test core functions of LocalSocket",
-            method = "getFileDescriptor",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test core functions of LocalSocket",
-            method = "getInputStream",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test core functions of LocalSocket",
-            method = "getOutputStream",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test core functions of LocalSocket",
-            method = "getPeerCredentials",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test core functions of LocalSocket",
-            method = "isConnected",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test core functions of LocalSocket",
-            method = "setFileDescriptorsForSend",
-            args = {java.io.FileDescriptor[].class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test core functions of LocalSocket",
-            method = "shutdownInput",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test core functions of LocalSocket",
-            method = "shutdownOutput",
-            args = {}
-        )
-    })
     public void testLocalConnections() throws IOException{
         // create client and server socket
         LocalServerSocket localServerSocket = new LocalServerSocket(mSockAddr);
@@ -190,98 +111,6 @@
         }
     }
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test secondary functions of LocalSocket",
-            method = "bind",
-            args = {android.net.LocalSocketAddress.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test secondary functions of LocalSocket",
-            method = "connect",
-            args = {android.net.LocalSocketAddress.class, int.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test secondary functions of LocalSocket",
-            method = "getLocalSocketAddress",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test secondary functions of LocalSocket",
-            method = "getReceiveBufferSize",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test secondary functions of LocalSocket",
-            method = "getRemoteSocketAddress",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test secondary functions of LocalSocket",
-            method = "getSendBufferSize",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test secondary functions of LocalSocket",
-            method = "getSoTimeout",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test secondary functions of LocalSocket",
-            method = "isBound",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test secondary functions of LocalSocket",
-            method = "isClosed",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test secondary functions of LocalSocket",
-            method = "isInputShutdown",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test secondary functions of LocalSocket",
-            method = "isOutputShutdown",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test secondary functions of LocalSocket",
-            method = "setReceiveBufferSize",
-            args = {int.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test secondary functions of LocalSocket",
-            method = "setSendBufferSize",
-            args = {int.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test secondary functions of LocalSocket",
-            method = "setSoTimeout",
-            args = {int.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "test secondary functions of LocalSocket",
-            method = "toString",
-            args = {}
-        )
-    })
     public void testAccessors() throws IOException{
         LocalSocket socket = new LocalSocket();
         LocalSocketAddress addr = new LocalSocketAddress("secondary");
diff --git a/tests/cts/net/src/android/net/cts/MailToTest.java b/tests/cts/net/src/android/net/cts/MailToTest.java
index 01ede1a..e454d20 100644
--- a/tests/cts/net/src/android/net/cts/MailToTest.java
+++ b/tests/cts/net/src/android/net/cts/MailToTest.java
@@ -19,12 +19,7 @@
 import android.net.MailTo;
 import android.test.AndroidTestCase;
 import android.util.Log;
-import dalvik.annotation.TestTargets;
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetNew;
-import dalvik.annotation.TestTargetClass;
 
-@TestTargetClass(MailTo.class)
 public class MailToTest extends AndroidTestCase {
     private static final String MAILTOURI_1 = "mailto:chris@example.com";
     private static final String MAILTOURI_2 = "mailto:infobot@example.com?subject=current-issue";
@@ -42,56 +37,6 @@
         super.setUp();
     }
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test parse mailto URI.",
-            method = "parse",
-            args = {java.lang.String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test parse mailto URI.",
-            method = "isMailTo",
-            args = {java.lang.String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test parse mailto URI.",
-            method = "getTo",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test parse mailto URI.",
-            method = "getSubject",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test parse mailto URI.",
-            method = "getBody",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test parse mailto URI.",
-            method = "getCc",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test parse mailto URI.",
-            method = "toString",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test parse mailto URI.",
-            method = "getHeaders",
-            args = {}
-        )
-    })
     public void testParseMailToURI() {
         assertFalse(MailTo.isMailTo(null));
         assertFalse(MailTo.isMailTo(""));
diff --git a/tests/cts/net/src/android/net/cts/NetworkInfoTest.java b/tests/cts/net/src/android/net/cts/NetworkInfoTest.java
index 6800c43..e53614b 100644
--- a/tests/cts/net/src/android/net/cts/NetworkInfoTest.java
+++ b/tests/cts/net/src/android/net/cts/NetworkInfoTest.java
@@ -16,7 +16,6 @@
 
 package android.net.cts;
 
-import dalvik.annotation.TestTargetClass;
 
 import android.content.Context;
 import android.net.ConnectivityManager;
@@ -25,7 +24,6 @@
 import android.net.NetworkInfo.State;
 import android.test.AndroidTestCase;
 
-@TestTargetClass(NetworkInfo.class)
 public class NetworkInfoTest extends AndroidTestCase {
 
     public static final int TYPE_MOBILE = ConnectivityManager.TYPE_MOBILE;
diff --git a/tests/cts/net/src/android/net/cts/NetworkInfo_DetailedStateTest.java b/tests/cts/net/src/android/net/cts/NetworkInfo_DetailedStateTest.java
index 6b9b985..3eeb1c5c 100644
--- a/tests/cts/net/src/android/net/cts/NetworkInfo_DetailedStateTest.java
+++ b/tests/cts/net/src/android/net/cts/NetworkInfo_DetailedStateTest.java
@@ -16,22 +16,12 @@
 
 package android.net.cts;
 
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestTargetNew;
 
 import android.net.NetworkInfo.DetailedState;
 import android.test.AndroidTestCase;
 
-@TestTargetClass(DetailedState.class)
 public class NetworkInfo_DetailedStateTest extends AndroidTestCase {
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        notes = "Test valueOf(String name).",
-        method = "valueOf",
-        args = {java.lang.String.class}
-    )
     public void testValueOf() {
         assertEquals(DetailedState.AUTHENTICATING, DetailedState.valueOf("AUTHENTICATING"));
         assertEquals(DetailedState.CONNECTED, DetailedState.valueOf("CONNECTED"));
@@ -45,12 +35,6 @@
         assertEquals(DetailedState.SUSPENDED, DetailedState.valueOf("SUSPENDED"));
     }
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        notes = "Test values().",
-        method = "values",
-        args = {}
-    )
     public void testValues() {
         DetailedState[] expected = DetailedState.values();
         assertEquals(11, expected.length);
diff --git a/tests/cts/net/src/android/net/cts/NetworkInfo_StateTest.java b/tests/cts/net/src/android/net/cts/NetworkInfo_StateTest.java
index 1a51acd..5303ef1 100644
--- a/tests/cts/net/src/android/net/cts/NetworkInfo_StateTest.java
+++ b/tests/cts/net/src/android/net/cts/NetworkInfo_StateTest.java
@@ -18,19 +18,9 @@
 
 import android.net.NetworkInfo.State;
 import android.test.AndroidTestCase;
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestTargetNew;
 
-@TestTargetClass(State.class)
 public class NetworkInfo_StateTest extends AndroidTestCase {
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        notes = "Test valueOf(String name).",
-        method = "valueOf",
-        args = {java.lang.String.class}
-    )
     public void testValueOf() {
         assertEquals(State.CONNECTED, State.valueOf("CONNECTED"));
         assertEquals(State.CONNECTING, State.valueOf("CONNECTING"));
@@ -40,12 +30,6 @@
         assertEquals(State.UNKNOWN, State.valueOf("UNKNOWN"));
     }
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        notes = "Test values().",
-        method = "values",
-        args = {}
-    )
     public void testValues() {
         State[] expected = State.values();
         assertEquals(6, expected.length);
diff --git a/tests/cts/net/src/android/net/cts/ProxyTest.java b/tests/cts/net/src/android/net/cts/ProxyTest.java
index 0c0586e..467d12f 100644
--- a/tests/cts/net/src/android/net/cts/ProxyTest.java
+++ b/tests/cts/net/src/android/net/cts/ProxyTest.java
@@ -16,38 +16,16 @@
 
 package android.net.cts;
 
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestTargetNew;
-import dalvik.annotation.TestTargets;
 
 import android.net.Proxy;
 import android.test.AndroidTestCase;
 
-@TestTargetClass(Proxy.class)
 public class ProxyTest extends AndroidTestCase {
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        method = "Proxy",
-        args = {}
-    )
     public void testConstructor() {
         new Proxy();
     }
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getDefaultPort",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getDefaultHost",
-            args = {}
-        )
-    })
     public void testAccessProperties() {
         final int minValidPort = 0;
         final int maxValidPort = 65535;
diff --git a/tests/cts/net/src/android/net/cts/SSLCertificateSocketFactoryTest.java b/tests/cts/net/src/android/net/cts/SSLCertificateSocketFactoryTest.java
index f125550..70ab54d 100644
--- a/tests/cts/net/src/android/net/cts/SSLCertificateSocketFactoryTest.java
+++ b/tests/cts/net/src/android/net/cts/SSLCertificateSocketFactoryTest.java
@@ -27,13 +27,7 @@
 import android.test.AndroidTestCase;
 
 import dalvik.annotation.BrokenTest;
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestTargetNew;
-import dalvik.annotation.TestTargets;
-import dalvik.annotation.ToBeFixed;
 
-@TestTargetClass(SSLCertificateSocketFactory.class)
 public class SSLCertificateSocketFactoryTest extends AndroidTestCase {
     private SSLCertificateSocketFactory mFactory;
     private int mTimeout;
@@ -45,24 +39,6 @@
         mFactory = (SSLCertificateSocketFactory) SSLCertificateSocketFactory.getDefault(mTimeout);
     }
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.PARTIAL,
-            method = "getSupportedCipherSuites",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getDefault",
-            args = {int.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.PARTIAL,
-            method = "getDefaultCipherSuites",
-            args = {}
-        )
-    })
-    @ToBeFixed(bug="1695243", explanation="Android API javadocs are incomplete")
     public void testAccessProperties() throws Exception {
         mFactory.getSupportedCipherSuites();
         mFactory.getDefaultCipherSuites();
@@ -70,38 +46,6 @@
         assertNotNull(sf);
     }
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "createSocket",
-            args = {java.net.InetAddress.class, int.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "createSocket",
-            args = {java.net.Socket.class, java.lang.String.class, int.class, boolean.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "createSocket",
-            args = {java.lang.String.class, int.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.NOT_FEASIBLE,
-            method = "createSocket",
-            args = {java.lang.String.class, int.class, java.net.InetAddress.class, int.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "createSocket",
-            args = {java.net.InetAddress.class, int.class, java.net.InetAddress.class, int.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "SSLCertificateSocketFactory",
-            args = {int.class}
-        )
-    })
     public void testCreateSocket() throws Exception {
         new SSLCertificateSocketFactory(100);
         int port = 443;
@@ -153,11 +97,6 @@
      *
      * NOTE: Test will fail if external server is not available.
      */
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        method = "createSocket",
-        args = {String.class, int.class}
-    )
     public void test_createSocket_simple() throws Exception {
         try {
             mFactory.createSocket(TEST_CREATE_SOCKET_HOST, TEST_CREATE_SOCKET_PORT);
@@ -174,11 +113,6 @@
      *
      * NOTE: Test will fail if external server is not available.
      */
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        method = "createSocket",
-        args = {Socket.class, String.class, int.class, boolean.class}
-    )
     public void test_createSocket_wrapping() throws Exception {
         try {
             Socket underlying = new Socket(TEST_CREATE_SOCKET_HOST, TEST_CREATE_SOCKET_PORT);
@@ -197,11 +131,6 @@
      *
      * NOTE: Test will fail if external server is not available.
      */
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        method = "createSocket",
-        args = {String.class, int.class, InetAddress.class, int.class}
-    )
     public void test_createSocket_bind() throws Exception {
         try {
             mFactory.createSocket(TEST_CREATE_SOCKET_HOST, TEST_CREATE_SOCKET_PORT, null, 0);
diff --git a/tests/cts/net/src/android/net/cts/TrafficStatsTest.java b/tests/cts/net/src/android/net/cts/TrafficStatsTest.java
index 183f891..a5bbd98 100644
--- a/tests/cts/net/src/android/net/cts/TrafficStatsTest.java
+++ b/tests/cts/net/src/android/net/cts/TrafficStatsTest.java
@@ -16,10 +16,6 @@
 
 package android.net.cts;
 
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestTargetNew;
-import dalvik.annotation.TestTargets;
 
 import android.net.TrafficStats;
 import android.os.Process;
@@ -31,14 +27,7 @@
 import java.net.ServerSocket;
 import java.net.Socket;
 
-@TestTargetClass(TrafficStats.class)
 public class TrafficStatsTest extends AndroidTestCase {
-    @TestTargets({
-        @TestTargetNew(level = TestLevel.SUFFICIENT, method = "getMobileTxPackets"),
-        @TestTargetNew(level = TestLevel.SUFFICIENT, method = "getMobileRxPackets"),
-        @TestTargetNew(level = TestLevel.SUFFICIENT, method = "getMobileTxBytes"),
-        @TestTargetNew(level = TestLevel.SUFFICIENT, method = "getMobileRxBytes")
-    })
     public void testGetMobileStats() {
         // We can't assume a mobile network is even present in this test, so
         // we simply assert that a valid value is returned.
@@ -53,18 +42,6 @@
                    TrafficStats.getMobileRxBytes() >= 0);
     }
 
-    @TestTargets({
-        @TestTargetNew(level = TestLevel.PARTIAL_COMPLETE, method = "getMobileTxPackets"),
-        @TestTargetNew(level = TestLevel.PARTIAL_COMPLETE, method = "getMobileRxPackets"),
-        @TestTargetNew(level = TestLevel.PARTIAL_COMPLETE, method = "getMobileTxBytes"),
-        @TestTargetNew(level = TestLevel.PARTIAL_COMPLETE, method = "getMobileRxBytes"),
-        @TestTargetNew(level = TestLevel.PARTIAL_COMPLETE, method = "getTotalTxPackets"),
-        @TestTargetNew(level = TestLevel.PARTIAL_COMPLETE, method = "getTotalRxPackets"),
-        @TestTargetNew(level = TestLevel.PARTIAL_COMPLETE, method = "getTotalTxBytes"),
-        @TestTargetNew(level = TestLevel.PARTIAL_COMPLETE, method = "getTotalRxBytes"),
-        @TestTargetNew(level = TestLevel.PARTIAL_COMPLETE, method = "getUidTxBytes"),
-        @TestTargetNew(level = TestLevel.PARTIAL_COMPLETE, method = "getUidRxBytes")
-    })
     public void testTrafficStatsForLocalhost() throws IOException {
         long mobileTxPacketsBefore = TrafficStats.getTotalTxPackets();
         long mobileRxPacketsBefore = TrafficStats.getTotalRxPackets();
diff --git a/tests/cts/net/src/android/net/cts/UriTest.java b/tests/cts/net/src/android/net/cts/UriTest.java
index 067ce52..3bf8049 100644
--- a/tests/cts/net/src/android/net/cts/UriTest.java
+++ b/tests/cts/net/src/android/net/cts/UriTest.java
@@ -16,10 +16,6 @@
 
 package android.net.cts;
 
-import dalvik.annotation.TestTargets;
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestTargetNew;
 import android.content.ContentUris;
 import android.net.Uri;
 import android.os.Parcel;
@@ -27,14 +23,7 @@
 import java.io.File;
 import java.util.Arrays;
 
-@TestTargetClass(Uri.class)
 public class UriTest extends AndroidTestCase {
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        notes = "Test write to and read frome parcel.",
-        method = "writeToParcel",
-        args = {android.os.Parcel.class, android.net.Uri.class}
-    )
     public void testParcelling() {
         parcelAndUnparcel(Uri.parse("foo:bob%20lee"));
         parcelAndUnparcel(Uri.fromParts("foo", "bob lee", "fragment"));
@@ -60,12 +49,6 @@
         assertEquals(u, Uri.CREATOR.createFromParcel(p));
     }
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        notes = "Test buildUpon",
-        method = "buildUpon",
-        args = {}
-    )
     public void testBuildUpon() {
         Uri u = Uri.parse("bob:lee").buildUpon().scheme("robert").build();
         assertEquals("robert", u.getScheme());
@@ -92,80 +75,6 @@
         assertEquals("foo", b.getScheme());
     }
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test string uri.",
-            method = "getSchemeSpecificPart",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test string uri.",
-            method = "getEncodedSchemeSpecificPart",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test string uri.",
-            method = "getEncodedPath",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test string uri.",
-            method = "getPath",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test string uri.",
-            method = "getEncodedQuery",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test string uri.",
-            method = "getQuery",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test string uri.",
-            method = "getEncodedFragment",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test string uri.",
-            method = "getHost",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test string uri.",
-            method = "getPort",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test string uri.",
-            method = "getUserInfo",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test string uri.",
-            method = "getEncodedUserInfo",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test string uri.",
-            method = "parse",
-            args = {java.lang.String.class}
-        )
-    })
     public void testStringUri() {
         assertEquals("bob lee",
                 Uri.parse("foo:bob%20lee").getSchemeSpecificPart());
@@ -202,12 +111,6 @@
         assertEquals(-1, uri.getPort());
     }
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        notes = "Test compareTo",
-        method = "compareTo",
-        args = {android.net.Uri.class}
-    )
     public void testCompareTo() {
         Uri a = Uri.parse("foo:a");
         Uri b = Uri.parse("foo:b");
@@ -218,20 +121,6 @@
         assertEquals(0, b.compareTo(b2));
     }
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test equals and hashCode.",
-            method = "equals",
-            args = {java.lang.Object.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test equals and hashCode.",
-            method = "hashCode",
-            args = {}
-        )
-    })
     public void testEqualsAndHashCode() {
         Uri a = Uri.parse("http://crazybob.org/test/?foo=bar#tee");
 
@@ -260,26 +149,6 @@
         assertEquals(b.hashCode(), c.hashCode());
     }
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test encode and decode.",
-            method = "encode",
-            args = {java.lang.String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test encode and decode.",
-            method = "encode",
-            args = {java.lang.String.class, java.lang.String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test encode and decode.",
-            method = "decode",
-            args = {java.lang.String.class}
-        )
-    })
     public void testEncodeAndDecode() {
         String encoded = Uri.encode("Bob:/", "/");
         assertEquals(-1, encoded.indexOf(':'));
@@ -300,12 +169,6 @@
         assertEquals(s, Uri.decode(Uri.encode(s, null)));
     }
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        notes = "Test fromFile.",
-        method = "fromFile",
-        args = {java.io.File.class}
-    )
     public void testFromFile() {
         File f = new File("/tmp/bob");
         Uri uri = Uri.fromFile(f);
@@ -316,20 +179,6 @@
             } catch (NullPointerException e) {}
     }
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test get query parameters.",
-            method = "getQueryParameter",
-            args = {java.lang.String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test get query parameters.",
-            method = "getQueryParameters",
-            args = {java.lang.String.class}
-        )
-    })
     public void testQueryParameters() {
         Uri uri = Uri.parse("content://user");
         assertEquals(null, uri.getQueryParameter("a"));
@@ -345,26 +194,6 @@
         assertEquals("d", uri.getQueryParameter("c"));
     }
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "",
-            method = "getPathSegments",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "",
-            method = "getLastPathSegment",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "",
-            method = "withAppendedPath",
-            args = {android.net.Uri.class, java.lang.String.class}
-        )
-    })
     public void testPathOperations() {
         Uri uri = Uri.parse("content://user/a/b");
 
@@ -402,62 +231,6 @@
         assertEquals("/a/b/c", withC.getPath());
     }
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test opaque uri.",
-            method = "isAbsolute",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test opaque uri.",
-            method = "isOpaque",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test opaque uri.",
-            method = "isRelative",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test opaque uri.",
-            method = "getHost",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test opaque uri.",
-            method = "getPort",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test opaque uri.",
-            method = "getScheme",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test opaque uri.",
-            method = "getSchemeSpecificPart",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test opaque uri.",
-            method = "fromParts",
-            args = {java.lang.String.class, java.lang.String.class, java.lang.String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test opaque uri.",
-            method = "toString",
-            args = {}
-        )
-    })
     public void testOpaqueUri() {
         Uri uri = Uri.parse("mailto:nobody");
         testOpaqueUri(uri);
@@ -512,98 +285,6 @@
         assertEquals("mailto:nobody#top", withFragment.toString());
     }
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test hierarchical uris.",
-            method = "getAuthority",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test hierarchical uris.",
-            method = "getScheme",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test hierarchical uris.",
-            method = "getEncodedAuthority",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test hierarchical uris.",
-            method = "getPath",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test hierarchical uris.",
-            method = "getEncodedPath",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test hierarchical uris.",
-            method = "getQuery",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test hierarchical uris.",
-            method = "getEncodedQuery",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test hierarchical uris.",
-            method = "getFragment",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test hierarchical uris.",
-            method = "getEncodedFragment",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test hierarchical uris.",
-            method = "getSchemeSpecificPart",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test hierarchical uris.",
-            method = "isAbsolute",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test hierarchical uris.",
-            method = "isHierarchical",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test hierarchical uris.",
-            method = "isOpaque",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test hierarchical uris.",
-            method = "isRelative",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test hierarchical uris.",
-            method = "toString",
-            args = {}
-        )
-    })
     public void testHierarchicalUris() {
         testHierarchical("http", "google.com", "/p1/p2", "query", "fragment");
         testHierarchical("file", null, "/p1/p2", null, null);
@@ -724,4 +405,12 @@
         assertTrue(uri.isHierarchical());
         assertEquals(uriString, uri.toString());
     }
+
+    public void testNormalize() {
+        assertEquals(Uri.parse(""), Uri.parse("").normalize());
+        assertEquals(Uri.parse("http://www.android.com"),
+                Uri.parse("http://www.android.com").normalize());
+        assertEquals(Uri.parse("http://USER@WWW.ANDROID.COM:100/ABOUT?foo=blah@bar=bleh#c"),
+                Uri.parse("HTTP://USER@WWW.ANDROID.COM:100/ABOUT?foo=blah@bar=bleh#c").normalize());
+    }
 }
diff --git a/tests/cts/net/src/android/net/cts/Uri_BuilderTest.java b/tests/cts/net/src/android/net/cts/Uri_BuilderTest.java
index 66bdb07..4088d82 100644
--- a/tests/cts/net/src/android/net/cts/Uri_BuilderTest.java
+++ b/tests/cts/net/src/android/net/cts/Uri_BuilderTest.java
@@ -17,119 +17,10 @@
 package android.net.cts;
 
 import junit.framework.TestCase;
-import dalvik.annotation.TestTargets;
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetNew;
-import dalvik.annotation.TestTargetClass;
 import android.net.Uri.Builder;
 import android.net.Uri;
 
-@TestTargetClass(Uri.Builder.class)
 public class Uri_BuilderTest extends TestCase {
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test Builder operations.",
-            method = "Uri.Builder",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test Builder operations.",
-            method = "build",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test Builder operations.",
-            method = "scheme",
-            args = {java.lang.String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test Builder operations.",
-            method = "authority",
-            args = {java.lang.String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test Builder operations.",
-            method = "path",
-            args = {java.lang.String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test Builder operations.",
-            method = "query",
-            args = {java.lang.String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test Builder operations.",
-            method = "opaquePart",
-            args = {java.lang.String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test Builder operations.",
-            method = "fragment",
-            args = {java.lang.String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test Builder operations.",
-            method = "appendEncodedPath",
-            args = {java.lang.String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test Builder operations.",
-            method = "appendPath",
-            args = {java.lang.String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test Builder operations.",
-            method = "appendQueryParameter",
-            args = {java.lang.String.class, java.lang.String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test Builder operations.",
-            method = "encodedAuthority",
-            args = {java.lang.String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test Builder operations.",
-            method = "encodedFragment",
-            args = {java.lang.String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test Builder operations.",
-            method = "encodedPath",
-            args = {java.lang.String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test Builder operations.",
-            method = "encodedQuery",
-            args = {java.lang.String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test Builder operations.",
-            method = "encodedOpaquePart",
-            args = {java.lang.String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test Builder operations.",
-            method = "toString",
-            args = {}
-        )
-    })
     public void testBuilderOperations() {
         Uri uri = Uri.parse("http://google.com/p1?query#fragment");
         Builder builder = uri.buildUpon();
diff --git a/tests/cts/net/src/android/net/cts/UrlQuerySanitizerTest.java b/tests/cts/net/src/android/net/cts/UrlQuerySanitizerTest.java
index 0dd5db1..7076ea2 100644
--- a/tests/cts/net/src/android/net/cts/UrlQuerySanitizerTest.java
+++ b/tests/cts/net/src/android/net/cts/UrlQuerySanitizerTest.java
@@ -23,12 +23,7 @@
 import android.net.UrlQuerySanitizer.ParameterValuePair;
 import android.net.UrlQuerySanitizer.ValueSanitizer;
 import android.test.AndroidTestCase;
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestTargetNew;
-import dalvik.annotation.TestTargets;
 
-@TestTargetClass(UrlQuerySanitizer.class)
 public class UrlQuerySanitizerTest extends AndroidTestCase {
     private static final int ALL_OK = IllegalCharacterValueSanitizer.ALL_OK;
 
@@ -46,173 +41,6 @@
     private static final String AGE = "age";
     private static final String HEIGHT = "height";
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "UrlQuerySanitizer",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "UrlQuerySanitizer",
-            args = {String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "parseUrl",
-            args = {String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "parseQuery",
-            args = {String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "parseEntry",
-            args = {String.class, String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getValue",
-            args = {String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "addSanitizedEntry",
-            args = {String.class, String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "hasParameter",
-            args = {String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getParameterSet",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getParameterList",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "setUnregisteredParameterValueSanitizer",
-            args = {ValueSanitizer.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getUnregisteredParameterValueSanitizer",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getAllButNulAndAngleBracketsLegal",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getAllButNulLegal",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getAllButWhitespaceLegal",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getAllIllegal",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getAmpAndSpaceLegal",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getAmpLegal",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getSpaceLegal",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getUrlAndSpaceLegal",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getUrlLegal",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "unescape",
-            args = {String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "isHexDigit",
-            args = {char.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "decodeHexDigit",
-            args = {char.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "setAllowUnregisteredParamaters",
-            args = {boolean.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getAllowUnregisteredParamaters",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "registerParameter",
-            args = {String.class, ValueSanitizer.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "registerParameters",
-            args = {String[].class, ValueSanitizer.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getEffectiveValueSanitizer",
-            args = {String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getValueSanitizer",
-            args = {String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "clear",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "setPreferFirstRepeatedParameter",
-            args = {boolean.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getPreferFirstRepeatedParameter",
-            args = {}
-        )
-    })
     public void testUrlQuerySanitizer() {
         MockUrlQuerySanitizer uqs = new MockUrlQuerySanitizer();
         assertFalse(uqs.getAllowUnregisteredParamaters());
diff --git a/tests/cts/net/src/android/net/cts/UrlQuerySanitizer_IllegalCharacterValueSanitizerTest.java b/tests/cts/net/src/android/net/cts/UrlQuerySanitizer_IllegalCharacterValueSanitizerTest.java
index f85a534..f86af31 100644
--- a/tests/cts/net/src/android/net/cts/UrlQuerySanitizer_IllegalCharacterValueSanitizerTest.java
+++ b/tests/cts/net/src/android/net/cts/UrlQuerySanitizer_IllegalCharacterValueSanitizerTest.java
@@ -19,28 +19,9 @@
 import android.net.UrlQuerySanitizer;
 import android.net.UrlQuerySanitizer.IllegalCharacterValueSanitizer;
 import android.test.AndroidTestCase;
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestTargetNew;
-import dalvik.annotation.TestTargets;
 
-@TestTargetClass(UrlQuerySanitizer.IllegalCharacterValueSanitizer.class)
 public class UrlQuerySanitizer_IllegalCharacterValueSanitizerTest extends AndroidTestCase {
     static final int SPACE_OK = IllegalCharacterValueSanitizer.SPACE_OK;
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test constructor(s) of {@link IllegalCharacterValueSanitizer}",
-            method = "IllegalCharacterValueSanitizer",
-            args = {int.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test method: sanitize",
-            method = "sanitize",
-            args = {String.class}
-        )
-    })
     public void testSanitize() {
         IllegalCharacterValueSanitizer sanitizer =  new IllegalCharacterValueSanitizer(SPACE_OK);
         assertEquals("Joe User", sanitizer.sanitize("Joe<User"));
diff --git a/tests/cts/net/src/android/net/cts/UrlQuerySanitizer_ParameterValuePairTest.java b/tests/cts/net/src/android/net/cts/UrlQuerySanitizer_ParameterValuePairTest.java
index 32de90d..077cdaf 100644
--- a/tests/cts/net/src/android/net/cts/UrlQuerySanitizer_ParameterValuePairTest.java
+++ b/tests/cts/net/src/android/net/cts/UrlQuerySanitizer_ParameterValuePairTest.java
@@ -19,18 +19,8 @@
 import android.net.UrlQuerySanitizer;
 import android.net.UrlQuerySanitizer.ParameterValuePair;
 import android.test.AndroidTestCase;
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestTargetNew;
 
-@TestTargetClass(UrlQuerySanitizer.ParameterValuePair.class)
 public class UrlQuerySanitizer_ParameterValuePairTest extends AndroidTestCase {
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        notes = "Test constructor(s) of {@link ParameterValuePair}",
-        method = "ParameterValuePair",
-        args = {String.class, String.class}
-    )
     public void testConstructor() {
         final String parameter = "name";
         final String vaule = "Joe_user";
diff --git a/tests/cts/net/src/android/net/http/cts/SslCertificateTest.java b/tests/cts/net/src/android/net/http/cts/SslCertificateTest.java
index 8bc8498..70ae496 100644
--- a/tests/cts/net/src/android/net/http/cts/SslCertificateTest.java
+++ b/tests/cts/net/src/android/net/http/cts/SslCertificateTest.java
@@ -33,32 +33,12 @@
 import java.util.Set;
 
 import junit.framework.TestCase;
-import dalvik.annotation.TestTargets;
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetNew;
-import dalvik.annotation.TestTargetClass;
 import android.net.http.SslCertificate;
 import android.net.http.SslCertificate.DName;
 import android.os.Bundle;
 
-@TestTargetClass(SslCertificate.class)
 public class SslCertificateTest extends TestCase {
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test constructor(s) of SslCertificate.",
-            method = "SslCertificate",
-            args = {java.lang.String.class, java.lang.String.class, java.lang.String.class, 
-                    java.lang.String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test constructor(s) of SslCertificate.",
-            method = "SslCertificate",
-            args = {java.security.cert.X509Certificate.class}
-        )
-    })
     public void testConstructor() {
         // new the SslCertificate instance
         String date = DateFormat.getInstance().format(new Date());
@@ -204,20 +184,6 @@
         }
     }
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test saveState and restoreState(SslCertificate certificate).",
-            method = "saveState",
-            args = {android.net.http.SslCertificate.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test saveState and restoreState(SslCertificate certificate).",
-            method = "restoreState",
-            args = {android.os.Bundle.class}
-        )
-    })
     public void testState() {
         // set the expected value
 
@@ -238,38 +204,6 @@
         assertEquals(ssl.getValidNotBefore(), restored.getValidNotBefore());
     }
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test getIssuedTo().",
-            method = "getIssuedTo",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test getIssuedTo().",
-            method = "getIssuedBy",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test getIssuedTo().",
-            method = "getValidNotAfterDate",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test getIssuedTo().",
-            method = "getValidNotBeforeDate",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test getIssuedTo().",
-            method = "toString",
-            args = {}
-        )
-    })
     public void testSslCertificate() {
 
         final String TO = "c=ccc,o=testOName,ou=testUName,cn=testCName";
diff --git a/tests/cts/net/src/android/net/http/cts/SslCertificate_DNameTest.java b/tests/cts/net/src/android/net/http/cts/SslCertificate_DNameTest.java
index 848bf7b..b0c71e8 100644
--- a/tests/cts/net/src/android/net/http/cts/SslCertificate_DNameTest.java
+++ b/tests/cts/net/src/android/net/http/cts/SslCertificate_DNameTest.java
@@ -20,48 +20,11 @@
 import java.util.Date;
 
 import junit.framework.TestCase;
-import dalvik.annotation.TestTargets;
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetNew;
-import dalvik.annotation.TestTargetClass;
 import android.net.http.SslCertificate;
 import android.net.http.SslCertificate.DName;
 
-@TestTargetClass(DName.class)
 public class SslCertificate_DNameTest extends TestCase {
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test DName.",
-            method = "SslCertificate.DName",
-            args = {java.lang.String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test DName.",
-            method = "getCName",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test DName.",
-            method = "getDName",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test DName.",
-            method = "getOName",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            notes = "Test DName.",
-            method = "getUName",
-            args = {}
-        )
-    })
     public void testDName() {
         final String TO = "c=ccc,o=testOName,ou=testUName,cn=testCName";
         final String BY = "e=aeei,c=adb,o=testOName,ou=testUName,cn=testCName";
diff --git a/tests/cts/net/src/android/net/http/cts/SslErrorTest.java b/tests/cts/net/src/android/net/http/cts/SslErrorTest.java
index d186f0e..850a8b6 100755
--- a/tests/cts/net/src/android/net/http/cts/SslErrorTest.java
+++ b/tests/cts/net/src/android/net/http/cts/SslErrorTest.java
@@ -19,15 +19,11 @@
 import android.net.http.SslCertificate;
 import android.net.http.SslError;
 
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetNew;
-import dalvik.annotation.TestTargetClass;
 
 import java.util.Date;
 
 import junit.framework.TestCase;
 
-@TestTargetClass(SslError.class)
 public class SslErrorTest extends TestCase {
     private SslCertificate mCertificate;
 
@@ -37,22 +33,12 @@
         mCertificate = new SslCertificate("foo", "bar", new Date(42), new Date(43));
     }
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        method = "hasError",
-        args = {int.class}
-    )
     public void testHasError() {
         SslError error = new SslError(SslError.SSL_EXPIRED, mCertificate);
         assertTrue(error.hasError(SslError.SSL_EXPIRED));
         assertFalse(error.hasError(SslError.SSL_UNTRUSTED));
     }
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        method = "addError",
-        args = {int.class}
-    )
     public void testAddError() {
         SslError error = new SslError(SslError.SSL_EXPIRED, mCertificate);
         assertFalse(error.hasError(SslError.SSL_UNTRUSTED));
@@ -60,63 +46,33 @@
         assertTrue(error.hasError(SslError.SSL_UNTRUSTED));
     }
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        method = "addError",
-        args = {int.class}
-    )
     public void testAddErrorIgnoresInvalidValues() {
         SslError error = new SslError(SslError.SSL_EXPIRED, mCertificate);
         error.addError(42);
         assertFalse(error.hasError(42));
     }
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        method = "SslError",
-        args = {int.class, SslCertificate.class}
-    )
     public void testConstructorIgnoresInvalidValues() {
         SslError error = new SslError(42, mCertificate);
         assertFalse(error.hasError(42));
     }
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        method = "getPrimaryError",
-        args = {}
-    )
     public void testGetPrimaryError() {
         SslError error = new SslError(SslError.SSL_EXPIRED, mCertificate);
         error.addError(SslError.SSL_UNTRUSTED);
         assertEquals(error.getPrimaryError(), SslError.SSL_UNTRUSTED);
     }
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        method = "getPrimaryError",
-        args = {}
-    )
     public void testGetPrimaryErrorWithEmptySet() {
         SslError error = new SslError(42, mCertificate);
         assertEquals(error.getPrimaryError(), -1);
     }
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        method = "getUrl",
-        args = {}
-    )
     public void testGetUrl() {
         SslError error = new SslError(SslError.SSL_EXPIRED, mCertificate, "foo");
         assertEquals(error.getUrl(), "foo");
     }
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        method = "getUrl",
-        args = {}
-    )
     public void testGetUrlWithDeprecatedConstructor() {
         SslError error = new SslError(SslError.SSL_EXPIRED, mCertificate);
         assertEquals(error.getUrl(), "");
diff --git a/tests/cts/net/src/android/net/wifi/cts/ScanResultTest.java b/tests/cts/net/src/android/net/wifi/cts/ScanResultTest.java
index b7202d2..26cfff8 100644
--- a/tests/cts/net/src/android/net/wifi/cts/ScanResultTest.java
+++ b/tests/cts/net/src/android/net/wifi/cts/ScanResultTest.java
@@ -26,11 +26,7 @@
 import android.net.wifi.WifiManager;
 import android.net.wifi.WifiManager.WifiLock;
 import android.test.AndroidTestCase;
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestTargetNew;
 
-@TestTargetClass(ScanResult.class)
 public class ScanResultTest extends AndroidTestCase {
     private static class MySync {
         int expectedState = STATE_NULL;
@@ -118,11 +114,6 @@
         }
     }
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        method = "toString",
-        args = {}
-    )
     public void testScanResultProperties() {
         if (!WifiFeature.isWifiSupported(getContext())) {
             // skip the test if WiFi is not supported
diff --git a/tests/cts/net/src/android/net/wifi/cts/SupplicantStateTest.java b/tests/cts/net/src/android/net/wifi/cts/SupplicantStateTest.java
index 88ecfe8..11edf73 100644
--- a/tests/cts/net/src/android/net/wifi/cts/SupplicantStateTest.java
+++ b/tests/cts/net/src/android/net/wifi/cts/SupplicantStateTest.java
@@ -18,21 +18,9 @@
 
 import android.net.wifi.SupplicantState;
 import android.test.AndroidTestCase;
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestTargetNew;
-import dalvik.annotation.TestTargets;
 
-@TestTargetClass(SupplicantState.class)
 public class SupplicantStateTest extends AndroidTestCase {
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "isValidState",
-            args = {android.net.wifi.SupplicantState.class}
-        )
-    })
     public void testIsValidState() {
         if (!WifiFeature.isWifiSupported(getContext())) {
             // skip the test if WiFi is not supported
diff --git a/tests/cts/net/src/android/net/wifi/cts/WifiConfigurationTest.java b/tests/cts/net/src/android/net/wifi/cts/WifiConfigurationTest.java
index f11aa4a..92a55b2 100644
--- a/tests/cts/net/src/android/net/wifi/cts/WifiConfigurationTest.java
+++ b/tests/cts/net/src/android/net/wifi/cts/WifiConfigurationTest.java
@@ -22,12 +22,7 @@
 import android.net.wifi.WifiConfiguration;
 import android.net.wifi.WifiManager;
 import android.test.AndroidTestCase;
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestTargetNew;
-import dalvik.annotation.TestTargets;
 
-@TestTargetClass(WifiConfiguration.class)
 public class WifiConfigurationTest extends AndroidTestCase {
     private  WifiManager mWifiManager;
     @Override
@@ -37,18 +32,6 @@
                 .getSystemService(Context.WIFI_SERVICE);
     }
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.PARTIAL,
-            method = "WifiConfiguration",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.PARTIAL,
-            method = "toString",
-            args = {}
-        )
-    })
     public void testWifiConfiguration() {
         if (!WifiFeature.isWifiSupported(getContext())) {
             // skip the test if WiFi is not supported
diff --git a/tests/cts/net/src/android/net/wifi/cts/WifiInfoTest.java b/tests/cts/net/src/android/net/wifi/cts/WifiInfoTest.java
index 2713dfd..df1323b 100644
--- a/tests/cts/net/src/android/net/wifi/cts/WifiInfoTest.java
+++ b/tests/cts/net/src/android/net/wifi/cts/WifiInfoTest.java
@@ -16,10 +16,6 @@
 
 package android.net.wifi.cts;
 
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestTargetNew;
-import dalvik.annotation.TestTargets;
 
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -31,7 +27,6 @@
 import android.net.wifi.WifiManager.WifiLock;
 import android.test.AndroidTestCase;
 
-@TestTargetClass(WifiInfo.class)
 public class WifiInfoTest extends AndroidTestCase {
     private static class MySync {
         int expectedState = STATE_NULL;
@@ -112,63 +107,6 @@
         }
     }
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.PARTIAL,
-            method = "getMacAddress",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.PARTIAL,
-            method = "getIpAddress",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.PARTIAL,
-            method = "getDetailedStateOf",
-            args = {android.net.wifi.SupplicantState.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.PARTIAL,
-            method = "getNetworkId",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.PARTIAL,
-            method = "getSSID",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.PARTIAL,
-            method = "getBSSID",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.PARTIAL,
-            method = "getSupplicantState",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.PARTIAL,
-            method = "getLinkSpeed",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "toString",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.PARTIAL,
-            method = "getRssi",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.PARTIAL,
-            method = "getHiddenSSID",
-            args = {}
-        )
-    })
     public void testWifiInfoProperties() throws Exception {
         if (!WifiFeature.isWifiSupported(getContext())) {
             // skip the test if WiFi is not supported
diff --git a/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java b/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java
index 014f0ee..5fc23e7 100644
--- a/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java
+++ b/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java
@@ -16,10 +16,6 @@
 
 package android.net.wifi.cts;
 
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestTargetNew;
-import dalvik.annotation.TestTargets;
 
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -37,7 +33,6 @@
 import java.util.List;
 import java.util.Set;
 
-@TestTargetClass(WifiManager.class)
 public class WifiManagerTest extends AndroidTestCase {
     private static class MySync {
         int expectedState = STATE_NULL;
@@ -186,58 +181,6 @@
      * 4.pingSupplicant
      * 5.satrtScan
      */
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "isWifiEnabled",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "setWifiEnabled",
-            args = {boolean.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "startScan",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getScanResults",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "pingSupplicant",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "reassociate",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "reconnect",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "disconnect",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "createWifiLock",
-            args = {int.class, String.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "createWifiLock",
-            args = {String.class}
-        )
-    })
     public void testWifiManagerActions() throws Exception {
         if (!WifiFeature.isWifiSupported(getContext())) {
             // skip the test if WiFi is not supported
@@ -263,33 +206,6 @@
      * 3.wifi state
      * 4.ConnectionInfo
      */
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "isWifiEnabled",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getWifiState",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "setWifiEnabled",
-            args = {boolean.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getConnectionInfo",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getDhcpInfo",
-            args = {}
-        )
-    })
     public void testWifiManagerProperties() throws Exception {
         if (!WifiFeature.isWifiSupported(getContext())) {
             // skip the test if WiFi is not supported
@@ -314,53 +230,6 @@
      * 6.configured Networks
      * 7.save configure;
      */
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "isWifiEnabled",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "setWifiEnabled",
-            args = {boolean.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "getConfiguredNetworks",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "addNetwork",
-            args = {android.net.wifi.WifiConfiguration.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "updateNetwork",
-            args = {android.net.wifi.WifiConfiguration.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "removeNetwork",
-            args = {int.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "enableNetwork",
-            args = {int.class, boolean.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "disableNetwork",
-            args = {int.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "saveConfiguration",
-            args = {}
-        )
-    })
     public void testWifiManagerNetWork() throws Exception {
         if (!WifiFeature.isWifiSupported(getContext())) {
             // skip the test if WiFi is not supported
@@ -449,18 +318,6 @@
         }
     }
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "compareSignalLevel",
-            args = {int.class, int.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "calculateSignalLevel",
-            args = {int.class, int.class}
-        )
-    })
     public void testSignal() {
         if (!WifiFeature.isWifiSupported(getContext())) {
             // skip the test if WiFi is not supported
diff --git a/tests/cts/net/src/android/net/wifi/cts/WifiManager_WifiLockTest.java b/tests/cts/net/src/android/net/wifi/cts/WifiManager_WifiLockTest.java
index c1fc4ba..3cdd56a 100644
--- a/tests/cts/net/src/android/net/wifi/cts/WifiManager_WifiLockTest.java
+++ b/tests/cts/net/src/android/net/wifi/cts/WifiManager_WifiLockTest.java
@@ -20,48 +20,11 @@
 import android.net.wifi.WifiManager;
 import android.net.wifi.WifiManager.WifiLock;
 import android.test.AndroidTestCase;
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestTargetNew;
-import dalvik.annotation.TestTargets;
 
-@TestTargetClass(WifiManager.WifiLock.class)
 public class WifiManager_WifiLockTest extends AndroidTestCase {
 
     private static final String WIFI_TAG = "WifiManager_WifiLockTest";
 
-    @TestTargets({
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "acquire",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "finalize",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "isHeld",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "release",
-            args = {}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "setReferenceCounted",
-            args = {boolean.class}
-        ),
-        @TestTargetNew(
-            level = TestLevel.COMPLETE,
-            method = "toString",
-            args = {}
-        )
-    })
     public void testWifiLock() {
         if (!WifiFeature.isWifiSupported(getContext())) {
             // skip the test if WiFi is not supported
