diff --git a/android/config.go b/android/config.go
index 43d743b..2ce7f48 100644
--- a/android/config.go
+++ b/android/config.go
@@ -31,6 +31,7 @@
 
 var Bool = proptools.Bool
 var String = proptools.String
+var FutureApiLevel = 10000
 
 // The configuration file name
 const configFileName = "soong.config"
@@ -453,7 +454,7 @@
 	if Bool(c.ProductVariables.Platform_sdk_final) {
 		return c.PlatformSdkVersionInt()
 	} else {
-		return 10000
+		return FutureApiLevel
 	}
 }
 
@@ -657,6 +658,17 @@
 	return c.config.ProductVariables.ExtraVndkVersions
 }
 
+func (c *deviceConfig) SystemSdkVersions() []string {
+	if c.config.ProductVariables.DeviceSystemSdkVersions == nil {
+		return nil
+	}
+	return *c.config.ProductVariables.DeviceSystemSdkVersions
+}
+
+func (c *deviceConfig) PlatformSystemSdkVersions() []string {
+	return c.config.ProductVariables.Platform_systemsdk_versions
+}
+
 func (c *deviceConfig) OdmPath() string {
 	if c.config.ProductVariables.OdmPath != nil {
 		return *c.config.ProductVariables.OdmPath
diff --git a/android/variable.go b/android/variable.go
index d58ed6a..40fa45e 100644
--- a/android/variable.go
+++ b/android/variable.go
@@ -115,13 +115,15 @@
 	Platform_version_active_codenames []string `json:",omitempty"`
 	Platform_version_future_codenames []string `json:",omitempty"`
 	Platform_vndk_version             *string  `json:",omitempty"`
+	Platform_systemsdk_versions       []string `json:",omitempty"`
 
-	DeviceName        *string   `json:",omitempty"`
-	DeviceArch        *string   `json:",omitempty"`
-	DeviceArchVariant *string   `json:",omitempty"`
-	DeviceCpuVariant  *string   `json:",omitempty"`
-	DeviceAbi         *[]string `json:",omitempty"`
-	DeviceVndkVersion *string   `json:",omitempty"`
+	DeviceName              *string   `json:",omitempty"`
+	DeviceArch              *string   `json:",omitempty"`
+	DeviceArchVariant       *string   `json:",omitempty"`
+	DeviceCpuVariant        *string   `json:",omitempty"`
+	DeviceAbi               *[]string `json:",omitempty"`
+	DeviceVndkVersion       *string   `json:",omitempty"`
+	DeviceSystemSdkVersions *[]string `json:",omitempty"`
 
 	DeviceSecondaryArch        *string   `json:",omitempty"`
 	DeviceSecondaryArchVariant *string   `json:",omitempty"`
diff --git a/java/java.go b/java/java.go
index 94ec85e..65e3b41 100644
--- a/java/java.go
+++ b/java/java.go
@@ -308,7 +308,7 @@
 func sdkStringToNumber(ctx android.BaseContext, v string) int {
 	switch v {
 	case "", "current", "system_current", "test_current":
-		return 10000
+		return android.FutureApiLevel
 	default:
 		if i, err := strconv.Atoi(android.GetNumericSdkVersion(v)); err != nil {
 			ctx.PropertyErrorf("sdk_version", "invalid sdk version")
@@ -336,6 +336,22 @@
 		return sdkDep{}
 	}
 
+	// Ensures that the specificed system SDK version is one of BOARD_SYSTEMSDK_VERSIONS (for vendor apks)
+	// or PRODUCT_SYSTEMSDK_VERSIONS (for other apks or when BOARD_SYSTEMSDK_VERSIONS is not set)
+	if strings.HasPrefix(v, "system_") && i != android.FutureApiLevel {
+		allowed_versions := ctx.DeviceConfig().PlatformSystemSdkVersions()
+		if ctx.DeviceSpecific() || ctx.SocSpecific() {
+			if len(ctx.DeviceConfig().SystemSdkVersions()) > 0 {
+				allowed_versions = ctx.DeviceConfig().SystemSdkVersions()
+			}
+		}
+		version := strings.TrimPrefix(v, "system_")
+		if len(allowed_versions) > 0 && !android.InList(version, allowed_versions) {
+			ctx.PropertyErrorf("sdk_version", "incompatible sdk version %q. System SDK version should be one of %q",
+				v, allowed_versions)
+		}
+	}
+
 	toFile := func(v string) sdkDep {
 		dir := filepath.Join("prebuilts/sdk", v)
 		jar := filepath.Join(dir, "android.jar")
@@ -638,7 +654,7 @@
 		flags.javaVersion = "1.7"
 	} else if ctx.Device() && sdk <= 26 || !ctx.Config().TargetOpenJDK9() {
 		flags.javaVersion = "1.8"
-	} else if ctx.Device() && String(j.deviceProperties.Sdk_version) != "" && sdk == 10000 {
+	} else if ctx.Device() && String(j.deviceProperties.Sdk_version) != "" && sdk == android.FutureApiLevel {
 		// TODO(ccross): once we generate stubs we should be able to use 1.9 for sdk_version: "current"
 		flags.javaVersion = "1.8"
 	} else {
diff --git a/java/java_test.go b/java/java_test.go
index e8298a2..db0b7a7 100644
--- a/java/java_test.go
+++ b/java/java_test.go
@@ -59,7 +59,9 @@
 	if env["ANDROID_JAVA8_HOME"] == "" {
 		env["ANDROID_JAVA8_HOME"] = "jdk8"
 	}
-	return android.TestArchConfig(buildDir, env)
+	config := android.TestArchConfig(buildDir, env)
+	config.ProductVariables.DeviceSystemSdkVersions = &[]string{"14", "15"}
+	return config
 
 }
 
