refactor CTS harness to be a host Java library

- removed compile time generated SuiteInfo.java
- replaced with compile time generated properties file with same
  information, to be loaded by generic test suite info loader in
  TradeFederation
- created a separate host library for CTS harness parts, without
  compile time generated suite info

Bug: 38448863
Bug: 65127140
Test: existing unit/func tests covering test suite info loading
Change-Id: I0b76ad620e4f68bf935cd832c17fcd6bacb79112
diff --git a/CleanSpec.mk b/CleanSpec.mk
index b2474c2..71ada3d 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -45,6 +45,8 @@
 #$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*)
 
 $(call add-clean-step, rm -rf $(HOST_OUT_INTERMEDIATES)/EXECUTABLES/vm-tests-tf_intermediates)
+$(call add-clean-step, rm -rf $(OUT_DIR)/host/common/obj/JAVA_LIBRARIES/cts-tradefed_intermediates/com/android/compatibility/SuiteInfo.java)
+
 # ************************************************
 # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
 # ************************************************
diff --git a/build/compatibility_test_suite.mk b/build/compatibility_test_suite.mk
index 7cdd220..d133c3e 100644
--- a/build/compatibility_test_suite.mk
+++ b/build/compatibility_test_suite.mk
@@ -16,25 +16,21 @@
 # Builds a compatibility test suite.
 #
 
-# Generate the SuiteInfo.java
-suite_info_java := $(call intermediates-dir-for,JAVA_LIBRARIES,$(LOCAL_MODULE),true,COMMON)/com/android/compatibility/SuiteInfo.java
-$(suite_info_java): PRIVATE_SUITE_BUILD_NUMBER := $(LOCAL_SUITE_BUILD_NUMBER)
-$(suite_info_java): PRIVATE_SUITE_TARGET_ARCH := $(LOCAL_SUITE_TARGET_ARCH)
-$(suite_info_java): PRIVATE_SUITE_NAME := $(LOCAL_SUITE_NAME)
-$(suite_info_java): PRIVATE_SUITE_FULLNAME := $(LOCAL_SUITE_FULLNAME)
-$(suite_info_java): PRIVATE_SUITE_VERSION := $(LOCAL_SUITE_VERSION)
-$(suite_info_java): cts/build/compatibility_test_suite.mk $(LOCAL_MODULE_MAKEFILE)
+# Generate suite info property file
+suite_info_prop := $(call intermediates-dir-for,JAVA_LIBRARIES,$(LOCAL_MODULE),true,COMMON)/test-suite-info.properties
+$(suite_info_prop): PRIVATE_SUITE_BUILD_NUMBER := $(LOCAL_SUITE_BUILD_NUMBER)
+$(suite_info_prop): PRIVATE_SUITE_TARGET_ARCH := $(LOCAL_SUITE_TARGET_ARCH)
+$(suite_info_prop): PRIVATE_SUITE_NAME := $(LOCAL_SUITE_NAME)
+$(suite_info_prop): PRIVATE_SUITE_FULLNAME := $(LOCAL_SUITE_FULLNAME)
+$(suite_info_prop): PRIVATE_SUITE_VERSION := $(LOCAL_SUITE_VERSION)
+$(suite_info_prop): cts/build/compatibility_test_suite.mk $(LOCAL_MODULE_MAKEFILE)
 	@echo Generating: $@
-	$(hide) mkdir -p $(dir $@)
-	$(hide) echo "/* This file is auto generated by Android.mk.  Do not modify. */" > $@
-	$(hide) echo "package com.android.compatibility;" >> $@
-	$(hide) echo "public class SuiteInfo {" >> $@
-	$(hide) echo "    public static final String BUILD_NUMBER = \"$(PRIVATE_SUITE_BUILD_NUMBER)\";" >> $@
-	$(hide) echo "    public static final String TARGET_ARCH = \"$(PRIVATE_SUITE_TARGET_ARCH)\";" >> $@
-	$(hide) echo "    public static final String NAME = \"$(PRIVATE_SUITE_NAME)\";" >> $@
-	$(hide) echo "    public static final String FULLNAME = \"$(PRIVATE_SUITE_FULLNAME)\";" >> $@
-	$(hide) echo "    public static final String VERSION = \"$(PRIVATE_SUITE_VERSION)\";" >> $@
-	$(hide) echo "}" >> $@
+	$(hide) echo "# This file is auto generated by Android.mk. Do not modify." > $@
+	$(hide) echo "build_number = $(PRIVATE_SUITE_BUILD_NUMBER)" >> $@
+	$(hide) echo "target_arch = $(PRIVATE_SUITE_TARGET_ARCH)" >> $@
+	$(hide) echo "name = $(PRIVATE_SUITE_NAME)" >> $@
+	$(hide) echo "fullname = $(PRIVATE_SUITE_FULLNAME)" >> $@
+	$(hide) echo "version = $(PRIVATE_SUITE_VERSION)" >> $@
 
 # Reset variables
 LOCAL_SUITE_BUILD_NUMBER :=
@@ -42,8 +38,8 @@
 LOCAL_SUITE_FULLNAME :=
 LOCAL_SUITE_VERSION :=
 
-# Include the SuiteInfo.java
-LOCAL_GENERATED_SOURCES := $(suite_info_java)
+# Include the test suite properties file
+LOCAL_JAVA_RESOURCE_FILES += $(suite_info_prop)
 
 # Add the base libraries
 LOCAL_JAVA_LIBRARIES += tradefed hosttestlib compatibility-host-util
@@ -51,3 +47,5 @@
 LOCAL_MODULE_TAGS := optional
 
 include $(BUILD_HOST_JAVA_LIBRARY)
+
+suite_info_prop :=
diff --git a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/build/CompatibilityBuildProvider.java b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/build/CompatibilityBuildProvider.java
index 722d55a..a7697d7 100644
--- a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/build/CompatibilityBuildProvider.java
+++ b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/build/CompatibilityBuildProvider.java
@@ -16,7 +16,6 @@
 package com.android.compatibility.common.tradefed.build;
 
 import com.android.annotations.VisibleForTesting;
-import com.android.compatibility.SuiteInfo;
 import com.android.tradefed.build.BuildInfo;
 import com.android.tradefed.build.BuildRetrievalError;
 import com.android.tradefed.build.DeviceBuildInfo;
@@ -29,6 +28,7 @@
 import com.android.tradefed.config.OptionClass;
 import com.android.tradefed.device.DeviceNotAvailableException;
 import com.android.tradefed.device.ITestDevice;
+import com.android.tradefed.testtype.suite.TestSuiteInfo;
 
 import java.io.File;
 import java.text.SimpleDateFormat;
@@ -218,28 +218,28 @@
      * Return the SuiteInfo name generated at build time. Exposed for testing.
      */
     protected String getSuiteInfoName() {
-        return SuiteInfo.NAME;
+        return TestSuiteInfo.getInstance().getName();
     }
 
     /**
      * Return the SuiteInfo build number generated at build time. Exposed for testing.
      */
     protected String getSuiteInfoBuildNumber() {
-        return SuiteInfo.BUILD_NUMBER;
+        return TestSuiteInfo.getInstance().getBuildNumber();
     }
 
     /**
      * Return the SuiteInfo fullname generated at build time. Exposed for testing.
      */
     protected String getSuiteInfoFullname() {
-        return SuiteInfo.FULLNAME;
+        return TestSuiteInfo.getInstance().getFullName();
     }
 
     /**
      * Return the SuiteInfo version generated at build time. Exposed for testing.
      */
     protected String getSuiteInfoVersion() {
-        return SuiteInfo.VERSION;
+        return TestSuiteInfo.getInstance().getVersion();
     }
 
     /**
diff --git a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/command/CompatibilityConsole.java b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/command/CompatibilityConsole.java
index 307d648..32e6197 100644
--- a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/command/CompatibilityConsole.java
+++ b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/command/CompatibilityConsole.java
@@ -15,7 +15,6 @@
  */
 package com.android.compatibility.common.tradefed.command;
 
-import com.android.compatibility.SuiteInfo;
 import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
 import com.android.compatibility.common.tradefed.build.CompatibilityBuildProvider;
 import com.android.compatibility.common.tradefed.result.SubPlanHelper;
@@ -32,6 +31,7 @@
 import com.android.tradefed.log.LogUtil.CLog;
 import com.android.tradefed.testtype.IRemoteTest;
 import com.android.tradefed.testtype.IRuntimeHintProvider;
+import com.android.tradefed.testtype.suite.TestSuiteInfo;
 import com.android.tradefed.util.ArrayUtil;
 import com.android.tradefed.util.FileUtil;
 import com.android.tradefed.util.Pair;
@@ -73,8 +73,9 @@
      */
     @Override
     public void run() {
-        printLine(String.format("Android %s %s (%s)", SuiteInfo.FULLNAME, SuiteInfo.VERSION,
-                SuiteInfo.BUILD_NUMBER));
+        printLine(String.format("Android %s %s (%s)", TestSuiteInfo.getInstance().getFullName(),
+                TestSuiteInfo.getInstance().getVersion(),
+                TestSuiteInfo.getInstance().getBuildNumber()));
         printLine("Use \"help\" or \"help all\" to get more information on running commands.");
         super.run();
     }
@@ -87,7 +88,7 @@
             Map<String, String> commandHelp) {
 
         genericHelp.add("Enter 'help add'        for help with 'add subplan' commands");
-        genericHelp.add("\t----- " + SuiteInfo.FULLNAME + " usage ----- ");
+        genericHelp.add("\t----- " + TestSuiteInfo.getInstance().getFullName() + " usage ----- ");
         genericHelp.add("Usage: run <plan> [--module <module name>] [ options ]");
         genericHelp.add("Example: run cts --module CtsGestureTestCases --bugreport-on-failure");
         genericHelp.add("");
@@ -149,8 +150,10 @@
         trie.put(new Runnable() {
             @Override
             public void run() {
-                printLine(String.format("Android %s %s (%s)", SuiteInfo.FULLNAME,
-                        SuiteInfo.VERSION, SuiteInfo.BUILD_NUMBER));
+                printLine(String.format("Android %s %s (%s)",
+                        TestSuiteInfo.getInstance().getFullName(),
+                        TestSuiteInfo.getInstance().getVersion(),
+                        TestSuiteInfo.getInstance().getBuildNumber()));
             }
         }, "version"); // override tradefed 'version' command to print test suite name and version
 
@@ -162,7 +165,8 @@
         }
         String combinedHelp = listHelp +
                 LINE_SEPARATOR +
-                "\t----- " + SuiteInfo.FULLNAME + " specific options ----- " + LINE_SEPARATOR +
+                "\t----- " + TestSuiteInfo.getInstance().getFullName()
+                + " specific options ----- " + LINE_SEPARATOR +
                 "\tp[lans]               List all plans available" + LINE_SEPARATOR +
                 "\tm[odules]             List all modules available" + LINE_SEPARATOR +
                 "\tr[esults]             List all results" + LINE_SEPARATOR;
@@ -175,7 +179,8 @@
         }
         String combinedRunHelp = runHelp +
                 LINE_SEPARATOR +
-                "\t----- " + SuiteInfo.FULLNAME + " specific options ----- " + LINE_SEPARATOR +
+                "\t----- " + TestSuiteInfo.getInstance().getFullName()
+                + " specific options ----- " + LINE_SEPARATOR +
                 "\t<plan> --module/-m <module>       Run a test module" + LINE_SEPARATOR +
                 "\t<plan> --module/-m <module> --test/-t <test_name>    Run a specific test from" +
                 " the module. Test name can be <package>.<class>, <package>.<class>#<method> or "
@@ -210,7 +215,7 @@
      */
     @Override
     protected String getConsolePrompt() {
-        return String.format("%s-tf > ", SuiteInfo.NAME.toLowerCase());
+        return String.format("%s-tf > ", TestSuiteInfo.getInstance().getName().toLowerCase());
     }
 
     private void listModules() {
diff --git a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/targetprep/BusinessLogicPreparer.java b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/targetprep/BusinessLogicPreparer.java
index fded8bf..aa23eb5 100644
--- a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/targetprep/BusinessLogicPreparer.java
+++ b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/targetprep/BusinessLogicPreparer.java
@@ -15,7 +15,6 @@
  */
 package com.android.compatibility.common.tradefed.targetprep;
 
-import com.android.compatibility.SuiteInfo;
 import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
 import com.android.compatibility.common.util.BusinessLogic;
 import com.android.tradefed.build.IBuildInfo;
@@ -26,6 +25,7 @@
 import com.android.tradefed.targetprep.BuildError;
 import com.android.tradefed.targetprep.ITargetCleaner;
 import com.android.tradefed.targetprep.TargetSetupError;
+import com.android.tradefed.testtype.suite.TestSuiteInfo;
 import com.android.tradefed.util.FileUtil;
 import com.android.tradefed.util.StreamUtil;
 
@@ -39,8 +39,6 @@
 @OptionClass(alias="business-logic-preparer")
 public class BusinessLogicPreparer implements ITargetCleaner {
 
-    private static final String LOG_TAG = BusinessLogicPreparer.class.getSimpleName();
-
     /* Placeholder in the service URL for the suite to be configured */
     private static final String SUITE_PLACEHOLDER = "{suite-name}";
 
@@ -72,7 +70,7 @@
             DeviceNotAvailableException {
         // Piece together request URL
         String requestString = String.format("%s?key=%s", mUrl.replace(SUITE_PLACEHOLDER,
-                SuiteInfo.NAME), mApiKey);
+                TestSuiteInfo.getInstance().getName()), mApiKey);
         // Retrieve business logic string from service
         String businessLogicString = null;
         try {
@@ -80,8 +78,8 @@
             businessLogicString = StreamUtil.getStringFromStream(request.openStream());
         } catch (IOException e) {
             throw new TargetSetupError(String.format(
-                    "Cannot connect to business logic service for suite %s", SuiteInfo.NAME), e,
-                    device.getDeviceDescriptor());
+                    "Cannot connect to business logic service for suite %s",
+                    TestSuiteInfo.getInstance().getName()), e, device.getDeviceDescriptor());
         }
         // Push business logic string to host file
         try {
@@ -93,7 +91,7 @@
         } catch (IOException e) {
             throw new TargetSetupError(String.format(
                     "Retrieved business logic for suite %s could not be written to host",
-                    SuiteInfo.NAME), device.getDeviceDescriptor());
+                    TestSuiteInfo.getInstance().getName()), device.getDeviceDescriptor());
         }
         // Push business logic string to device file
         removeDeviceFile(device); // remove any existing business logic file from device
@@ -102,7 +100,7 @@
         } else {
             throw new TargetSetupError(String.format(
                     "Retrieved business logic for suite %s could not be written to device %s",
-                    SuiteInfo.NAME, device.getSerialNumber()), device.getDeviceDescriptor());
+                    TestSuiteInfo.getInstance().getName(), device.getSerialNumber()), device.getDeviceDescriptor());
         }
     }
 
diff --git a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/testtype/CompatibilityTest.java b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/testtype/CompatibilityTest.java
index b722b3b..97fddea 100644
--- a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/testtype/CompatibilityTest.java
+++ b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/testtype/CompatibilityTest.java
@@ -16,7 +16,6 @@
 
 package com.android.compatibility.common.tradefed.testtype;
 
-import com.android.compatibility.SuiteInfo;
 import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
 import com.android.compatibility.common.tradefed.result.InvocationFailureHandler;
 import com.android.compatibility.common.tradefed.result.SubPlanHelper;
@@ -55,6 +54,7 @@
 import com.android.tradefed.testtype.IShardableTest;
 import com.android.tradefed.testtype.IStrictShardableTest;
 import com.android.tradefed.testtype.ITestCollector;
+import com.android.tradefed.testtype.suite.TestSuiteInfo;
 import com.android.tradefed.util.AbiFormatter;
 import com.android.tradefed.util.AbiUtils;
 import com.android.tradefed.util.ArrayUtil;
@@ -605,7 +605,7 @@
      * Exposed for testing.
      */
     protected Set<String> getAbisForBuildTargetArch() {
-        return AbiUtils.getAbisForArch(SuiteInfo.TARGET_ARCH);
+        return AbiUtils.getAbisForArch(TestSuiteInfo.getInstance().getTargetArch());
     }
 
     /**
diff --git a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/testtype/suite/CompatibilityTestSuite.java b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/testtype/suite/CompatibilityTestSuite.java
index 869c373..23ff935 100644
--- a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/testtype/suite/CompatibilityTestSuite.java
+++ b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/testtype/suite/CompatibilityTestSuite.java
@@ -15,7 +15,6 @@
  */
 package com.android.compatibility.common.tradefed.testtype.suite;
 
-import com.android.compatibility.SuiteInfo;
 import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
 import com.android.compatibility.common.tradefed.testtype.CompatibilityTest;
 import com.android.compatibility.common.tradefed.testtype.ISubPlan;
@@ -33,6 +32,7 @@
 import com.android.tradefed.testtype.Abi;
 import com.android.tradefed.testtype.IAbi;
 import com.android.tradefed.testtype.suite.ITestSuite;
+import com.android.tradefed.testtype.suite.TestSuiteInfo;
 import com.android.tradefed.util.AbiFormatter;
 import com.android.tradefed.util.AbiUtils;
 import com.android.tradefed.util.ArrayUtil;
@@ -235,7 +235,7 @@
      * Exposed for testing.
      */
     protected Set<String> getAbisForBuildTargetArch() {
-        return AbiUtils.getAbisForArch(SuiteInfo.TARGET_ARCH);
+        return AbiUtils.getAbisForArch(TestSuiteInfo.getInstance().getTargetArch());
     }
 
     /**
diff --git a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/presubmit/IntegrationTest.java b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/presubmit/IntegrationTest.java
index 4d9bfec..af20a46 100644
--- a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/presubmit/IntegrationTest.java
+++ b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/presubmit/IntegrationTest.java
@@ -18,7 +18,6 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
-import com.android.compatibility.SuiteInfo;
 import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
 import com.android.compatibility.common.tradefed.result.ResultReporter;
 import com.android.compatibility.common.tradefed.testtype.CompatibilityTest;
@@ -40,6 +39,7 @@
 import com.android.tradefed.testtype.IDeviceTest;
 import com.android.tradefed.testtype.IInvocationContextReceiver;
 import com.android.tradefed.testtype.IRemoteTest;
+import com.android.tradefed.testtype.suite.TestSuiteInfo;
 import com.android.tradefed.util.AbiUtils;
 import com.android.tradefed.util.FileUtil;
 
@@ -551,7 +551,7 @@
     @Test
     public void testSingleModuleRun_sharded() throws Exception {
         final String moduleName = "module_sharded";
-        Set<String> abis = AbiUtils.getAbisForArch(SuiteInfo.TARGET_ARCH);
+        Set<String> abis = AbiUtils.getAbisForArch(TestSuiteInfo.getInstance().getTargetArch());
         Iterator<String> ite = abis.iterator();
         final String abi1 = ite.next();
         final String abi2 = ite.next();
@@ -601,7 +601,7 @@
     @Test
     public void testSingleModuleRun_sharded_incomplete() throws Exception {
         final String moduleName = "module_sharded_incomplete";
-        Set<String> abis = AbiUtils.getAbisForArch(SuiteInfo.TARGET_ARCH);
+        Set<String> abis = AbiUtils.getAbisForArch(TestSuiteInfo.getInstance().getTargetArch());
         Iterator<String> ite = abis.iterator();
         final String abi1 = ite.next();
         final String abi2 = ite.next();
@@ -652,7 +652,7 @@
     @Test
     public void testSingleModuleRun_sharded_getTestShard() throws Exception {
         final String moduleName = "module_sharded_getTestShard";
-        Set<String> abis = AbiUtils.getAbisForArch(SuiteInfo.TARGET_ARCH);
+        Set<String> abis = AbiUtils.getAbisForArch(TestSuiteInfo.getInstance().getTargetArch());
         Iterator<String> ite = abis.iterator();
         final String abi1 = ite.next();
         final String abi2 = ite.next();
diff --git a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/presubmit/ValidateTestsAbi.java b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/presubmit/ValidateTestsAbi.java
index dce227f..ebe50a9 100644
--- a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/presubmit/ValidateTestsAbi.java
+++ b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/presubmit/ValidateTestsAbi.java
@@ -19,7 +19,7 @@
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-import com.android.compatibility.SuiteInfo;
+import com.android.tradefed.testtype.suite.TestSuiteInfo;
 import com.android.tradefed.util.AaptParser;
 import com.android.tradefed.util.AbiUtils;
 
@@ -106,7 +106,8 @@
             // We only check the apk that have native code
             if (!result.getNativeCode().isEmpty()) {
                 List<String> supportedAbiApk = result.getNativeCode();
-                Set<String> buildTarget = AbiUtils.getAbisForArch(SuiteInfo.TARGET_ARCH);
+                Set<String> buildTarget = AbiUtils.getAbisForArch(
+                        TestSuiteInfo.getInstance().getTargetArch());
                 // first check, all the abis are supported
                 for (String abi : supportedAbiApk) {
                     if (!buildTarget.contains(abi)) {
@@ -166,7 +167,8 @@
         // we sort to have binary starting with same name, next to each other. The last two
         // characters of their name with be the bitness (32 or 64).
         Collections.sort(orderedList);
-        Set<String> buildTarget = AbiUtils.getAbisForArch(SuiteInfo.TARGET_ARCH);
+        Set<String> buildTarget = AbiUtils.getAbisForArch(
+                TestSuiteInfo.getInstance().getTargetArch());
         // We expect one binary per abi of CTS, they should be appended with 32 or 64
         for (int i = 0; i < orderedList.size(); i=i + buildTarget.size()) {
             List<String> subSet = orderedList.subList(i, i + buildTarget.size());
diff --git a/tools/cts-tradefed/Android.mk b/tools/cts-tradefed/Android.mk
index a539e5b..e3604fb 100644
--- a/tools/cts-tradefed/Android.mk
+++ b/tools/cts-tradefed/Android.mk
@@ -20,12 +20,17 @@
 
 LOCAL_JAVA_RESOURCE_DIRS := res
 LOCAL_JAVA_RESOURCE_DIRS += ../../common/host-side/tradefed/res
+LOCAL_MODULE := cts-tradefed-harness
+LOCAL_JAVA_LIBRARIES += tradefed compatibility-host-util
+include $(BUILD_HOST_JAVA_LIBRARY)
 
+include $(CLEAR_VARS)
 LOCAL_SUITE_BUILD_NUMBER := $(BUILD_NUMBER_FROM_FILE)
 LOCAL_SUITE_TARGET_ARCH := $(TARGET_ARCH)
 LOCAL_SUITE_NAME := CTS
 LOCAL_SUITE_FULLNAME := "Compatibility Test Suite"
 LOCAL_SUITE_VERSION := 8.0_r1
+LOCAL_STATIC_JAVA_LIBRARIES += cts-tradefed-harness
 
 LOCAL_MODULE := cts-tradefed
 LOCAL_COMPATIBILITY_SUITE := general-tests