【发布时间】:2020-11-27 08:57:19
【问题描述】:
当我完成编译时,有些模块使用jdk1.9,有些使用jdk1.8(因为date 0错误,它不能用jdk1.9编译)。
那么,对于一些特殊的模块,如何在编译完成时指定特殊的JDK呢? Android.mk中如何配置特殊jdk版本?
【问题讨论】:
当我完成编译时,有些模块使用jdk1.9,有些使用jdk1.8(因为date 0错误,它不能用jdk1.9编译)。
那么,对于一些特殊的模块,如何在编译完成时指定特殊的JDK呢? Android.mk中如何配置特殊jdk版本?
【问题讨论】:
对于 AOSP 10:它是 Android.mk 中的 LOCAL_JAVA_LANGUAGE_VERSION。
自:
构建\soong\androidmk\cmd\androidmk\android.go:
"LOCAL_JAVA_LANGUAGE_VERSION": "java_version",
构建\soong\java\java.go:
func (j *Library) GenerateAndroidBuildActions(ctx android.ModuleContext)
calls
func (j *Module) compile(ctx android.ModuleContext, extraSrcJars ...android.Path)
calls
func (j *Module) collectBuilderFlags(ctx android.ModuleContext, deps deps) javaBuilderFlags
calls
func (j *Module) collectBuilderFlags(ctx android.ModuleContext, deps deps) javaBuilderFlags
calls
func getJavaVersion(ctx android.ModuleContext, javaVersion string, sdkContext sdkContext) string
根据getJavaVersion的源码,如果参数“javaVersion”为空(猜测LOCAL_JAVA_LANGUAGE_VERSION什么时候没有设置),它会根据Android版本等返回版本,如果“javaVersion”不为空则返回并放入调用者 collectBuilderFlags 的 java build 命令行。
在collectBuilderFlags中,该参数来自j.properties.Java_version,由于上述来自android.go的信息,该参数应该来自“LOCAL_JAVA_LANGUAGE_VERSION”。
同样根据collectBuilderFlags的源码,你只能使用LOCAL_JAVA_LANGUAGE_VERSION来设置javac的“-source”和“-target”参数。 AOSP10 中的每个 javac 命令调用都是来自 JDK9 的 javac,即 prebuilts/jdk/jdk9/linux-x86/bin/javac
【讨论】: