【问题标题】:How to make AOSP Module with Specified JDK Version?如何制作指定JDK版本的AOSP模块?
【发布时间】:2020-11-27 08:57:19
【问题描述】:

当我完成编译时,有些模块使用jdk1.9,有些使用jdk1.8(因为date 0错误,它不能用jdk1.9编译)。

那么,对于一些特殊的模块,如何在编译完成时指定特殊的JDK呢? Android.mk中如何配置特殊jdk版本?

【问题讨论】:

    标签: android-source android.mk


    【解决方案1】:

    对于 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-18
      • 1970-01-01
      • 2011-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-29
      • 1970-01-01
      相关资源
      最近更新 更多