diff --git a/sh/sh_binary.go b/sh/sh_binary.go
index 320e97f..853f3d3 100644
--- a/sh/sh_binary.go
+++ b/sh/sh_binary.go
@@ -15,7 +15,6 @@
 package sh
 
 import (
-	"fmt"
 	"path/filepath"
 	"strings"
 
@@ -165,9 +164,6 @@
 
 	// Test options.
 	Test_options android.CommonTestOptions
-
-	// a list of extra test configuration files that should be installed with the module.
-	Extra_test_configs []string `android:"path,arch_variant"`
 }
 
 type ShBinary struct {
@@ -190,9 +186,8 @@
 
 	installDir android.InstallPath
 
-	data             []android.DataPath
-	testConfig       android.Path
-	extraTestConfigs android.Paths
+	data       []android.DataPath
+	testConfig android.Path
 
 	dataModules map[string]android.Path
 }
@@ -476,7 +471,6 @@
 		HostTemplate:           "${ShellTestConfigTemplate}",
 	})
 
-	s.extraTestConfigs = android.PathsForModuleSrc(ctx, s.testProperties.Extra_test_configs)
 	s.dataModules = make(map[string]android.Path)
 	ctx.VisitDirectDeps(func(dep android.Module) {
 		depTag := ctx.OtherModuleDependencyTag(dep)
@@ -516,27 +510,6 @@
 
 	installedData := ctx.InstallTestData(s.installDir, s.data)
 	s.installedFile = ctx.InstallExecutable(s.installDir, s.outputFilePath.Base(), s.outputFilePath, installedData...)
-
-	mkEntries := s.AndroidMkEntries()[0]
-	android.SetProvider(ctx, tradefed.BaseTestProviderKey, tradefed.BaseTestProviderData{
-		TestcaseRelDataFiles: addArch(ctx.Arch().ArchType.String(), installedData.Paths()),
-		OutputFile:           s.outputFilePath,
-		TestConfig:           s.testConfig,
-		TestSuites:           s.testProperties.Test_suites,
-		IsHost:               false,
-		IsUnitTest:           Bool(s.testProperties.Test_options.Unit_test),
-		MkInclude:            mkEntries.Include,
-		MkAppClass:           mkEntries.Class,
-		InstallDir:           s.installDir,
-	})
-}
-
-func addArch(archType string, paths android.Paths) []string {
-	archRelPaths := []string{}
-	for _, p := range paths {
-		archRelPaths = append(archRelPaths, fmt.Sprintf("%s/%s", archType, p.Rel()))
-	}
-	return archRelPaths
 }
 
 func (s *ShTest) InstallInData() bool {
@@ -560,9 +533,6 @@
 					entries.AddStrings("LOCAL_TEST_DATA_BINS", s.testProperties.Data_bins...)
 				}
 				entries.SetBoolIfTrue("LOCAL_COMPATIBILITY_PER_TESTCASE_DIRECTORY", Bool(s.testProperties.Per_testcase_directory))
-				if len(s.extraTestConfigs) > 0 {
-					entries.AddStrings("LOCAL_EXTRA_FULL_TEST_CONFIGS", s.extraTestConfigs.Strings()...)
-				}
 
 				s.testProperties.Test_options.SetAndroidMkEntries(entries)
 			},
