diff --git a/java/aar.go b/java/aar.go
index adea87f..47f6e5f 100644
--- a/java/aar.go
+++ b/java/aar.go
@@ -517,10 +517,6 @@
 	return false
 }
 
-func (a *AARImport) noStandardLibs() bool {
-	return false
-}
-
 var _ AndroidLibraryDependency = (*AARImport)(nil)
 
 func (a *AARImport) ExportPackage() android.Path {
diff --git a/java/droiddoc.go b/java/droiddoc.go
index e1476a2..a8cf1c0 100644
--- a/java/droiddoc.go
+++ b/java/droiddoc.go
@@ -171,10 +171,6 @@
 	// list of java libraries that will be in the classpath.
 	Libs []string `android:"arch_variant"`
 
-	// don't build against the default libraries (bootclasspath, ext, and framework for device
-	// targets)
-	No_standard_libs *bool
-
 	// don't build against the framework libraries (ext, and framework for device targets)
 	No_framework_libs *bool
 
@@ -542,10 +538,6 @@
 	return Bool(j.properties.No_framework_libs)
 }
 
-func (j *Javadoc) noStandardLibs() bool {
-	return Bool(j.properties.No_standard_libs)
-}
-
 func (j *Javadoc) addDeps(ctx android.BottomUpMutatorContext) {
 	if ctx.Device() {
 		sdkDep := decodeSdkDep(ctx, sdkContext(j))
diff --git a/java/java.go b/java/java.go
index c42ca28..2a5c5d3 100644
--- a/java/java.go
+++ b/java/java.go
@@ -82,10 +82,6 @@
 	// list of files that should be excluded from java_resources and java_resource_dirs
 	Exclude_java_resources []string `android:"path,arch_variant"`
 
-	// don't build against the default libraries (bootclasspath, ext, and framework for device
-	// targets)
-	No_standard_libs *bool
-
 	// don't build against the framework libraries (ext, and framework for device targets)
 	No_framework_libs *bool
 
@@ -490,10 +486,6 @@
 	return Bool(j.properties.No_framework_libs)
 }
 
-func (j *Module) noStandardLibs() bool {
-	return Bool(j.properties.No_standard_libs)
-}
-
 func (j *Module) deps(ctx android.BottomUpMutatorContext) {
 	if ctx.Device() {
 		sdkDep := decodeSdkDep(ctx, sdkContext(j))
@@ -513,8 +505,8 @@
 				}
 			}
 		} else if j.deviceProperties.System_modules == nil {
-			ctx.PropertyErrorf("no_standard_libs",
-				"system_modules is required to be set when no_standard_libs is true, did you mean no_framework_libs?")
+			ctx.PropertyErrorf("sdk_version",
+				`system_modules is required to be set when sdk_version is "none", did you mean no_framework_libs?`)
 		} else if *j.deviceProperties.System_modules != "none" {
 			ctx.AddVariationDependencies(nil, systemModulesTag, *j.deviceProperties.System_modules)
 		}
diff --git a/java/java_test.go b/java/java_test.go
index cecc8da..22dec07 100644
--- a/java/java_test.go
+++ b/java/java_test.go
@@ -1013,7 +1013,7 @@
 		java_library {
 			name: "bar",
 			srcs: ["b.java"],
-			no_standard_libs: true,
+			sdk_version: "none",
 			system_modules: "none",
 			patch_module: "java.base",
 		}
diff --git a/java/sdk.go b/java/sdk.go
index 9dfb38b..e01b730 100644
--- a/java/sdk.go
+++ b/java/sdk.go
@@ -45,9 +45,6 @@
 	// targetSdkVersion returns the target_sdk_version property of the current module, or sdkVersion() if it is not set.
 	targetSdkVersion() string
 
-	// Temporarily provide access to the no_standard_libs property (where present).
-	noStandardLibs() bool
-
 	// Temporarily provide access to the no_frameworks_libs property (where present).
 	noFrameworkLibs() bool
 }
@@ -145,8 +142,7 @@
 			jars:     android.Paths{jarPath.Path(), lambdaStubsPath},
 			aidl:     android.OptionalPathForPath(aidlPath.Path()),
 
-			// Pass values straight through for now to match previous behavior.
-			noStandardLibs:   sdkContext.noStandardLibs(),
+			// Pass value straight through for now to match previous behavior.
 			noFrameworksLibs: sdkContext.noFrameworkLibs(),
 		}
 	}
@@ -159,8 +155,7 @@
 			frameworkResModule: r,
 			aidl:               android.OptionalPathForPath(aidl),
 
-			// Pass values straight through for now to match previous behavior.
-			noStandardLibs:   sdkContext.noStandardLibs(),
+			// Pass value straight through for now to match previous behavior.
 			noFrameworksLibs: sdkContext.noFrameworkLibs(),
 		}
 
@@ -197,8 +192,7 @@
 			useDefaultLibs:     true,
 			frameworkResModule: "framework-res",
 
-			// Pass values straight through for now to match previous behavior.
-			noStandardLibs:   sdkContext.noStandardLibs(),
+			// Pass value straight through for now to match previous behavior.
 			noFrameworksLibs: sdkContext.noFrameworkLibs(),
 		}
 	case "none":
diff --git a/java/sdk_library.go b/java/sdk_library.go
index 01531c5..b4a3f29 100644
--- a/java/sdk_library.go
+++ b/java/sdk_library.go
@@ -385,7 +385,6 @@
 		Device_specific   *bool
 		Product_specific  *bool
 		Compile_dex       *bool
-		No_standard_libs  *bool
 		System_modules    *string
 		Java_version      *string
 		Product_variables struct {
diff --git a/java/sdk_test.go b/java/sdk_test.go
index 1efe83b..32de880 100644
--- a/java/sdk_test.go
+++ b/java/sdk_test.go
@@ -113,14 +113,6 @@
 		},
 		{
 
-			name:          "nostdlib - no_standard_libs: true",
-			properties:    `no_standard_libs: true, system_modules: "none"`,
-			system:        "none",
-			bootclasspath: []string{`""`},
-			classpath:     []string{},
-		},
-		{
-
 			name:          "nostdlib",
 			properties:    `sdk_version: "none", system_modules: "none"`,
 			system:        "none",
@@ -129,14 +121,6 @@
 		},
 		{
 
-			name:          "nostdlib system_modules - no_standard_libs: true",
-			properties:    `no_standard_libs: true, system_modules: "core-platform-api-stubs-system-modules"`,
-			system:        "core-platform-api-stubs-system-modules",
-			bootclasspath: []string{`""`},
-			classpath:     []string{},
-		},
-		{
-
 			name:          "nostdlib system_modules",
 			properties:    `sdk_version: "none", system_modules: "core-platform-api-stubs-system-modules"`,
 			system:        "core-platform-api-stubs-system-modules",
@@ -161,12 +145,6 @@
 			bootclasspath: []string{"jdk8/jre/lib/jce.jar", "jdk8/jre/lib/rt.jar"},
 		},
 		{
-			name:       "host supported nostdlib - no_standard_libs: true",
-			host:       android.Host,
-			properties: `host_supported: true, no_standard_libs: true, system_modules: "none"`,
-			classpath:  []string{},
-		},
-		{
 			name:       "host supported nostdlib",
 			host:       android.Host,
 			properties: `host_supported: true, sdk_version: "none", system_modules: "none"`,
diff --git a/java/testing.go b/java/testing.go
index 7cd1871..18fd30a 100644
--- a/java/testing.go
+++ b/java/testing.go
@@ -64,7 +64,7 @@
 		java_library {
 			name: "framework",
 			srcs: ["a.java"],
-			no_standard_libs: true,
+			sdk_version: "none",
 			system_modules: "core-platform-api-stubs-system-modules",
 			aidl: {
 				export_include_dirs: ["framework/aidl"],
@@ -79,7 +79,7 @@
 		java_library {
 			name: "android.hidl.base-V1.0-java",
 			srcs: ["a.java"],
-			no_standard_libs: true,
+			sdk_version: "none",
 			system_modules: "core-platform-api-stubs-system-modules",
 			installable: true,
 		}
@@ -87,7 +87,7 @@
 		java_library {
 			name: "android.hidl.manager-V1.0-java",
 			srcs: ["a.java"],
-			no_standard_libs: true,
+			sdk_version: "none",
 			system_modules: "core-platform-api-stubs-system-modules",
 			installable: true,
 		}
@@ -95,7 +95,7 @@
 		java_library {
 			name: "org.apache.http.legacy",
 			srcs: ["a.java"],
-			no_standard_libs: true,
+			sdk_version: "none",
 			system_modules: "core-platform-api-stubs-system-modules",
 			installable: true,
 		}
