diff options
Diffstat (limited to 'java')
-rw-r--r-- | java/java.go | 23 | ||||
-rw-r--r-- | java/java_test.go | 29 |
2 files changed, 43 insertions, 9 deletions
diff --git a/java/java.go b/java/java.go index dbf202a0..8159af85 100644 --- a/java/java.go +++ b/java/java.go @@ -597,6 +597,29 @@ func (j *Module) collectBuilderFlags(ctx android.ModuleContext, deps deps) javaB // classpath flags.bootClasspath.AddPaths(deps.bootClasspath) flags.classpath.AddPaths(deps.classpath) + + if len(flags.bootClasspath) == 0 && ctx.Host() && !ctx.Config().TargetOpenJDK9() && + !Bool(j.properties.No_standard_libs) && + inList(flags.javaVersion, []string{"1.6", "1.7", "1.8"}) { + // Give host-side tools a version of OpenJDK's standard libraries + // close to what they're targeting. As of Dec 2017, AOSP is only + // bundling OpenJDK 8 and 9, so nothing < 8 is available. + // + // When building with OpenJDK 8, the following should have no + // effect since those jars would be available by default. + // + // When building with OpenJDK 9 but targeting a version < 1.8, + // putting them on the bootclasspath means that: + // a) code can't (accidentally) refer to OpenJDK 9 specific APIs + // b) references to existing APIs are not reinterpreted in an + // OpenJDK 9-specific way, eg. calls to subclasses of + // java.nio.Buffer as in http://b/70862583 + java8Home := ctx.Config().Getenv("ANDROID_JAVA8_HOME") + flags.bootClasspath = append(flags.bootClasspath, + android.PathForSource(ctx, java8Home, "jre/lib/jce.jar"), + android.PathForSource(ctx, java8Home, "jre/lib/rt.jar")) + } + // systemModules if deps.systemModules != nil { flags.systemModules = append(flags.systemModules, deps.systemModules) diff --git a/java/java_test.go b/java/java_test.go index 84fe9030..6e14a706 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -53,6 +53,12 @@ func TestMain(m *testing.M) { } func testConfig(env map[string]string) android.Config { + if env == nil { + env = make(map[string]string) + } + if env["ANDROID_JAVA8_HOME"] == "" { + env["ANDROID_JAVA8_HOME"] = "jdk8" + } return android.TestArchConfig(buildDir, env) } @@ -150,6 +156,9 @@ func testContext(config android.Config, bp string, "build/target/product/security/testkey": nil, "build/soong/scripts/jar-wrapper.sh": nil, + + "jdk8/jre/lib/jce.jar": nil, + "jdk8/jre/lib/rt.jar": nil, } for k, v := range fs { @@ -364,11 +373,12 @@ var classpathTestcases = []struct { }, { - name: "host default", - moduleType: "java_library_host", - properties: ``, - host: android.Host, - classpath: []string{}, + name: "host default", + moduleType: "java_library_host", + properties: ``, + host: android.Host, + bootclasspath: []string{"jdk8/jre/lib/jce.jar", "jdk8/jre/lib/rt.jar"}, + classpath: []string{}, }, { name: "host nostdlib", @@ -379,10 +389,11 @@ var classpathTestcases = []struct { }, { - name: "host supported default", - host: android.Host, - properties: `host_supported: true,`, - classpath: []string{}, + name: "host supported default", + host: android.Host, + properties: `host_supported: true,`, + classpath: []string{}, + bootclasspath: []string{"jdk8/jre/lib/jce.jar", "jdk8/jre/lib/rt.jar"}, }, { name: "host supported nostdlib", |