diff --git a/sdk/sdk_test.go b/sdk/sdk_test.go
index 898ecea..095f836 100644
--- a/sdk/sdk_test.go
+++ b/sdk/sdk_test.go
@@ -226,8 +226,8 @@
 }
 
 type EmbeddedPropertiesStruct struct {
-	S_Embedded_Common    string `android:"arch_variant"`
-	S_Embedded_Different string `android:"arch_variant"`
+	S_Embedded_Common    string
+	S_Embedded_Different string
 }
 
 type testPropertiesStruct struct {
@@ -235,11 +235,11 @@
 	private     string
 	Public_Kept string `sdk:"keep"`
 	S_Common    string
-	S_Different string `android:"arch_variant"`
+	S_Different string
 	A_Common    []string
-	A_Different []string `android:"arch_variant"`
+	A_Different []string
 	F_Common    *bool
-	F_Different *bool `android:"arch_variant"`
+	F_Different *bool
 	EmbeddedPropertiesStruct
 }
 
@@ -346,26 +346,3 @@
 		},
 		structs[1])
 }
-
-func TestCommonValueOptimization_InvalidArchSpecificVariants(t *testing.T) {
-	common := &testPropertiesStruct{name: "common"}
-	structs := []propertiesContainer{
-		&testPropertiesStruct{
-			name:     "struct-0",
-			S_Common: "should-be-but-is-not-common0",
-		},
-		&testPropertiesStruct{
-			name:     "struct-1",
-			S_Common: "should-be-but-is-not-common1",
-		},
-	}
-
-	extractor := newCommonValueExtractor(common)
-
-	h := TestHelper{t}
-
-	err := extractor.extractCommonProperties(common, structs)
-	h.AssertErrorMessageEquals("unexpected error", `field "S_Common" is not tagged as "arch_variant" but has arch specific properties:
-    "struct-0" has value "should-be-but-is-not-common0"
-    "struct-1" has value "should-be-but-is-not-common1"`, err)
-}
diff --git a/sdk/update.go b/sdk/update.go
index bcc2c77..03a5c03 100644
--- a/sdk/update.go
+++ b/sdk/update.go
@@ -1225,9 +1225,6 @@
 
 	// The empty value for the field.
 	emptyValue reflect.Value
-
-	// True if the property can support arch variants false otherwise.
-	archVariant bool
 }
 
 func (p extractorProperty) String() string {
@@ -1306,7 +1303,6 @@
 				name,
 				fieldGetter,
 				reflect.Zero(field.Type),
-				proptools.HasTag(field, "android", "arch_variant"),
 			}
 			e.properties = append(e.properties, property)
 		}
@@ -1374,16 +1370,10 @@
 		fieldGetter := property.getter
 
 		// Check to see if all the structures have the same value for the field. The commonValue
-		// is nil on entry to the loop and if it is nil on exit then there is no common value or
-		// all the values have been filtered out, otherwise it points to the common value.
+		// is nil on entry to the loop and if it is nil on exit then there is no common value,
+		// otherwise it points to the common value.
 		var commonValue *reflect.Value
 
-		// Assume that all the values will be the same.
-		//
-		// While similar to this is not quite the same as commonValue == nil. If all the values
-		// have been filtered out then this will be false but commonValue == nil will be true.
-		valuesDiffer := false
-
 		for i := 0; i < sliceValue.Len(); i++ {
 			container := sliceValue.Index(i).Interface().(propertiesContainer)
 			itemValue := reflect.ValueOf(container.optimizableProperties())
@@ -1397,13 +1387,12 @@
 				// no value in common so break out.
 				if !reflect.DeepEqual(fieldValue.Interface(), commonValue.Interface()) {
 					commonValue = nil
-					valuesDiffer = true
 					break
 				}
 			}
 		}
 
-		// If the fields all have common value then store it in the common struct field
+		// If the fields all have a common value then store it in the common struct field
 		// and set the input struct's field to the empty value.
 		if commonValue != nil {
 			emptyValue := property.emptyValue
@@ -1415,21 +1404,6 @@
 				fieldValue.Set(emptyValue)
 			}
 		}
-
-		if valuesDiffer && !property.archVariant {
-			// The values differ but the property does not support arch variants so it
-			// is an error.
-			var details strings.Builder
-			for i := 0; i < sliceValue.Len(); i++ {
-				container := sliceValue.Index(i).Interface().(propertiesContainer)
-				itemValue := reflect.ValueOf(container.optimizableProperties())
-				fieldValue := fieldGetter(itemValue)
-
-				_, _ = fmt.Fprintf(&details, "\n    %q has value %q", container.String(), fieldValue.Interface())
-			}
-
-			return fmt.Errorf("field %q is not tagged as \"arch_variant\" but has arch specific properties:%s", property.String(), details.String())
-		}
 	}
 
 	return nil
