diff --git a/android/prebuilt_test.go b/android/prebuilt_test.go
index 6c3cd9e..8029b85 100644
--- a/android/prebuilt_test.go
+++ b/android/prebuilt_test.go
@@ -22,10 +22,9 @@
 )
 
 var prebuiltsTests = []struct {
-	name      string
-	replaceBp bool // modules is added to default bp boilerplate if false.
-	modules   string
-	prebuilt  []OsType
+	name     string
+	modules  string
+	prebuilt []OsClass
 }{
 	{
 		name: "no prebuilt",
@@ -43,7 +42,7 @@
 				prefer: false,
 				srcs: ["prebuilt_file"],
 			}`,
-		prebuilt: []OsType{Android, BuildOs},
+		prebuilt: []OsClass{Device, Host},
 	},
 	{
 		name: "no source prebuilt preferred",
@@ -53,7 +52,7 @@
 				prefer: true,
 				srcs: ["prebuilt_file"],
 			}`,
-		prebuilt: []OsType{Android, BuildOs},
+		prebuilt: []OsClass{Device, Host},
 	},
 	{
 		name: "prebuilt not preferred",
@@ -81,7 +80,7 @@
 				prefer: true,
 				srcs: ["prebuilt_file"],
 			}`,
-		prebuilt: []OsType{Android, BuildOs},
+		prebuilt: []OsClass{Device, Host},
 	},
 	{
 		name: "prebuilt no file not preferred",
@@ -121,7 +120,7 @@
 				prefer: true,
 				srcs: [":fg"],
 			}`,
-		prebuilt: []OsType{Android, BuildOs},
+		prebuilt: []OsClass{Device, Host},
 	},
 	{
 		name: "prebuilt module for device only",
@@ -136,7 +135,7 @@
 				prefer: true,
 				srcs: ["prebuilt_file"],
 			}`,
-		prebuilt: []OsType{Android},
+		prebuilt: []OsClass{Device},
 	},
 	{
 		name: "prebuilt file for host only",
@@ -154,7 +153,7 @@
 					},
 				},
 			}`,
-		prebuilt: []OsType{BuildOs},
+		prebuilt: []OsClass{Host},
 	},
 	{
 		name: "prebuilt override not preferred",
@@ -192,72 +191,7 @@
 				prefer: true,
 				srcs: ["prebuilt_file"],
 			}`,
-		prebuilt: []OsType{Android, BuildOs},
-	},
-	{
-		name:      "prebuilt including default-disabled OS",
-		replaceBp: true,
-		modules: `
-			source {
-				name: "foo",
-				deps: [":bar"],
-				target: {
-					windows: {
-						enabled: true,
-					},
-				},
-			}
-
-			source {
-				name: "bar",
-				target: {
-					windows: {
-						enabled: true,
-					},
-				},
-			}
-
-			prebuilt {
-				name: "bar",
-				prefer: true,
-				srcs: ["prebuilt_file"],
-				target: {
-					windows: {
-						enabled: true,
-					},
-				},
-			}`,
-		prebuilt: []OsType{Android, BuildOs, Windows},
-	},
-	{
-		name:      "fall back to source for default-disabled OS",
-		replaceBp: true,
-		modules: `
-			source {
-				name: "foo",
-				deps: [":bar"],
-				target: {
-					windows: {
-						enabled: true,
-					},
-				},
-			}
-
-			source {
-				name: "bar",
-				target: {
-					windows: {
-						enabled: true,
-					},
-				},
-			}
-
-			prebuilt {
-				name: "bar",
-				prefer: true,
-				srcs: ["prebuilt_file"],
-			}`,
-		prebuilt: []OsType{Android, BuildOs},
+		prebuilt: []OsClass{Device, Host},
 	},
 }
 
@@ -269,25 +203,14 @@
 
 	for _, test := range prebuiltsTests {
 		t.Run(test.name, func(t *testing.T) {
-			bp := test.modules
-			if !test.replaceBp {
-				bp = bp + `
-					source {
-						name: "foo",
-						deps: [":bar"],
-					}`
-			}
+			bp := `
+				source {
+					name: "foo",
+					deps: [":bar"],
+				}
+				` + test.modules
 			config := TestArchConfig(buildDir, nil, bp, fs)
 
-			// Add windows to the target list to test the logic when a variant is
-			// disabled by default.
-			if !Windows.DefaultDisabled {
-				t.Errorf("windows is assumed to be disabled by default")
-			}
-			config.config.Targets[Windows] = []Target{
-				{Windows, Arch{ArchType: X86_64}, NativeBridgeDisabled, "", ""},
-			}
-
 			ctx := NewTestArchContext()
 			registerTestPrebuiltBuildComponents(ctx)
 			ctx.RegisterModuleType("filegroup", FileGroupFactory)
@@ -300,7 +223,7 @@
 
 			for _, variant := range ctx.ModuleVariantsForTests("foo") {
 				foo := ctx.ModuleForTests("foo", variant)
-				t.Run(foo.Module().Target().Os.String(), func(t *testing.T) {
+				t.Run(foo.Module().Target().Os.Class.String(), func(t *testing.T) {
 					var dependsOnSourceModule, dependsOnPrebuiltModule bool
 					ctx.VisitDirectDeps(foo.Module(), func(m blueprint.Module) {
 						if _, ok := m.(*sourceModule); ok {
@@ -314,38 +237,26 @@
 						}
 					})
 
-					moduleIsDisabled := !foo.Module().Enabled()
 					deps := foo.Module().(*sourceModule).deps
-					if moduleIsDisabled {
-						if len(deps) > 0 {
-							t.Errorf("disabled module got deps: %v", deps)
-						}
-					} else {
-						if len(deps) != 1 {
-							t.Errorf("deps does not have single path, but is %v", deps)
-						}
+					if deps == nil || len(deps) != 1 {
+						t.Errorf("deps does not have single path, but is %v", deps)
 					}
-
 					var usingSourceFile, usingPrebuiltFile bool
-					if len(deps) > 0 && deps[0].String() == "source_file" {
+					if deps[0].String() == "source_file" {
 						usingSourceFile = true
 					}
-					if len(deps) > 0 && deps[0].String() == "prebuilt_file" {
+					if deps[0].String() == "prebuilt_file" {
 						usingPrebuiltFile = true
 					}
 
 					prebuilt := false
 					for _, os := range test.prebuilt {
-						if os == foo.Module().Target().Os {
+						if os == foo.Module().Target().Os.Class {
 							prebuilt = true
 						}
 					}
 
 					if prebuilt {
-						if moduleIsDisabled {
-							t.Errorf("dependent module for prebuilt is disabled")
-						}
-
 						if !dependsOnPrebuiltModule {
 							t.Errorf("doesn't depend on prebuilt module")
 						}
@@ -359,7 +270,7 @@
 						if usingSourceFile {
 							t.Errorf("using source_file")
 						}
-					} else if !moduleIsDisabled {
+					} else {
 						if dependsOnPrebuiltModule {
 							t.Errorf("depends on prebuilt module")
 						}
