Merge changes I42cb181f,I6413c9b1

* changes:
  Add sdk_version:"core_platform" to replace no_framework_libs:true
  Remove the no_standard_libs property
diff --git a/android/neverallow.go b/android/neverallow.go
index f751389..f35d1fe 100644
--- a/android/neverallow.go
+++ b/android/neverallow.go
@@ -52,7 +52,6 @@
 	rules = append(rules, createTrebleRules()...)
 	rules = append(rules, createLibcoreRules()...)
 	rules = append(rules, createJavaDeviceForHostRules()...)
-	rules = append(rules, createJavaLibraryHostRules()...)
 	return rules
 }
 
@@ -101,15 +100,11 @@
 		"development",
 	}
 
-	// Core library constraints. The no_standard_libs can only be used in core
-	// library projects. Access to core library targets is restricted using
-	// visibility rules.
+	// Core library constraints. The sdk_version: "none" can only be used in core library projects.
+	// Access to core library targets is restricted using visibility rules.
 	rules := []*rule{
 		neverallow().
 			notIn(coreLibraryProjects...).
-			with("no_standard_libs", "true"),
-		neverallow().
-			notIn(coreLibraryProjects...).
 			with("sdk_version", "none"),
 	}
 
@@ -131,15 +126,6 @@
 	}
 }
 
-func createJavaLibraryHostRules() []*rule {
-	return []*rule{
-		neverallow().
-			moduleType("java_library_host").
-			with("no_standard_libs", "true").
-			because("no_standard_libs makes no sense with java_library_host"),
-	}
-}
-
 func neverallowMutator(ctx BottomUpMutatorContext) {
 	m, ok := ctx.Module().(Module)
 	if !ok {
diff --git a/android/neverallow_test.go b/android/neverallow_test.go
index 62c5142..ee3c94f 100644
--- a/android/neverallow_test.go
+++ b/android/neverallow_test.go
@@ -148,37 +148,6 @@
 	},
 	// Libcore rule tests
 	{
-		name: "no_standard_libs: true inside core libraries",
-		fs: map[string][]byte{
-			"libcore/Blueprints": []byte(`
-				java_library {
-					name: "inside_core_libraries",
-					no_standard_libs: true,
-				}`),
-		},
-	},
-	{
-		name: "no_standard_libs: true outside core libraries",
-		fs: map[string][]byte{
-			"Blueprints": []byte(`
-				java_library {
-					name: "outside_core_libraries",
-					no_standard_libs: true,
-				}`),
-		},
-		expectedError: "module \"outside_core_libraries\": violates neverallow",
-	},
-	{
-		name: "no_standard_libs: false",
-		fs: map[string][]byte{
-			"Blueprints": []byte(`
-				java_library {
-					name: "outside_core_libraries",
-					no_standard_libs: false,
-				}`),
-		},
-	},
-	{
 		name: "sdk_version: \"none\" inside core libraries",
 		fs: map[string][]byte{
 			"libcore/Blueprints": []byte(`
@@ -209,18 +178,6 @@
 				}`),
 		},
 	},
-	// java_library_host rule tests
-	{
-		name: "java_library_host with no_standard_libs: true",
-		fs: map[string][]byte{
-			"libcore/Blueprints": []byte(`
-				java_library_host {
-					name: "inside_core_libraries",
-					no_standard_libs: true,
-				}`),
-		},
-		expectedError: "module \"inside_core_libraries\": violates neverallow",
-	},
 }
 
 func TestNeverallow(t *testing.T) {
@@ -295,9 +252,8 @@
 }
 
 type mockJavaLibraryProperties struct {
-	Libs             []string
-	No_standard_libs *bool
-	Sdk_version      *string
+	Libs        []string
+	Sdk_version *string
 }
 
 type mockJavaLibraryModule struct {
diff --git a/androidmk/cmd/androidmk/android.go b/androidmk/cmd/androidmk/android.go
index 62aa3dc..af81e43 100644
--- a/androidmk/cmd/androidmk/android.go
+++ b/androidmk/cmd/androidmk/android.go
@@ -185,7 +185,6 @@
 			"LOCAL_NO_CRT":                     "nocrt",
 			"LOCAL_ALLOW_UNDEFINED_SYMBOLS":    "allow_undefined_symbols",
 			"LOCAL_RTTI_FLAG":                  "rtti",
-			"LOCAL_NO_STANDARD_LIBRARIES":      "no_standard_libs",
 			"LOCAL_PACK_MODULE_RELOCATIONS":    "pack_relocations",
 			"LOCAL_TIDY":                       "tidy",
 			"LOCAL_USE_CLANG_LLD":              "use_clang_lld",
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/app_test.go b/java/app_test.go
index bb39c16..27802cd 100644
--- a/java/app_test.go
+++ b/java/app_test.go
@@ -546,7 +546,7 @@
 	}
 }
 
-func TestJNIABI(t *testing.T) {
+func TestJNIABI_no_framework_libs_true(t *testing.T) {
 	ctx := testJava(t, cc.GatherRequiredDepsForTest(android.Android)+`
 		cc_library {
 			name: "libjni",
@@ -619,7 +619,80 @@
 	}
 }
 
-func TestJNIPackaging(t *testing.T) {
+func TestJNIABI(t *testing.T) {
+	ctx := testJava(t, cc.GatherRequiredDepsForTest(android.Android)+`
+		cc_library {
+			name: "libjni",
+			system_shared_libs: [],
+			stl: "none",
+		}
+
+		android_test {
+			name: "test",
+			sdk_version: "core_platform",
+			jni_libs: ["libjni"],
+		}
+
+		android_test {
+			name: "test_first",
+			sdk_version: "core_platform",
+			compile_multilib: "first",
+			jni_libs: ["libjni"],
+		}
+
+		android_test {
+			name: "test_both",
+			sdk_version: "core_platform",
+			compile_multilib: "both",
+			jni_libs: ["libjni"],
+		}
+
+		android_test {
+			name: "test_32",
+			sdk_version: "core_platform",
+			compile_multilib: "32",
+			jni_libs: ["libjni"],
+		}
+
+		android_test {
+			name: "test_64",
+			sdk_version: "core_platform",
+			compile_multilib: "64",
+			jni_libs: ["libjni"],
+		}
+		`)
+
+	testCases := []struct {
+		name string
+		abis []string
+	}{
+		{"test", []string{"arm64-v8a"}},
+		{"test_first", []string{"arm64-v8a"}},
+		{"test_both", []string{"arm64-v8a", "armeabi-v7a"}},
+		{"test_32", []string{"armeabi-v7a"}},
+		{"test_64", []string{"arm64-v8a"}},
+	}
+
+	for _, test := range testCases {
+		t.Run(test.name, func(t *testing.T) {
+			app := ctx.ModuleForTests(test.name, "android_common")
+			jniLibZip := app.Output("jnilibs.zip")
+			var abis []string
+			args := strings.Fields(jniLibZip.Args["jarArgs"])
+			for i := 0; i < len(args); i++ {
+				if args[i] == "-P" {
+					abis = append(abis, filepath.Base(args[i+1]))
+					i++
+				}
+			}
+			if !reflect.DeepEqual(abis, test.abis) {
+				t.Errorf("want abis %v, got %v", test.abis, abis)
+			}
+		})
+	}
+}
+
+func TestJNIPackaging_no_framework_libs_true(t *testing.T) {
 	ctx := testJava(t, cc.GatherRequiredDepsForTest(android.Android)+`
 		cc_library {
 			name: "libjni",
@@ -700,7 +773,89 @@
 			}
 		})
 	}
+}
 
+func TestJNIPackaging(t *testing.T) {
+	ctx := testJava(t, cc.GatherRequiredDepsForTest(android.Android)+`
+		cc_library {
+			name: "libjni",
+			system_shared_libs: [],
+			stl: "none",
+		}
+
+		android_app {
+			name: "app",
+			jni_libs: ["libjni"],
+		}
+
+		android_app {
+			name: "app_noembed",
+			jni_libs: ["libjni"],
+			use_embedded_native_libs: false,
+		}
+
+		android_app {
+			name: "app_embed",
+			jni_libs: ["libjni"],
+			use_embedded_native_libs: true,
+		}
+
+		android_test {
+			name: "test",
+			sdk_version: "core_platform",
+			jni_libs: ["libjni"],
+		}
+
+		android_test {
+			name: "test_noembed",
+			sdk_version: "core_platform",
+			jni_libs: ["libjni"],
+			use_embedded_native_libs: false,
+		}
+
+		android_test_helper_app {
+			name: "test_helper",
+			sdk_version: "core_platform",
+			jni_libs: ["libjni"],
+		}
+
+		android_test_helper_app {
+			name: "test_helper_noembed",
+			sdk_version: "core_platform",
+			jni_libs: ["libjni"],
+			use_embedded_native_libs: false,
+		}
+		`)
+
+	testCases := []struct {
+		name       string
+		packaged   bool
+		compressed bool
+	}{
+		{"app", false, false},
+		{"app_noembed", false, false},
+		{"app_embed", true, false},
+		{"test", true, false},
+		{"test_noembed", true, true},
+		{"test_helper", true, false},
+		{"test_helper_noembed", true, true},
+	}
+
+	for _, test := range testCases {
+		t.Run(test.name, func(t *testing.T) {
+			app := ctx.ModuleForTests(test.name, "android_common")
+			jniLibZip := app.MaybeOutput("jnilibs.zip")
+			if g, w := (jniLibZip.Rule != nil), test.packaged; g != w {
+				t.Errorf("expected jni packaged %v, got %v", w, g)
+			}
+
+			if jniLibZip.Rule != nil {
+				if g, w := !strings.Contains(jniLibZip.Args["jarArgs"], "-L 0"), test.compressed; g != w {
+					t.Errorf("expected jni compressed %v, got %v", w, g)
+				}
+			}
+		})
+	}
 }
 
 func TestCertificates(t *testing.T) {
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..4b38451 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)
 		}
@@ -682,7 +674,7 @@
 		return javaSdk, true
 	case ver == "current":
 		return javaSdk, false
-	case ver == "" || ver == "none":
+	case ver == "" || ver == "none" || ver == "core_platform":
 		return javaPlatform, false
 	default:
 		if _, err := strconv.Atoi(ver); err != nil {
@@ -860,7 +852,8 @@
 	var ret string
 	v := sdkContext.sdkVersion()
 	// For PDK builds, use the latest SDK version instead of "current"
-	if ctx.Config().IsPdkBuild() && (v == "" || v == "none" || v == "current") {
+	if ctx.Config().IsPdkBuild() &&
+		(v == "" || v == "none" || v == "core_platform" || v == "current") {
 		sdkVersions := ctx.Config().Get(sdkVersionsKey).([]int)
 		latestSdkVersion := 0
 		if len(sdkVersions) > 0 {
@@ -879,7 +872,11 @@
 		ret = "1.7"
 	} else if ctx.Device() && sdk <= 29 || !ctx.Config().TargetOpenJDK9() {
 		ret = "1.8"
-	} else if ctx.Device() && sdkContext.sdkVersion() != "" && sdkContext.sdkVersion() != "none" && sdk == android.FutureApiLevel {
+	} else if ctx.Device() &&
+		sdkContext.sdkVersion() != "" &&
+		sdkContext.sdkVersion() != "none" &&
+		sdkContext.sdkVersion() != "core_platform" &&
+		sdk == android.FutureApiLevel {
 		// TODO(ccross): once we generate stubs we should be able to use 1.9 for sdk_version: "current"
 		ret = "1.8"
 	} else {
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..6ffe399 100644
--- a/java/sdk.go
+++ b/java/sdk.go
@@ -45,16 +45,13 @@
 	// 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
 }
 
 func sdkVersionOrDefault(ctx android.BaseModuleContext, v string) string {
 	switch v {
-	case "", "none", "current", "system_current", "test_current", "core_current":
+	case "", "none", "current", "test_current", "system_current", "core_current", "core_platform":
 		return ctx.Config().DefaultAppTargetSdk()
 	default:
 		return v
@@ -65,7 +62,7 @@
 // it returns android.FutureApiLevel (10000).
 func sdkVersionToNumber(ctx android.BaseModuleContext, v string) (int, error) {
 	switch v {
-	case "", "none", "current", "test_current", "system_current", "core_current":
+	case "", "none", "current", "test_current", "system_current", "core_current", "core_platform":
 		return ctx.Config().DefaultAppTargetSdkInt(), nil
 	default:
 		n := android.GetNumericSdkVersion(v)
@@ -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(),
 		}
 
@@ -187,7 +182,8 @@
 		}
 	}
 
-	if ctx.Config().UnbundledBuildUsePrebuiltSdks() && v != "" && v != "none" {
+	if ctx.Config().UnbundledBuildUsePrebuiltSdks() &&
+		v != "" && v != "none" && v != "core_platform" {
 		return toPrebuilt(v)
 	}
 
@@ -197,14 +193,19 @@
 			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":
 		return sdkDep{
 			noStandardLibs: true,
 		}
+	case "core_platform":
+		return sdkDep{
+			useDefaultLibs:     true,
+			frameworkResModule: "framework-res",
+			noFrameworksLibs:   true,
+		}
 	case "current":
 		return toModule("android_stubs_current", "framework-res", sdkFrameworkAidlPath(ctx))
 	case "system_current":
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..915333e 100644
--- a/java/sdk_test.go
+++ b/java/sdk_test.go
@@ -55,6 +55,14 @@
 			aidl:          "",
 		},
 		{
+			name:          `sdk_version:"core_platform"`,
+			properties:    `sdk_version:"core_platform"`,
+			bootclasspath: config.DefaultBootclasspathLibraries,
+			system:        config.DefaultSystemModules,
+			classpath:     []string{},
+			aidl:          "",
+		},
+		{
 			name:          "blank sdk version",
 			properties:    `sdk_version: "",`,
 			bootclasspath: config.DefaultBootclasspathLibraries,
@@ -113,14 +121,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 +129,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 +153,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..5d116a7 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"],
@@ -73,13 +73,13 @@
 
 		android_app {
 			name: "framework-res",
-			no_framework_libs: true,
+			sdk_version: "core_platform",
 		}
 
 		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,
 		}